Chrome扩展程序:从注入的脚本向后台脚本发回消息时出错

时间:2013-06-19 12:41:26

标签: javascript google-chrome-extension

我正在尝试使用chrome扩展程序。我的目标是从后台脚本向注入的脚本发送消息,让注入的脚本返回结果。

代码如下:

background.js

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab){
    chrome.tabs.executeScript(tabId, {'file': "content.js"}, 
        function(){
            chrome.tabs.sendMessage(tabId, {msg: 'test'}, 
                function(response){
                    console.log(response);
                }
            );
            return true;
        }
    );
});

content.js

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        sendResponse('test message');
        return true;
    }
);

我收到错误消息

Could not send response: The chrome.runtime.onMessage listener must return true if you want to send a response after the listener returns 

sendResponse

内拨打content.js

我已经从听众那里回复了......混淆了吗? 我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:0)

我认为我的问题已由

修复
chrome.tabs.sendMessage(tabId, {action: 'test'}, 

注意,我在上述问题中错误地使用了msg而不是action

另外,我不使用第三个参数sendResponse来避免全双工通信 我只是将内容脚本中的另一条消息发回背景页面。

从内容脚本中,使用以下命令将消息发送到后台页面:

function SendMessageToBackgroundPage(data)
{
    chrome.runtime.sendMessage({
        action: 'kungfu',
        source: 'panda'
    });
}

使用以下方法在背景页面中抓取:

chrome.runtime.onMessage.addListener(
        function(request, sender, sendResponse) {
            switch (request.action) {
                case 'kungfu': alert(request.source);
            }
        });