Google Chrome扩展程序 - 单击图标可调用某项功能

时间:2012-05-05 09:16:44

标签: google-chrome javascript-events google-chrome-extension

我一直在尝试制作一个带有图标的扩展程序,点击后会停止(所有)标签加载。

我有这个清单文件:

{
  "name": "Stop Loading",
  "version": "1.0",
  "manifest_version": 2,
  "description": "Stop loading all tabs in Chrome",
  "browser_action": {
    "default_icon": "greyclose.png"
  },

  "background_page": "background.html",
   "content_scripts": [ {
      "all_frames": true,
      "js": [ "kliknuto.js" ],
      "matches": [ "http://*/*", "https://*/*" ]
   } ],

  "permissions": [ "tabs", "http://*/*", "https://*/*" ]
}

在background.html中我有这段代码:

chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.extension.sendRequest({reqtype: "get-settings"}, function(response) {
    window.setTimeout("window.stop();", 0);
  });
});

我不确定我是否应该将background.html代码放入javascript文件“kliknuto.js”或其他内容。单击Chrome中的扩展程序按钮时会调用哪个功能? 感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:0)

在您的代码中,background.html正在向自己发送查询(chrome.extension.sendRequest不会发送到内容脚本),然后,如果/当它收到回复时,后台页面正在调用{{1} } 本身,而不是标签。你真正需要的是:

<强> background.html

window.stop()

此解决方案使用... chrome.browserAction.onClicked.addListener(function(tab) { // get all tabs in all windows chrome.windows.getAll({"populate":true}, function(winArray) { for(var i = 0; i < winArray.length; ++i) { for(var j = 0; j < winArray[i].tabs.length; ++j) { var t = winArray[i].tabs[j]; // push code to each tab chrome.tabs.executeScript(t.id, {"code":"window.stop();", "allFrames":"true"}); } } }); }); ... 代替内容脚本。

使用替代解决方案进行编辑:

将内容脚本附加到每个标签,用于侦听来自背景页面的订单。

<强> background.html

executeScript

<强> kliknuto.js:

...
chrome.browserAction.onClicked.addListener(function(tab) {
    // get all tabs in all windows
    chrome.windows.getAll({"populate":true}, function(winArray) {
        for(var i = 0; i < winArray.length; ++i) {
            for(var j = 0; j < winArray[i].tabs.length; ++j) {
                var t = winArray[i].tabs[j];
                // push code to each tab
                chrome.tabs.sendRequest(t.id, {"order":"stop"});
            }
        }
    });
});
...

确保将chrome.extension.onRequest(function(request) { if(request.order == "stop") { window.stop(); } }); 添加到清单中的"run_at":"document_start"块,以便内容脚本尽快开始收听。