选项卡加载 firefox 插件 SDK 时的功能 return
Function return when tab loads 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 秒,然后 return。
一定有更好的方法吧?理想情况下,我希望在 onReady 或函数中包含一些内容,例如:
worker.port.on("DidSomething", function() {
console.log("did something");
//now somehow return from my enclosing function???
});
等 "DidSomething" 事件,return 来自函数。有没有办法用 Promises 或其他方法做到这一点?
编辑以阐明最终结果可能是什么样子:
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
函数。
您可以进一步将其分解为更小的步骤以承诺打开选项卡,一个用于创建工作人员,一个用于工作人员回调,然后将这三者链接在一起。
我正在尝试制作一个函数来加载选项卡,并使用 contentScriptFile 附加 javascript,并向页面发送消息。
tabs.open({
url: "example.com",
onReady: function(tab) {
var worker = tab.attach({ contentScriptFile: "myworker.js" });
worker.port.emit("DoSomething", tab);
});
目前,在这段代码之后,我正在使用 setTimeout 等待 5 秒,然后 return。
一定有更好的方法吧?理想情况下,我希望在 onReady 或函数中包含一些内容,例如:
worker.port.on("DidSomething", function() {
console.log("did something");
//now somehow return from my enclosing function???
});
等 "DidSomething" 事件,return 来自函数。有没有办法用 Promises 或其他方法做到这一点?
编辑以阐明最终结果可能是什么样子:
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
函数。
您可以进一步将其分解为更小的步骤以承诺打开选项卡,一个用于创建工作人员,一个用于工作人员回调,然后将这三者链接在一起。