3

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

代码如下:

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

内容.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

我已经从听众那里得到了真实的回报……困惑吗?
我错过了一些明显的东西吗?

4

1 回答 1

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);
            }
        });
于 2013-10-18T18:13:57.500 回答