我试图将Chrome扩展程序的后台脚本分解成更小的,更易于管理的单个脚本,这些脚本通过消息传递相互通信。现在我有两个脚本background.js
和database.js
。
background.js
var message = 1;
console.log("Background.js running");
console.log("Sending message " + message);
chrome.runtime.sendMessage(message, function (response) {
console.log("Response received " + response);
message+=1;
})
database.js
console.log("Database.js running");
chrome.runtime.onMessage.addListener(function (request, requester, sendResponse)
{
console.log("message received " + request);
console.log("Sending response " + request);
sendResponse(request);
return true;
});
它们都在启动时运行并database.js
注册了一个消息监听器。然后我使用sendMessage database.js
,希望在中接收和处理它database.js
。但是,用于发送消息的回调将立即调用,且响应为空,并且中的处理程序database.js
不会触发。
当使用上述两个脚本运行扩展时,我希望看到输出:
Database.js running
Background.js running
Sending message 1
Message received 1
Sending response 1
Response received 1
我反而得到:
Database.js running
Background.js running
Sending message 1
Response received undefined
是什么导致此行为,并且可以修复?
根据文件:
如果发送到您的扩展程序,则将在扩展程序的每个帧中触发runtime.onMessage事件(发送者的帧除外)
您无法在发送的同一帧/上下文中接收到消息。就像Daniel Herr指出的那样,您可以只调用所需的函数,而不必传递消息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句