Firefox拡張機能からページ定義のJavaScript関数を実行するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/151555

質問

デモ用に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;の検索ページで。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top