我正在为Javascript库开发扩展(调试器)。初步结果很好,我遇到了一个错误(不确定它是否是一个错误)。问题是“当代码运行多个选项卡打开时(对于每个选项卡,dev-tools也是打开的)并且开发工具从所有打开的选项卡接收消息,这不应该是这种情况。如何防止它发生?建议会很有帮助。如果我需要将代码与任何其他文件相关联,请告诉我。
// Manifest.json的一部分
{
"manifest_version": 2,
"name": "debugger",
"version": "1.0",
"description": "some",
"author": "some",
"devtools_page": "devtools.html",
"background": {
"scripts": [
"background.js"
]
},
"permissions": [
"tabs",
"storage",
"<all_urls>"
]
}
// content-script.js
chrome.extension.sendMessage(message, function (message) {
console.log("message sent");
});
chrome.extension.onMessage.addListener(function (msg, sender, sendResponse) {
if (msg.action == 'debug') {
console.log("Message: " + msg.content);
}
});
// Background.js
chrome.extension.onConnect.addListener(function (port) {
var extensionListener = function (message, sender, sendResponse) {
if (message.destination == "panel") {
port.postMessage(message);
// chrome.tabs.sendMessage(sender.tab.id, message, sendResponse);
}
});
// panel.js
var port = chrome.extension.connect({
name: "my-extension"
});
port.onMessage.addListener(function (message) {
// do something with message
});
答案 0 :(得分:0)
在您的情况下,后台消息侦听器中的对象sender
包含属性tab
(带有tab.id),因此您可以识别发送此消息的选项卡。
然后您可以使用以下方式获取当前标签:
chrome.tabs.query({active: true, currentWindow: true}, function(foundTabs){
//foundTabs[0].id //current tab id
});
这意味着您只能过滤当前标签中的消息。