1

コンテンツ スクリプトでウィンドウ オブジェクトにアクセスできないようです。これは正常ですか?

たとえば、これは何もしません:

window.onload = function() {
  console.log("Hello from the onload");
};

代わりに、unsafeWindowオブジェクトを使用する必要があります。

unsafeWindow.onload = function() {
  console.log("Hello from the onload");
};

私は何か単純なものを見逃しているに違いありませんか?

4

2 に答える 2

5

を使用せずwindow.onload、代わりに次のように記述します。

window.addEventListener("load", function() {
  console.log("Hello from the onload");
}, false);

window.onloadには、イベント リスナーが 1 つしか存在できないという制限があります。別のリスナーを設定すると、既存のリスナーが置き換えられます。これが、使用してはならない理由です。アドオン SDK の場合、コンテンツ スクリプトは Web ページとは異なる DOM ビューを持つため、事態はさらに複雑になります。だからただ使うaddEventListener

ああ、使用しないでくださいunsafeWindow- (名前が既に言っているように) 本質的に安全ではありません。

于 2012-08-31T08:01:38.077 に答える
4

コンテンツ スクリプトで使用できる window オブジェクトは、実際にはプロキシです。したがって、unsafeWindow は機能しますが、window は機能しません。私はいくつかのテストを行いましたが、document.addEventListener も機能しません。

https://builder.addons.mozilla.org/package/150362/latest/

jQuery は正常に動作しているようですが、何があっても確実に起動するために行う魔法があると思います。

回避策は、単に contentScriptWhen を 'end' に設定し、すぐにコードを実行することです。これは、ドキュメントの読み込みが完了するとコンテンツ スクリプトが添付されるため、常に機能するはずです。

私が「wtf?」と考えたいものに関して、このバグをログに記録しました。この動作の側面 - この結果は Web 開発者にとって驚くべきものだと思います。

https://bugzilla.mozilla.org/show_bug.cgi?id=787063

于 2012-08-30T14:28:49.247 に答える