让chrome.tabs.reload()重新加载活动选项卡以外的选项卡

时间:2017-01-24 19:37:25

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

作为我的第一个扩展,我正在尝试使用chrome.webRequest API来重新加载网页,当网页不可用时,网络服务器会将请求重定向到另一个网址。如果找到重定向(tabs.reload事件发生),我的扩展程序将继续尝试原始请求(onBeforeRedirect)。

一切正常,但我不能让它在多个标签上运行。扩展程序可以创建一个选项卡并继续重新加载,但是当我单击扩展程序图标打开另一个选项卡或单击其他非活动选项卡时, background.js 将停止运行。

如何修改它以便在不停止的情况下在多个选项卡上运行(例如,同时运行5个选项卡)?

这是 background.js

chrome.browserAction.onClicked.addListener(function(activeTab) {
   var newURL = "https://myurl";
   chrome.tabs.create({ url: newURL });
});

chrome.webRequest.onBeforeRedirect.addListener(function (details) {
    console.log("Redirect -> Reload");
    chrome.tabs.reload();
}, {
    urls: ["http://*/*", "https://*/*"]
}, ["responseHeaders"]);

chrome.webRequest.onResponseStarted.addListener(function (details) {
    console.log("Response Started");
    console.log(details.url); 
    console.log(details.statusLine);
    if (details.url === "https://myurl" && details.statusCode === 200 ) {
        console.log("Finally");
    }
}, {
    urls: ["http://*/*", "https://*/*"]
}, ["responseHeaders"]);

的manifest.json

 {
  "name": "My Tool",
  "description": "My Tool",
  "version": "1",
  "manifest_version": 2,

  "browser_action": {
    "default_icon": "icon.png"
  },
  "background": {
    "scripts": ["background.js"]
},
  "permissions":[
    "https://myurl",
    "http://redirectedurl",
    "webRequest",
    "webRequestBlocking",
    "tabs"
  ]
}

1 个答案:

答案 0 :(得分:1)

虽然我没有测试过您的代码,但是除了当前窗口的活动选项卡之外的其他任何内容都没有用的一个原因是您没有将参数传递给chrome.tabs.reload()。如果没有参数,它将默认重新加载当前窗口中的活动选项卡,而不管哪个选项卡实际触发了chrome.webRequest.onBeforeRedirect事件。要重新加载实际触发webRequest.onBeforeRedirect事件的选项卡,您需要将带有选项卡ID的参数传递给chrome.tabs.reload(),如:

chrome.tabs.reload(details.tabId);