3

私はクロム拡張を試していました。私の目標は、バックグラウンド スクリプトから注入されたスクリプトにメッセージを送信し、注入されたスクリプトが結果を返すようにすることです。

コードは次のとおりです。

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

私はすでにリスナーから true を返しています..混乱していますか?
明らかな何かが欠けていますか?

4

1 に答える 1

0

私の問題は

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

上記の質問msgの代わりに間違って使用していることに注意してください。action

また、3 番目のパラメーター 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 に答える