1

我正在尝试制作一个每 2 分钟重新加载一个选项卡的扩展程序,但我希望它尝试重新加载,即使互联网处于脱机状态(因此它会在重新启动时重新加载)。当窗口出现错误(例如离线)时,使用 location.reload() 不起作用,所以我认为最好的方法是使用 chrome.tabs.reload()。

问题是,所有 chrome.tabs 都会给我一个类似的错误,如果我尝试使用空参数它应该可以工作,因为根据文档它默认为当前选项卡,而是:

chrome.tabs.reload({});
Uncaught TypeError: Cannot call method 'reload' of undefined 

如果我尝试获取当前标签 ID:

chrome.tabs.query({currentWindow: true, active: true}, function (tabs) {
  console.log(tabs[0]);
});
Uncaught TypeError: Cannot call method 'query' of undefined 

同样,每个单曲chrome.tabs都有类似的错误,“无法调用未定义的 xxyyzz”。好像chrome看不到我的标签,这是怎么回事?

我的 manifest.js 是:

{
  "manifest_version": 2,

  "name": "test",
  "description": "",
  "version": "1.0",

  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "content_scripts": [
    {
      "matches": ["http://www.google.com/*"],
      "js": ["reload.js"],
      "run_at": "document_end"

    }
  ],
  "permissions": [
    "tabs","storage","http://www.google.com"
  ]
}
4

1 回答 1

4

无法 chrome.tabs从内容脚本内部访问,

[...] 内容脚本有一些限制。他们不能:

  • 使用 chrome.* API(chrome.extension 的一部分除外),例如 chrome.tabs
  • 使用由其扩展页面定义的变量或函数
  • 使用由网页或其他内容脚本定义的变量或函数

[...]

您必须使用 aBackground Page才能使用chrome.tabs Api Methods

reload并从那里调用。

更新:
我添加了一个简单的示例background.js,它通过单击上下文菜单来切换选项卡(2 分钟)的自动重新加载。我尽量评论它

剧透警告:如果您将其作为自己的学习实践(或类似的东西) ,请不要单击此链接,否则请随意使用代码做任何您想做的事情

于 2013-03-18T14:55:55.173 回答