2012-02-24 72 views
1

是否有某种方式可以获取仅属于我的扩展程序的标签的标签ID?重新加载Chrome浏览器扩展标签

+2

你是什么意思“我的扩展的一部分”?您可以随时跟踪您的扩展在创建时所创建的选项卡。 – 2012-02-24 03:03:00

回答

2

这真的取决于你的意思是“我的扩展的一部分”。

如果您指的是显示包含在您的扩展中的页面的选项卡,则可以执行以下操作;

chrome.tabs.query({}, function (tabs) { 
    var myTabs = []; 
    for (var i = 0; i < tabs.length; i++) { 
    if (tabs[i].url.indexOf(chrome.extension.getURL('')) === 0) { 
     myTabs.push(tabs[i].id); 
    } 
    } 
    console.log(myTabs); 
}); 

如果你想访问你的标签,而不是DOM,它会变得更加容易;

var myTabs = chrome.extension.getViews({type: 'tab'}); 

通过访问DOM,您可以简单地迭代每个视图(DOMWindow)并刷新每个页面;

for (var i = 0; i < myTabs.length; i++) { 
    myTabs[i].location.reload() 
} 
+0

我会使用'getViews'方法,因为这会消除您包含'tabs'权限。 – 2012-02-24 20:43:03

3
myTabs[i].location.reload() 

使得错误:

Uncaught TypeError: Cannot call method 'reload' of undefined 

但是这个代码:

chrome.tabs.executeScript(myTabs[i].id, {code:"document.location.reload(true);"}); 

作品。但最好使用correct method

chrome.tabs.reload(myTabs[i].id) 
+1

在你的回答中,你指的是接受答案中的myTabs。请注意,回答者(混淆地)为不同的集合使用相同的名称('myTabs')。 'chrome.tabs.query'中的'myTabs'返回一个[Tab type](http://developer.chrome.com/extensions/tabs.html#type-Tab),它没有直接引用窗口对象。你的回答对于这种情况是正确的。在另一个答案的底部,'myTabs'是一个'window'对象的数组(从'chrome.extension.getViews'返回)。最后的代码片段仅适用于最后一个'myTabs'对象。 – 2012-10-17 19:36:20

0

我试图做同样的事情,并使用chrome.tabs.querychrome.tabs.get并没有为我工作。这工作完美:

var data = chrome.extension.getViews({'type':'tab'}); 
$.each(data, function(k,v) { 
    v.window.location.reload(); 
});