我正在尝试开发Chrome扩展程序,并尝试在内容脚本和background.html页面之间进行通信。我在background.html中存储了一些值(本地存储),并在内容脚本中随时获取它。我的监听器监听我从contentcript发送的请求并获取数据并将其发送回contentcript。但是当我在contentcript中收到它时,我的数据变得“未定义”。
这是我的代码:
background.html:
chrome.extension.onRequest.addListener(
function(request,sender,sendresponse){
if(request.Meta == '_service'){
/* return _getServiceOfAddon("_service");
}
else if(request.Meta == 'setAddOnService'){
_setServiceAddon("_service",request.messageContent);
}*/
if(request.messageContent){
console.log('message content for setservice : '+request.messageContent);
_setServiceOfAddon("_service",request.messageContent);
}
else{
//return _getServiceOfAddon("_service");
console.log('message content for getservice : '+request.messageContent);
var temp = _getServiceOfAddon("_service");
console.log('getting service as '+ temp);
sendresponse({ mydata : temp });
}
}
});
内容脚本:
Tagg.sideBar.backgroundInteraction.prototype.sendMessageToBackground = function(meta,messagecontent){
if(!meta){
chrome.extension.sendRequest(
{
Meta:'testingMessageConfirmation',
messageContent:'This is a testing message sent from content script to background'
},
function(response){}
);
}
else{
chrome.extension.sendRequest(
{
Meta:meta,
messageContent:messagecontent
},
function(response){
//if(!response.data){
console.log('response data received as : '+ response.mydata);
return response;
// }
}
);
}
}
我在内容稿中收到的response.data是“未定义的”。任何人都可以指出我在这里犯的错误吗?这似乎很简单,但我找不到我犯错的确切位置。
答案 0 :(得分:0)
首先,_getServiceOfAddon()
返回的确切类型的对象是什么?我确信其目的是返回一个字符串,但是如果传递消息,则undefined
错误的一个可能原因是尝试传递类,函数等内容。您可能想尝试console.log
on response
对象。
使用return
的可能性越大,这对于消息传递等异步内容不起作用。您应该以其他方式将返回值分配给其目标,例如使用this
或将引用传递给DOM对象或将其分配给类似settings["_service"]
的哈希。
换句话说,Tagg.sideBar.backgroundInteraction.sendMessageToBackground()
将始终返回undefined
。您在chrome.extension.sendRequest()
中的回调函数会将response
返回到chrome.extension.sendRequest
,不会 sendMessageToBackground()
。请记住,函数会向其调用者返回一个值,在这种情况下,其调用者为sendRequest()