0

我一直在尝试制作一个带有图标的扩展程序,单击该图标会停止(所有)选项卡的加载。

我有这个清单文件:

{
  "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 中的扩展按钮时会调用哪个函数?感谢您的时间和帮助。

4

1 回答 1

0

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

背景.html

...
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"});
            }
        }
    });
});
...

此解决方案用于executeScript代替内容脚本。

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

将内容脚本附加到侦听来自背景页面的订单的每个选项卡。

背景.html

...
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"});
            }
        }
    });
});
...

kliknuto.js:

chrome.extension.onRequest(function(request) {
    if(request.order == "stop") {
        window.stop();
    }
});

确保添加"run_at":"document_start"content_script清单中的块,以便内容脚本尽快开始侦听。

于 2012-05-05T15:38:41.283 回答