javascript - tab加载firefox addon SDK时函数返回

标签 javascript firefox firefox-addon firefox-addon-sdk

我正在尝试创建一个加载选项卡的函数,并使用 contentScriptFile 附加 javascript,并向页面发送消息。

tabs.open({
url: "example.com",
onReady: function(tab) {
   var worker = tab.attach({ contentScriptFile: "myworker.js" });
   worker.port.emit("DoSomething", tab);


});

目前,在这段代码之后,我使用 setTimeout 等待 5 秒,然后返回。

一定有更好的方法,对吗?理想情况下,我希望在 onReady 或函数中包含一些内容,例如:

worker.port.on("DidSomething", function() {
    console.log("did something");
   //now somehow return from my enclosing function???
});

等等“DidSomething”事件,从函数返回。有没有办法用 Promise 或其他方法来做到这一点?

编辑以澄清最终结果可能是什么样子:

function addonFunction() {
var returnValue;
    tabs.open({
    url: "example.com",
    onReady: function(tab) {
   var worker = tab.attach({ contentScriptFile: "myworker.js" });
   worker.port.emit("DoSomething", tab);

   worker.port.on("DidSomething", function() {
      console.log("did something");
     //set the returnValue
     returnValue=1;
   });


    });
//WAIT HERE UNTIL returnValue is set...
 var promise = Promise(function (resolve, reject) {
                setTimeout( funciton() {
                            if(returnValue == 1){
                             resolve(true);
                            } else {
                             reject(false);
                            }
               }, 5000);
 return promise;
}

最佳答案

最简单的方法是将promise的构造函数参数包装在tabs.open调用中,然后调用resolve/reject函数工作回调。

您可以进一步将其分解为更小的步骤,以 promise 打开选项卡,一个用于创建工作进程,一个用于工作进程回调,然后将这三个步骤链接在一起。

关于javascript - tab加载firefox addon SDK时函数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35352686/

相关文章:

javascript - 如何在HTML5中的不同位置打印数组的动态内容

javascript - 文本显示在一行中

javascript - 使用 jsdoc 记录 javascript 构造函数的返回

javascript - Firebug 在骗我吗?

javascript - 模糊 div Mozilla 鼠标滚轮滚动背后的内容

javascript - 用于切换侧边栏的 Firefox WebExtension 工具栏按钮

javascript - 简单的 jQuery 条件语句

node.js - 带有 geckodriver 的 Firefox 无法在 Ubuntu 服务器上启动

firefox-addon - 哪种浏览器最容易为其开发浏览器扩展?

javascript - 将 HashString 从 C 转换为 JS