Javascript 在Google Chrome web应用程序中强制刷新网页的所有打开实例

Javascript 在Google Chrome web应用程序中强制刷新网页的所有打开实例,javascript,web-applications,google-chrome,tabs,google-chrome-extension,Javascript,Web Applications,Google Chrome,Tabs,Google Chrome Extension,我一直在尝试为Google Chrome web应用程序创建一个JavaScript函数,用于检查是否存在该应用程序的任何打开实例,如果存在,则强制它们刷新页面 我的原始代码如下: chrome.tabs.getAllInWindow(undefined, function(tabs) { for (var i = 0, tab; tab = tabs[i]; i++) { if (tab.url == "chrome-extension://" + chrome.i18

我一直在尝试为Google Chrome web应用程序创建一个JavaScript函数,用于检查是否存在该应用程序的任何打开实例,如果存在,则强制它们刷新页面

我的原始代码如下:

chrome.tabs.getAllInWindow(undefined, function(tabs) {
    for (var i = 0, tab; tab = tabs[i]; i++) {
        if (tab.url == "chrome-extension://" + chrome.i18n.getMessage("@@extension_id") + "/html/application.html") {
            chrome.tabs.update(tab.id, {url: "chrome-extension://" + chrome.i18n.getMessage("@@extension_id") + "/html/application.html"});
        }
    }
});
但这仅适用于当前窗口中的所有选项卡。如果在它们自己的窗口或另一个窗口中存在实例,则不会刷新它们

我对其进行了调整,试图使其适用于所有打开的页面,而不仅仅是当前选定窗口中的页面,如下所示:

chrome.windows.getAll({populate: true}, function(tabs) {
    for (var i = 0, tab; tab = tabs[i]; i++) {
        if (tab.url == "chrome-extension://" + chrome.i18n.getMessage("@@extension_id") + "/html/application.html") {
            chrome.tabs.update(tab.id, {url: "chrome-extension://" + chrome.i18n.getMessage("@@extension_id") + "/html/application.html"});
        }
    }
});
虽然新代码不会在JavaScript控制台中返回错误,但它似乎没有执行它应该执行的操作;刷新应用程序页面的所有打开实例


我是否误解了windows.getAll模块?有人能提供一个有效的解决方案吗?

chrome.windows.getAll
返回一个窗口数组,而不是选项卡。每个窗口都包含一组选项卡。我现在不记得tabs数组是如何调用的,我假设它是
tabs
(只需将返回的窗口转储到控制台并检查):

chrome.windows.getAll({populate:true},函数(windows){ 控制台日志(windows); 对于(var w=0;w您可以只迭代“自己的”扩展打开的页面,而不是迭代所有选项卡:

var views = chrome.extension.getViews();
for (var i in views) {
  var location = views[i].location;
  if (location.pathname == '/html/application.html') {
    location.reload();
  }
}

上面的代码应该比迭代所有窗口更有效、更干净、更快。

对于其他谷歌搜索,您可能会感兴趣。我使用它刷新每个窗口活动选项卡上的浏览器操作图标,因此当扩展更新或重新加载时,图标的状态为“存在”:

chrome.tabs.query({active: true}, function queryCallback(tabs){
  var length = tabs.length;
  for (var i = 0; i < length; i++) {
    handleTab(tabs[i]);
  }
});
chrome.tabs.query({active:true},函数queryCallback(tabs){
变量长度=tabs.length;
对于(变量i=0;i
我从未使用过它,但我认为windows.getAll上的回调将为您提供一个窗口数组,而不是选项卡。所以它应该是
chrome.windows.getAll({populate:true},函数(windows){
在该函数中,您可以通过窗口循环,然后通过选项卡在每个窗口循环。实际上,根本不需要使用chrome.windows API。他所做的只是检查扩展页面。只使用
chrome.extension.getViews()
更干净、更快。我在下面的帖子中添加了一个示例。
chrome.tabs.query({active: true}, function queryCallback(tabs){
  var length = tabs.length;
  for (var i = 0; i < length; i++) {
    handleTab(tabs[i]);
  }
});