当选项卡加载火狐插件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" 事件,从函数返回。有没有办法用承诺或其他方法做到这一点?

编辑以阐明最终结果可能是什么样子:

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 调用周围,然后在 worker 回调中调用 resolve/reject 函数。

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

最新更新