0

Chrome拡張機能が相互作用するドメインのリスト(約10)があります。

これを使用する必要があるChrome拡張機能のドキュメントを調べたので、content_scripts これらの行をmanifest.jsonに含めました。

   "content_scripts": [ {
      "all_frames": true,
      "js": [ "js/main.js" ],
      "matches": [ "http://domain1.com/*",
                   "http://domain2.com/*",
                   "http://domain3.com/*",
                   "http://domain4.com/*",
                   "http://domain5.com/*",
                   "http://domain6.com/*",
                   "http://domain7.com/*",
                   "http://domain8.com/*",
                   "http://domain9.com/*",
                   "http://domain10.com/*"
      ],
      "run_at": "document_start"
   }],

これは、URLがマニフェストファイルで定義されたURLと一致するすべてのページをロードするときに、main.jsがページに挿入されることを意味します。私は正しいですか?はい。

だから私はスクリプトが挿入されたときにいくつかのUIをやりたいですpage action

マニフェストに次の行を含めました。

   "page_action": {
      "default_icon": "images/pa.png",
      "default_title": "This in one of that 10 domains, that is why I showed up!"
   },

足りないようです。ページアクションを手動でトリガーする必要があります。しかしここで ?この目的のために、background.htmlファイルが必要になることに気づきました。

しかし、なぜ同じmain.jsファイルにトリガーを含めることができないのですか?答え:

However, content scripts have some limitations. They **cannot**:

 - Use chrome.* APIs (except for parts of chrome.extension)
 - Use variables or functions defined by their extension's pages
 - Use variables or functions defined by web pages or by other content scripts

それで、それをマニフェストに含めました:

"background_page": "background.html"

これが内容です:

        <html>
          <head>
            <script>
                function check (tab_id , data , tab){
                    //test just one domain to be simple
                    if (tab.url.indexOf('domain1.com') > -1){
                        chrome.pageAction.show(tab_id);
                    };
                };
                chrome.tabs.onUpdated.addListener(check);
            </script>
          </head>

        </html>

ここまでは十分公平、

私が欲しいのですが、拡張機能のオン/オフを切り替える機能を追加する方法がわかりません。

ユーザーがページアクションアイコンをクリックします->アイコンが変化し、オフ/オンになります(main.jsの動作が異なります)

4

1 に答える 1

1

マニフェストを介してコンテンツスクリプトを追加する代わりに、:chrome.tabs.onUpdatedと組み合わせて使用​​することもできます。chrome.tabs.executeScript

// Example:
var url_pattern = /^http:\/\/(domain1|domain2|domain3|etc)\//i;
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if (url_pattern.test(tab.url)) {
        if (changeInfo.status === 'complete') { // Or 'loading'
            chrome.tabs.executeScript(tabId, {'file':'main.js'});
            chrome.pageAction.show(tabId);
        }
    } else {
        chrome.pageAction.hide(tabId);
    }
});

値を確認することを忘れないでください。確認しないchangeInfo.statusと、コンテンツスクリプトが2回実行されます。

これらのifステートメントの1つに、拡張機能がアクティブであるかどうかのチェックを組み込み、それに基づいて動作することができます。

if (changeInfo.status === 'complete' && am_I_active_questionmark) ...

サイドではありません:を使用する代わりに、を使用して、バックグラウンドスクリプトをに配置background_pageすることもできます。"background": {"scripts":["bg.js"]}bg.js

于 2012-06-08T08:56:42.600 に答える