Javascript Chrome扩展-内容脚本未发送响应(未定义)

Javascript Chrome扩展-内容脚本未发送响应(未定义),javascript,jquery,google-chrome,google-chrome-extension,Javascript,Jquery,Google Chrome,Google Chrome Extension,所以我正在做一个google chrome的扩展,我的信息系统出现了一些问题 我制作了一个消息传递函数,允许您通过在参数中定义消息来向内容脚本或后台脚本发送消息,该函数位于弹出脚本中 我的问题是,当内容脚本发送响应时,弹出脚本会将其视为未定义 这是我的代码: 弹出脚本: // The messaging function function passMessage(message, location){ chrome.tabs.query({active: true, currentWin

所以我正在做一个google chrome的扩展,我的信息系统出现了一些问题

我制作了一个消息传递函数,允许您通过在参数中定义消息来向内容脚本或后台脚本发送消息,该函数位于弹出脚本中

我的问题是,当内容脚本发送响应时,弹出脚本会将其视为未定义

这是我的代码:

弹出脚本:

// The messaging function
function passMessage(message, location){
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {

        //Send the message to a content script or background?
        switch (location){
            case "content":
                chrome.tabs.sendMessage(tabs[0].id, {popupMessage: message}, function(response) {
                    return response;
                });
                break;

            case "background":
                chrome.extension.sendMessage(tabs[0].id, {popupMessage: message}, function(response) {
                    return response;
                });
                break;
        }

    });
}



// Call the function like so:
var x = passMessage( "Hello world!" , "content" );

// Undefined (Should be "Hi popup!")
console.log( x ); 
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    if (request.popupMessage == "Hello world!"){ 
        // Logs "Hello world!"
        console.log(request.popupMessage); 

        // Should send "Hi popup!" back.
        sendResponse("Hi popup!"); 
    }
});
内容脚本:

// The messaging function
function passMessage(message, location){
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {

        //Send the message to a content script or background?
        switch (location){
            case "content":
                chrome.tabs.sendMessage(tabs[0].id, {popupMessage: message}, function(response) {
                    return response;
                });
                break;

            case "background":
                chrome.extension.sendMessage(tabs[0].id, {popupMessage: message}, function(response) {
                    return response;
                });
                break;
        }

    });
}



// Call the function like so:
var x = passMessage( "Hello world!" , "content" );

// Undefined (Should be "Hi popup!")
console.log( x ); 
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    if (request.popupMessage == "Hello world!"){ 
        // Logs "Hello world!"
        console.log(request.popupMessage); 

        // Should send "Hi popup!" back.
        sendResponse("Hi popup!"); 
    }
});
因此,基本上,除了响应之外,所有的工作都是完美的

有人知道我该怎么解决这个问题吗?
谢谢

发送消息是异步的,因此不需要返回。将“返回响应”更改为console.log(响应)。您还应该记录时间戳,以查看并理解日志x是首先计算的。@SkalárWag-Hm,是否有任何方法返回响应的值?这样做的原因是,我希望我的脚本在获得特定回复时形成特定的操作。当然,将TODO代码放在内部花括号中(放在回调函数中),而不是返回。异步方法就是这样工作的。@SkalárWag谢谢,我会试试的