Javascript Chrome扩展-内容脚本未发送响应(未定义)
所以我正在做一个google 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
// 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谢谢,我会试试的