1

我正在開發Javascript庫的擴展(調試器)。初始結果很好,我遇到了一個錯誤(不知道它是否有錯誤)。問題是:「當一個代碼運行多個標籤時(對於每個標籤,開發工具也是開放的),開發工具從所有打開的標籤中接收消息,但事實並非如此。如何防止它發生?建議將是巨大的幫助。讓我知道如果我需要把相關的任何其他文件中的代碼。在Chrome中開發調試器

//部分的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>" 
] 
} 

的//內容的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

您可以顯示您用於消息傳遞的代碼嗎? – wOxxOm

+1

在您的代碼中,根據['sender'](https://developer.chrome.com/extensions/runtime#type-MessageSender)過濾消息。 – Makyen

+0

@Makyen你能給我舉個例子嗎? – stafan

回答

0

在從後臺消息監聽器的情況下,對象sender包含屬性tab(與tab.id),這樣你就能夠識別標籤發送該消息。

然後你就可以使用得到當前標籤:

chrome.tabs.query({active: true, currentWindow: true}, function(foundTabs){ 
    //foundTabs[0].id //current tab id 
}); 

這意味着你只能從當前標籤過濾消息。