8

私はここ数週間、いくつかのブラウザ拡張を書いてきましたが、今日まで、Firefox用のWebExtensionはChromeでほぼ自動的に機能するはずだと思いました。だから、私はMozillaの例に従って自分のコードを書こうとしました。
しかし、今日私は、Chrome拡張機能のAPIドキュメントに「約束」の記載がないことに気付きました。
私はすべての私の拡張機能のコードを通して厳密に約束を使用しました。Chrome拡張APIのサポートを約束しますか?

これで私の質問は、私のコードはChromeで動作するのですか?または、私がvar browser = chrome宣言を最上部に追加してもうまくいきますか?
または、ChromeはAPIの約束をまったくサポートしていませんか?
ChromeがまだAPI機能に関する約束をサポートしていない場合は、将来サポートされますか?

私はこのプロジェクトに気づいています:https://github.com/mozilla/webextension-polyfill
しかし、私はその図書館をどこにでも含むことの面倒を見るつもりはありません。また、迷惑なバグもあります。

さらに、私はChromeやChromiumを持っていないので、プライバシーとセキュリティ上の理由からインストールできません。

+1

はい、それはChromeで必須です。未来はまだ始まっていない。しかし、https://crbug.comに問題があります。 – wOxxOm

+3

https://crbug.com/328932 –

答えて

3

...今日まで私はFirefox用のWebExtensionはChromeでほぼ自動的に機能するはずだと思っていました。

WebExtensionsは、Chrome拡張機能を前提として作成されています。 chrome.*名前空間は、サポートされているAPIで使用できます。ここでの目標は、FFへの既存の拡張機能の移植を容易にして、エコシステムを迅速にブートストラップすることです。

ただし、Mozillaはbrowser.*名前空間との前方互換性を無視しています。 Mozillaは、新しい名前空間についてのみ、APIの約束に基づくアプローチをとることに決めました。

ここで私の質問は、Chromeで動作するのですか?
var browser = chrome宣言を最上部に追加しても問題ありませんか?

いいえ。彼らは異なったふるまいを持ち、異なる署名を持っています。 Chromeは、明示的なコールバックを必要とせずにコールを拒否します。 browser.*バリアントは代わりにPromiseを放出します。

また、ChromeはAPIの約束をまったくサポートしていませんか?
ChromeがまだAPI機能に関する約束をサポートしていない場合は、将来サポートされますか?

コメントに記載されているように、プロキシベースのAPIの書き換えis considered by Chromeでは、目に見える作業は行われていません。しかしながら、the one you mentionedを含むポリフィルが存在する。独自のポリフィルを作成する方法を自分でラップする以外に、他に解決策はありません。

さらに、私はChromeやChromiumを持っていないため、プライバシーとセキュリティ上の理由からインストールできません。

次に、ポートを正しくテストすることはできません。それはあなたの潜在的なユーザーのための良いアプローチではありません。この場合、ではなく、の移植が有効です。

0

私はこのライブラリhttps://github.com/lawlietmester/webextensionを作成して、webextension-polyfillのような一般的なルールなしにこれを作成しました。

私のライブラリはオリジナルのクロム/ブラウザを変更せずにBrowserオブジェクトを作成するクロスブラウズの方法です。 jQueryと同じように古いものです。

は一度だけ、それを使用するには -

(typeof browser === 'undefined' ? chrome : browser).extension.getBackgroundPage().Browser

0

から、私は見ていないバックグラウンド・プロセスでそれをインポートしてから、他の(例えば、ポップアップ)からの輸入を使用輸入のために、バックグラウンドのために、それはグローバル作りますbrowser APIで、私は基盤が離れている可能性がありますが、の場合は、という違いは、Firefox APIがコールバックを使用する代わりに約束を返すということです。chrome-promiseライブラリが役立つかもしれません。代わりに約束を返す関数でコールバックを必要とするすべてのAPI呼び出しをラップします。

その後、Chromeでこのような何かを行うことができます:

var browser = new ChromePromise(); 

をそして約束の呼び出しを行う:あなたはポリフィルの説明に見ることができるよう

browser.storage.local.get(null).then(data => console.log(data)); 
関連する問題