消息未在Chrome扩展程序背景页之间正确传递

时间:2017-05-02 02:10:07

标签: javascript google-chrome google-chrome-extension

我试图将Chrome扩展程序的后台脚本拆分为更小,更易于管理的单个脚本,这些脚本通过消息传递相互通信。现在我有两个脚本background.jsdatabase.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注册一个消息监听器。然后在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

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

1 个答案:

答案 0 :(得分:1)

根据documentation

  

如果发送到您的扩展,runtime.onMessage事件将是   在您的分机的每个框架中触发(发件人的框架除外)

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