Chrome をベースにした Firefox の新しい webExtensions フレームワークを使用して、webextension を作成しています。すべてのサンプル エクステンションは Nightly ビルドで動作するので、そこでテストしています。私がやろうとしているのは、ロード時にコンテンツ ページでスクリプトを実行することです。ここに私の background.js ページがあります:
background.js
"use strict";
function onCompletedFunc(details) {
var script = 'console.log("ok");';
console.log("Details are %o", details);
chrome.tabs.executeScript(details['tabId'], {
code: script,
runAt: 'document_end'
});
};
chrome.webRequest.onCompleted.addListener(onCompletedFunc,
{'urls': ['<all_urls>']},
['responseHeaders']);
//Does not work:
/*
chrome.webRequest.onCompleted.addListener(onCompletedFunc,
{'urls': ['<all_urls>'], 'types':["main_frame"]},
['responseHeaders']);
*/
これはナイトリーで機能します。バックグラウンド ページから詳細のリスト (「詳細は ...」) を取得し、コンテンツ ページのコンソールに "ok" の数行 (ロードされたリソースごとに 1 行) を取得します。Chrome でも同じように動作します (マニフェスト ファイルが若干異なります)。
私が欲しいのは、ページで 1 回だけ実行される 2 番目のバリエーションです。これは Chrome で問題なく動作します。Nightly では、メイン フレームから「詳細」メッセージが 1 つ表示されますが、コンテンツ ページのコンソールには何も表示されません。
これはタイミングの問題だと思いますが、何が問題なのですか?
manifest.json (Chrome で使用するために "applications":{...} を削除します)
{
"description": "",
"manifest_version": 2,
"name": "execute_script",
"version": "1.0",
"applications": {
"gecko": {
"id": "user-agent-rewriter@mozilla.org",
"strict_min_version": "45.0"
}
},
"permissions": [
"webRequest", "webRequestBlocking", "<all_urls>"
],
"background": {
"scripts": ["background.js"]
}
}