Firefox拡張機能からページ定義のJavaScript関数を実行するにはどうすればよいですか?
-
02-07-2019 - |
質問
デモ用にFirefox拡張機能を作成しています。 拡張機能からドキュメント内の特定のJavaScript関数を呼び出します。 これをHTMLドキュメントに書きました(拡張機能ではなく、Firefoxによってロードされるページ):
document.funcToBeCalled = function() {
// function body
};
その後、拡張機能は何らかのイベントでこれを実行します:
var document = Application.activeWindow.activeTab.document;
document.funcToBeCalled();
ただし、 funcToBeCalled
が定義されていないというエラーが発生します。
注: document.getElementById(id);
解決
セキュリティ上の理由により、拡張機能からコンテンツページへのアクセスが制限されています。 XPCNativeWrapper およびクロムからコンテンツDOMに安全にアクセスする、
ページを制御する場合、これを行う最良の方法は、ページにイベントリスナーを設定し、拡張機能からイベントをディスパッチします(ページのaddEventListener、拡張機能のdispatchEvent)。
それ以外の場合は、 http://groups.google.com/groupをご覧ください。 /mozilla.dev.extensions/msg/bdf1de5fb305d365
他のヒント
document.wrappedJSObject.funcToBeCalled();
これは安全ではないであり、悪意のあるページがその権限を拡張機能の権限に昇格させることを許可します...初期の greasemonkeyの脆弱性。これが悪い考えである理由。
非常に簡単な方法があります。 ページに記述されているxyz()関数を呼び出す必要があるとします。プラグインから呼び出す必要があります。
ボタンを作成します(「ページを邪魔しないように、非表示にします」)。そのボタンのonclickで、このxyz()関数を呼び出します。
<input type="button" id="testbutton" onclick="xyz()" />
プラグインには、ページのドキュメントオブジェクトがあります。 mainDoc
と仮定しますxyz()を呼び出す場所で、この行を実行するだけ
mainDoc.getElementById('testbutton').click();
xyz()関数を呼び出します。
幸運:)
できますが、ページを制御し、スクリプトの特権レベルを上げる必要があります。 Mozillaドキュメントの例-&quot; Privilege&quot;の検索ページで。