2012-02-24 116 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(); 
});