chrome.windows未定义Chrome扩展程序

时间:2015-02-26 16:30:02

标签: javascript google-chrome google-chrome-extension

我正在构建一个Chrome扩展程序,允许用户管理应用程序(网站)的打开选项卡。清单是:

{
    "manifest_version": 2,
    "name": "AT Tabs",
    "version": "0.1",
    "permissions": ["activeTab", "tabs"],
    "content_scripts": [{
        "matches": ["<all_urls>"],
        "js": ["main.js"]
    }]
}

但是当我在main.js文件中执行此操作时:

console.log(chrome.windows);

我在控制台中未定义...任何想法为什么?我有两个选项卡和activeTab作为权限,扩展程序正在开发人员模式下运行。

1 个答案:

答案 0 :(得分:10)

chrome.windows将无法在您的main.js中使用,因为它是一个注入的内容脚本。

只有您的background/event pages JavaScript才能访问chrome.windows。您需要使用内容脚本中的message passing到后台脚本来触发所需的窗口操作。

例如,要从内容脚本创建窗口,您的扩展程序可能如下所示:

清单:

{
  ...
  "background": {
    "scripts": ["eventPage.js"],
    "persistent": false
  },
  ...
}

main.js:

chrome.runtime.sendMessage({
    action: 'createWindow',
    url: 'http://google.com'
  },
  function(createdWindow) {
    console.log(createdWindow);
  });

eventPage.js:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
  if (request && request.action === 'createWindow' && request.url) {
    chrome.windows.create({url: request.url}, function (win) {
      sendResponse(win);
    });
  }
});