繁体   English   中英

如何使javascript函数中的语句在chrome扩展中顺序运行?

[英]how to make statements in javascript function run sequentially in chrome extension?

我正在制作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执行之前startClick发送响应消息。

如何使它发送从startClick函数获取的变量x的数据?

我认为chrome.runtime.sendMessage之后不会调用startClick ,问题出在您使用回调方法时。

回调方法的签名必须如下所示:

function(any message, MessageSender sender, function sendResponse) {...};

要发送对chrome.runtime.onMessage.addListener的调用的响应,您必须使用doc中此处指定的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);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM