我正在制作Chrome扩展程序,在我的扩展程序中,我正在从内容脚本向后台脚本发送消息。
chrome.runtime.onMessage.addListener(
function triggerNew(request) {
if (request.method == "addNew") {
//alert("in content script");
var x=startClick();
chrome.runtime.sendMessage({name: "Response" , data : x});
}
}
);
`function startClick(){
document.addEventListener('click', function(e){
var target = e.target || event.srcElement;
return target;
}`
我在内容脚本中调用了函数startClick
,但在执行startClick
之前发送了响应消息。
如何让它从x
函数发送变量startClick
中的数据?
答案 0 :(得分:1)
我认为在startClick
之后调用chrome.runtime.sendMessage
,问题在于您使用回调方法。
您的回调方法的签名必须如下所示:
function(any message, MessageSender sender, function sendResponse) {...};
要发送对chrome.runtime.onMessage.addListener
的来电的回复,您必须使用文档中所示的sendResponse
功能:
https://developer.chrome.com/extensions/runtime#event-onMessage
重要说明:如文档中所示(请确保全部阅读),您的回调函数必须返回true
才能使sendResponse函数保持有效。如果要从异步函数调用sendResponse
,这是必不可少的。
编辑:试试这个
背景:
chrome.runtime.onMessage.addListener(
function triggerNew(request, sender, sendResponse) {
if (request.method == "addNew") {
var x = startClick();
sendResponse({
data: x
});
}
}
);
内容脚本:
chrome.extension.sendMessage({method: 'addNew'} , function(response) {
alert(response.data);
});