后台脚本的onMessage中没有收到后台脚本的sendMessage

问题描述 投票:0回答:1

我正在尝试将 Chrome 扩展程序的后台脚本分解为更小、更易于管理的单独脚本,这些脚本通过消息传递相互通信。现在我有两个脚本

background.js
database.js

背景.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;
})

数据库.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
注册消息监听器。然后我在
database.js
中使用sendMessage,希望在
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

导致此行为的原因是什么?可以修复吗?

javascript google-chrome google-chrome-extension
1个回答
1
投票

根据文档

如果发送到您的扩展,runtime.onMessage 事件将是 在扩展程序的每一帧中触发(发送者的帧除外

您无法在发送的同一帧/上下文中接收消息。就像 Daniel Herr 指出的那样,你可以只调用你想要的函数,而不是传递消息。

© www.soinside.com 2019 - 2024. All rights reserved.