当收到的消息触发chrome.tabs.create函数时,它会创建2个选项卡。在以下演示代码中,创建了1个cat选项卡,并创建了2个dog选项卡。
这是设计还是错误?如果是已知错误,您是否可以提供错误ID以便跟踪其进度?如何避免创建2个重复的标签?
调试控制台包含以下输出,因此实际上重复选项卡也会注入内容脚本,即使在调试输出中只打印了一次对secondaryTabCreationCallback_的调用!!!!
chrome.runtime.sendMessage({type: "CREATE_TAB"});
chrome.runtime.sendMessage({type: "KILL_ME"});
<!doctype html>
<html>
<head>
<script src="background.js"></script>
</head>
<body>
<div>
<input type="button" id="start_button" value="Start">
</div>
</body>
</html>
{
"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"
}
}
{{1}}
{{1}}
答案 0 :(得分:0)
问题是有两个“背景”页面正在运行。
chrome.tabs.create({'url':
chrome.extension.getURL('background.html')})
。这意味着有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')});
});