Microsoft Edge 拡張の相互運用性


以前の記事の「拡張機能の相互運用性」 で記述したとおり Edge の拡張用 API は Microsoft、Mozilla、Opera 3 社の提案する共通のコア API をサポートしており、その API は Chrome 拡張 API を強く意識したものになっています。

したがって共通化された拡張のコア API のみを使用して拡張を作成すれば、理屈上は Edge、Chrome、Firefox、Opera といったメジャー Web ブラウザーのどれでも動作する拡張が作成できることになります。(※)

(※)ただし、前述の 3 社が提案するコア API の仕様は、ブラウザベンダーが独自の API を追加することは許容されているので、そういった特定のブラウザーだげに実装されている機能については動作しない可能性があります。また、共通の API であってもすべてのブラウザーのサポートが完了していない場合はこの限りではありません。

 

今回の記事では Microsoft Edge の相互運用性ということで、Edge と Google Chrome の両方で使用できる拡張を作成する方法について紹介します。

 

マニフェストファイルにおける必須スキーマの違い

拡張の情報を Web ブラウザーに登録するためのマニフェストファイルにはわずかですが Edge とChrome で必須とするスキーマの違いがあります。

具体的には、マニフェストファイルにおいて Edge で必須となるスキーマのキーは name と author と version ですが、Chrome では manifest_version キーが必須であり、その値はつねに 2 である必要があります。逆に author キーの指定は Chrome では必須でありません。(2016 年 11 月現在)

image


また、background キーの指定でも Edge では persistent キーの指定が必須となります。


image



名前空間の違い

Edge と Chrome では拡張の API を提供する名前空間が異なります。

Edge は browser であるのに対し Chrome は chrome を使用します。

この際は以下のようなコードで吸収することができます。

image


上記のコードでは、Edge にロードされた場合に名前空間のインスタンスが格納されている browser という変数を調べ、値が設定されていなければ Chrome で使用された際に名前空間のインスタンスが格納されている chrome の内容を browser にセットしています。

このコードを使用すると、このコード以降、変数 browser を名前空間として記述したコードが Chrome でも動作します。

なお、サンプルで示したコードは最低限の要件を満たす簡易的な記述なので、変数 browser や Chrome  が別の用途に使用されている可能性がある場合はより安全で周到な記述を行うことをお勧めします。

 

その他の細かな互換性の際について

API のサポート状況やその動作についての差異はマイクロソフトの提供する拡張 API のドキュメントであれば以下のような記載があり、

image


リンク先となっている MDM のドキュメントでは以下のように記載があるので

image

なんらかの特定のブラウザーでのみ動作しない状況に遭遇した場合には、これらドキュメントを参照することをお勧めします。

 

Chrome 拡張を Edge 拡張に移行するためのツール

Chrome 拡張を Edge 拡張に移行するためのツール Microsoft Edge Extension Toolkit が用意されており、以下から入手することができます。

 

image


Microsoft Edge Extension Toolkit はターゲットとなる Chrome 拡張を調べ、Edge 拡張として互換性に問題がある部分を検出しエラーとして出力します。

開発者はそのエラー箇所を手動で修正とます。

Microsoft Edge Extension Toolkit の使い方については以下のドキュメントをご参照くださいませ。

 

まとめ

Microsoft Edge 用の拡張は、複数のブラウザーベンダー間の標準化の提案に準拠した API を採用しています。

そのため、各ブラウザー拡張 API の細かな差異を吸収すれば、複数のブラウザーで動作可能な拡張を作成することができます。

特定のブラウザーの独自実装や、API のサポート状況などの差異などはいかんともしがたいところではありますが、この共通化された仕様の恩恵は開発者にとってけして小さいものではないでしょう。

なお、Edge 拡張の API サポート状況と今後のロードマップは以下のページでご覧いただけます。

 

 

Real Time Analytics

Clicky

Comments (0)