如何在javascript函数中生成语句在chrome扩展中按顺序运行?

时间:2016-03-14 10:39:51

标签: javascript google-chrome-extension google-chrome-devtools

我正在制作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中的数据?

1 个答案:

答案 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);
});