9

デモ用に Firefox 拡張機能を作成しています。拡張機能からドキュメント内の特定の JavaScript 関数を呼び出します。これを HTML ドキュメントに書きました (拡張機能内ではなく、Firefox によって読み込まれるページ)。

document.funcToBeCalled = function() {
   // function body
};

次に、拡張機能はいくつかのイベントでこれを実行します。

var document = Application.activeWindow.activeTab.document;
document.funcToBeCalled();

funcToBeCalledただし、定義されていないというエラーが発生します。

注: を呼び出すことで、ドキュメントの要素を取得できました。document.getElementById(id);

4

5 に答える 5

8

拡張機能からのコンテンツ ページへのアクセスが制限されているのは、セキュリティ上の理由からです。XPCNativeWrapperChrome からコンテンツ DOM に安全にアクセスするを参照してください。

ページを制御する場合、これを行う最善の方法は、ページにイベント リスナーを設定し、拡張機能からイベントをディスパッチすることです (ページに addEventListener、拡張機能に dispatchEvent)。

それ以外の場合は、 http: //groups.google.com/group/mozilla.dev.extensions/msg/bdf1de5fb305d365を参照してください。

于 2008-10-03T18:20:10.277 に答える
6
document.wrappedJSObject.funcToBeCalled();

これは安全ではなく、悪意のあるページがそのアクセス許可を拡張機能のアクセス許可に昇格させることを可能にします...しかし、それはあなたが求めたことを行います. これが悪い考えである理由については、初期のグリースモンキーの脆弱性を読んでください。

于 2010-03-26T18:39:38.697 に答える
2

私はそれを行うための非常に簡単な方法を持っています。ページに書かれている xyz() 関数を呼び出す必要があるとします。プラグインから呼び出す必要があります。

ボタンを作成します(「非表示にします。ページを邪魔しないようにします」)。そのボタンの onclick で、この xyz() 関数を呼び出します。

<input type="button" id="testbutton" onclick="xyz()" />

プラグインには、ページのドキュメント オブジェクトがあります。そのmainDocを仮定します

xyz() を呼び出したい場所で、この行を実行するだけです

mainDoc.getElementById('testbutton').click();

xyz() 関数を呼び出します。

幸運を :)

于 2010-05-24T09:53:51.273 に答える
0
var pattern = "the url you want to block";

function onExecuted(result) {
console.log(`We made it`);
}

function onError(error) {
console.log(`Error: ${error}`);
}

function redirect(requestDetails) {
var callbackName = 'callbackFunction'; //a function in content js
var data = getDictForkey('a url');
var funcStr = callbackName + '(' + data + ')';
const scriptStr = 'var header = document.createElement(\'button\');\n' +
    ' header.setAttribute(\'onclick\',\'' + funcStr + '\');' +
    ' var t=document.createTextNode(\'\');\n' +
    ' header.appendChild(t);\n' +
    ' document.body.appendChild(header);' +
    ' header.style.visibility="hidden";' +
    ' header.click();';
const executing = browser.tabs.executeScript({
    code: scriptStr
});
executing.then(onExecuted, onError);
return {
    cancel: true
}
}

chrome.webRequest.onBeforeRequest.addListener(
redirect,
{urls: [pattern]},
["blocking"]
);

function getDictForkey(url) {
xxxx
return xxxx;
}
于 2020-02-13T04:46:28.283 に答える
0

それは可能ですが、ページを制御し、スクリプトの特権レベルを上げることができる必要があります。Mozilla Documentation に例が示されています - ページで「特権」を検索してください。

于 2008-09-30T04:44:38.810 に答える