我昨天刚刚开始镀铬扩展,所以我很新,请原谅我的菜鸟问题。
我有一个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中的操作完成?
答案 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;
});
});