为什么chrome.tabs.create会创建2个标签?

时间:2015-06-15 22:26:55

标签: google-chrome-extension

当收到的消息触发chrome.tabs.create函数时,它会创建2个选项卡。在以下演示代码中,创建了1个cat选项卡,并创建了2个dog选项卡。

这是设计还是错误?如果是已知错误,您是否可以提供错误ID以便跟踪其进度?如何避免创建2个重复的标签?

调试控制台包含以下输出,因此实际上重复选项卡也会注入内容脚本,即使在调试输出中只打印了一次对secondaryTabCreationCallback_的调用!!!!

chrome.runtime.sendMessage({type: "CREATE_TAB"});

background.js

chrome.runtime.sendMessage({type: "KILL_ME"});

content_script.js

<!doctype html>
<html>
  <head>
    <script src="background.js"></script>
  </head>
  <body>
    <div>
      <input type="button" id="start_button" value="Start">
    </div>
  </body>
</html>

content_script2.js

{
  "manifest_version": 2,

  "name": "Tab Bug",
  "description": "Demonstrates bug in chrome.tabs.create.",
  "version": "1.0",

  "permissions": [
    "activeTab",
    "nativeMessaging",
    "tabs",
    "https://www.google.com/"
  ],
  "icons": { "128": "icon128.png" },
  "browser_action": {
    "default_icon": "icon19.png"
  },
  "background": {
    "page": "background.html"
  }
}

background.html

{{1}}

的manifest.json

{{1}}

1 个答案:

答案 0 :(得分:0)

问题是有两个“背景”页面正在运行。

  1. 清单文件中指定的官方背景页。
  2. chrome.tabs.create({'url': chrome.extension.getURL('background.html')})
  3. 创建的标签

    这意味着有2个消息监听器,这就是打开2个选项卡的原因。

    可以通过查看chrome扩展页面上的扩展名并点击“Inspect views:background.html”找到来自官方manifest.json背景的控制台消息。显示:

    Creating secondary tab
    Created secondary tab: 11966
    Kill request from tab: 11966
    Kill request from tab: 11968
    

    解决此问题。 manifest.json后台文件可以指向一个脚本“starter.js”而不是一个html页面,它只是有以下javascript:

    chrome.browserAction.onClicked.addListener(function(tab) {
      chrome.tabs.create({'url': chrome.extension.getURL('background.html')});
    });