2

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"]
  }

}
4

1 に答える 1