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 を導入するためのより良い方法はありますか?
アップデート
これは本当に最も厄介な問題です。そもそもなぜそれを使用したのか覚えていないため、オブジェクトの使用を中止し、executionContext
jQuery がコンテンツに読み込まれます。
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