弹出窗口中没有触发chrome.tabs.create的回调?

时间:2016-05-07 14:45:43

标签: javascript google-chrome-extension

我正在编写我的第一个chrome扩展程序,它应该在新标签页中打开一个URL,然后执行此操作。

清单:

{
  "manifest_version": 2,

  "name": "Test",
  "description": "",
  "version": "1.0",

  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "permissions": [
    "tabs",
    "activeTab"
  ]
}

的script.js:

function toggle() {
        chrome.tabs.create({ url: "http://google.com" }, function(tab) {
        alert("Hello!");
        });
 }

document.getElementById('toggle').addEventListener('click', toggle);

popup.html:

<html>
  <head>
  </head>
  <body>
    <div id="toggle" class="clickable">START</div>
    <script type="text/javascript" src="script.js"></script>
  </body>
</html>

问题是在打开URL后没有任何反应。可能是什么问题?

1 个答案:

答案 0 :(得分:3)

创建新标签页时,默认情况下会以焦点方式打开,这会导致弹出窗口关闭。当弹出窗口关闭时,它的JavaScript上下文被破坏,并且没有可回调的回调。

您有两个选择:

  1. 将逻辑移至background / event page,这将在弹出窗口关闭后继续存在。例如,您可以message背景页面为您执行此操作,而不是从弹出窗口中打开选项卡。

  2. Specify您要打开未聚焦的标签:

    chrome.tabs.create(
      {
        url: "http://google.com",
        active: false 
      }, function(tab) {
        /* ... */
      }
    );
    

    但是,这不会导致标签无法对焦 - Chrome不会切换到它(在后台打开)。可能不是你想要的。您可以在完成其他操作后进行切换 - 使用chrome.tabs.update设置active: true

  3. 请注意,弹出窗口无法避免焦点丢失,这是设计使然。