3

Firefox 22 で問題が発生しているように見えるアドオンを維持しています。loadFrameScript を使用する JavaScript モジュールがあり、mozIJSSubScriptLoader を使用していくつかのライブラリを挿入します。loadFrameScript によって取り込まれたファイルは、次のようになります。

// Create a JS sub-script loader.
var loader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
        .getService(Components.interfaces.mozIJSSubScriptLoader);

// Create a context object.
var executionContext = Object.create(content);

// Load the libraries.
loader.loadSubScript("chrome://my-package/content/libs/jquery.js", executionContext);
loader.loadSubScript("chrome://my-package/content/logic.js", executionContext);

ただし、jQuery をロードすると例外がスローされます。

エラー: NS_ERROR_XPC_BAD_OP_ON_WN_PROTO: WrappedNative プロトタイプ オブジェクトに対する不正な操作 ソース ファイル: chrome://my-package/content/libs/jquery.js 行: 829

jQueryがsetTimeoutを呼び出すだけで、その行で何かおかしなことをしているようには見えません。このメッセージを探し回ったところ、Scriptish拡張機能で同様の状況が見つかりましたが、解決策はありませんでした。どうすればよかったのか、または Firefox 22 で jQuery をロードする方法を壊したのはどのような変更なのか、途方に暮れています。jQuery を導入するためのより良い方法はありますか?

アップデート

これは本当に最も厄介な問題です。そもそもなぜそれを使用したのか覚えていないため、オブジェクトの使用を中止し、executionContextjQuery がコンテンツに読み込まれます。

loader.loadSubScript("chrome://my-package/content/libs/jquery.js", content);
loader.loadSubScript("chrome://my-package/content/logic.js", content);

ただし、現在、 にも読み込まれる他のスクリプトcontentは使用できませんsendAsyncMessage。アドオン API を持たないまったく新しいスコープであるため、これは理にかなっていると思いますが、ページ DOM の読み取り方法がわかりません。ロジックと jQuery をロードして、結果を出すcontent機能を保持するにはどうすればよいですか?sendAsyncMessage

4

2 に答える 2

0

ちょうど私の2セント -

また、問題が発生する拡張機能も維持しています。私にとって、解決策は実際にはスクリプトで示されているものと同じです。そのメソッドを直接参照する代わりに、window.xxxx を使用してください。

たとえば、以前の行の 1 つで setTimeout() を直接呼び出していましたが、それを window.setTimeout() に変更すると、コードが機能します。

その行はsetTimeoutを呼び出す以外に何もしていないとおっしゃっていたので、同じ問題だと思います。ウィンドウを追加してみてください。その電話の前に。

幸運を!

于 2013-07-03T21:00:57.150 に答える