chrome.tabs.sendMessage将无法在异步方式下正常运行

时间:2018-10-11 16:53:27

标签: javascript google-chrome-extension async-await

在后台脚本中

function new_url_listener(tabId, info, tab) {

    if(info.url){
        get_template(info.url).then(function(template){
            console.log(template);
            if (template){
                chrome.tabs.sendMessage(tab.id, {test:"test"}, function(response) {    
                    console.log(response);
                });
            }        
        })
    }
}



chrome.tabs.onUpdated.addListener(new_url_listener);

在content.js中

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
      console.log(sender.tab ?
                  "from a content script:" + sender.tab.url :
                  "from the extension");
      if (request.greeting == "hello")
        sendResponse({farewell: "goodbye"});
});

当get_template.then()调用中未包含chrome.tabs.sendMessage时,它将发送一条消息,但是我需要能够将模板变量发送到内容脚本中

为什么它不能在then呼叫中发送?

get_template调用一个api,并将json作为模板变量取回

1 个答案:

答案 0 :(得分:0)

"content_scripts": [
    {
        "matches": ["http://*/*", "https://*/*"],
        "js": [
            "contentscript.js"
        ],
        "run_at": "document_start"

    }
],

我必须添加“ run_at”:“ document_start”,现在可以使用