Chrome扩展程序 - 无法从eventPage.js获得“延迟”响应

时间:2017-11-09 00:48:00

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

我昨天刚刚开始镀铬扩展,所以我很新,请原谅我的菜鸟问题。

我有一个popup.js,它在popup.html中显示内容 - 所以popup.js很简单

popup.js

$(document).ready(function () {
    chrome.tabs.getSelected(null, function (tab) {
        chrome.runtime.sendMessage({
            tab: tab
        }, function (response) {

            document.getElementById("lockDiv").hidden = false;
            document.getElementById("loadingDiv").hidden = true;

        });       

    });
});

它获取所选标签,将消息(带标签)发送到事件页面,该页面是以下

eventPage.js

chrome.runtime.onMessage.addListener(function (tab) { 

    chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
        setInterval(function () {
           // Do something after 5 seconds          
        }, 5000);
    });   
}); 

现在它可以工作(排序)但是一旦popup.js运行,在执行之前没有延迟5秒

        document.getElementById("lockDiv").hidden = false;
        document.getElementById("loadingDiv").hidden = true;

上述操作无需等待eventPage.js

的响应即可执行

如何在执行上述代码之前等待响应并让evenPage.js中的操作完成?

1 个答案:

答案 0 :(得分:-1)

阅读Mozilla's documentation for onMessage - (它的工作原理与chrum扩展相同,因为mozilla网络扩展基于Chrum) - 在部分关于"要发送异步响应" - 您可以执行以下操作(显然)

eventPage.js

chrome.runtime.onMessage.addListener(function (tab) { 
    chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
        return new Promise(resolve => {
            setInterval(function () {
            // Do something after 5 seconds          
            resolve(resultYouWantToReturn)
            }, 5000);
        });
    });   
}); 

popup.js

chrome.runtime.sendMessage({
    tab: tab
}, function (response) {
    response.then(resultFromListener => {
        // resultFromListener is the value resolved (resultYouWantToReturn) above
        document.getElementById("lockDiv").hidden = false;
        document.getElementById("loadingDiv").hidden = true;
    });
});