【发布时间】:2010-12-09 01:24:39
【问题描述】:
我一直在尝试为 Google Chrome 网络应用程序创建一个 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 模块?谁能提供一个可行的解决方案?
【问题讨论】:
-
我从未使用过它,但我认为 windows.getAll 上的回调会给你一个窗口数组而不是选项卡。所以它应该是
chrome.windows.getAll({populate: true}, function(windows) {在那个函数中你可以循环窗口,然后在每个窗口循环通过标签 -
其实根本不需要使用chrome.windows API。他所做的只是检查他的扩展页面。使用
chrome.extension.getViews()更简洁、更快捷。我在下面的帖子中添加了一个示例。
标签: javascript web-applications google-chrome tabs google-chrome-extension