Javascript 在Google Chrome web应用程序中强制刷新网页的所有打开实例
我一直在尝试为Google Chrome web应用程序创建一个JavaScript函数,用于检查是否存在该应用程序的任何打开实例,如果存在,则强制它们刷新页面 我的原始代码如下: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
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;wvar 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]);
}
});