gpt4 book ai didi

javascript - Firefox Extension : self. port.on 没有将结果传递给外部函数

转载 作者:行者123 更新时间:2023-11-30 05:34:25 25 4
gpt4 key购买 nike

ma​​in.js

var tURL;
var self = require("sdk/self");
var tabs = require("sdk/tabs");
var data = self.data;

/*
contentScriptFile: [data.url("scripts/lib/jquery.js"),
data.url("scripts/lib/jquery-ui.js"),
data.url("scripts/platform.js")];
*/
// First time install
if (require('sdk/self').loadReason == 'install') {
// Do something on the very first install
tabs.open("http://www.example.com/test2.php");
}

require("sdk/tabs").on("ready", logURL);
function logURL(tab) {
tURL = tab.url;
console.log("LOGURL: "+tURL);

var worker = tabs.activeTab.attach({
contentScriptFile: [data.url("scripts/lib/jquery.js"),
data.url("scripts/platform.js"),
data.url("scripts/script.js")]
});
worker.port.emit("vsAPI", tURL);


worker.port.on('getURL', function(callback) {
var gotURL = data.url(callback);
worker.port.emit("gotURL", gotURL);
});

}

平台.js

function Platform() {
var that = this;

that.getURL = function (filename) {

self.port.emit('getURL', filename);

self.port.on("gotURL", function(callback) {
console.log("gotURL: "+callback);
var output = callback;
});
//console.log("output: "+output);
return output;

}
}

问题:

platform.js 发送到 main.js

main.js 接收、处理并将结果传回给 platform.js

platform.js 成功接收结果。

但是,我想在 port.on 函数之外使用结果...

即:

self.port.on("gotURL", function(callback) {
console.log("gotURL: "+callback);
var output = callback;
});

我想在 self.port.on("gotURL") 之外使用“var output”

有什么我需要调整的想法吗?

谢谢!

最佳答案

这更像是一个一般性的 Javascript 问题,并不是特定于附加 SDK。例如。 AJAX 也是一样的或 Node .

你基本上有两个选择:

  1. 创建一个全局变量并从回调中分配给它。例如

    // will be undefined at first, of course
    var output;
    self.port.on("gotURL", function(callback) {
    console.log("gotURL");
    output = callback;
    });
    setInterval(function() {
    console.log("output: " + output);
    }, 1000);

    输出看起来像这样(即 output 一开始是未定义的,直到 gotURL 消息通过):

    "output: undefined"
    ...
    "output: undefined"
    "gotURL"
    "output: something"
    ...
  2. 全局变量总有一种老掉牙的感觉,所以只要坚持适当的回调即可。

    self.port.on("gotURL", function(callback) {
    console.log("gotURL");
    myOtherAPI.doSomething(callback);
    });

关于javascript - Firefox Extension : self. port.on 没有将结果传递给外部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24839445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com