我有两个Chrome扩展程序,其中一个我需要在内容脚本中收到一条消息。另一个扩展名是在其后台页面中发送消息。我正在关注this question,但它无效。
我在监听器中将.extension
更改为.runtime
,但仍然无效。这是代码:
扩展名1,contentscript.js(这不是被解雇)
chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) {
console.log("contentscript");
if(sender.id !== "iknbmfmkhcilpbkobjafdhaloffobdbe")
return;
if (document.getElementById("status").innerHTML === "1")
sendResponse({farewell: "goodbye"});
});
扩展名2,background.js
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
chrome.tabs.sendMessage(tabs[0].id, {pdf: "You a pdf?"}, function(response) {alert(response.farewell);});
});
});
答案 0 :(得分:0)
你真的应该输入巨大的大胆字母,你的问题是关于两个单独的扩展。
您尝试实现的目标是不可能的,因为chrome.tabs.sendMessage
不支持跨扩展消息传递。这实际上意味着内容脚本只能通过父扩展来发送消息。
要实现您的目标,您需要扩展程序1的后台页面才能像代理一样:
// Extension 1, background
chrome.runtime.onMessageExternal(message, sender, sendResponse){
if(sender.id != extensionTwoId) return;
if(message.tabId) {
chrome.tabs.sendMessage(message.tabId, message, function(response){
sendResponse(response);
});
return true; // Required if sendResponse will be called asynchronously
} else {
// It's not a message to be routed to a tab
}
}
和
// Extension 2, background
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.runtime.sendMessage(
extensionOneId,
{tabId: tab.id, pdf: "You a pdf?"},
function(response) {alert(response.farewell);}
);
});