重新加载 Chrome 扩展标签页

3

有没有一种方法可以获取仅属于我的扩展程序的选项卡ID?


2
你说的“我的扩展的一部分”是什么意思?当你创建标签页时,你可以随时跟踪你的扩展所创建的标签页。 - Jason Hall
3个回答

4
myTabs[i].location.reload()

出现错误:

Uncaught TypeError: Cannot call method 'reload' of undefined

但是这段代码:

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

可以使用方法来使其正常工作。但最好使用正确的方法

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

1
在你的回答中,你提到了被接受的答案中的 myTabs。请注意,回答者(令人困惑地)对不同的集合使用相同的名称(myTabs)。从 chrome.tabs.query 返回的 myTabs 返回一个 Tab 类型,它没有直接引用 window 对象。你的回答对于这种情况是正确的。在另一个答案的底部,myTabs 是一个 window 对象数组(从 chrome.extension.getViews 返回)。最后的代码片段仅适用于最后一个 myTabs 对象。 - Rob W

1
这取决于您所说的“我的扩展的一部分”是什么意思。
如果您指的是显示在您的扩展内部的页面的选项卡,您可以执行以下操作;
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()
}

我会使用getViews方法,因为它可以避免你包含tabs权限。 - Mohamed Mansour

0

我也曾尝试过使用chrome.tabs.querychrome.tabs.get来实现同样的功能,但却无法奏效。以下方法完美解决了问题:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接