Javascript Firefox扩展:self.port.on未将结果传递给外部函数
main.jsJavascript Firefox扩展:self.port.on未将结果传递给外部函数,javascript,firefox,firefox-addon,firefox-addon-sdk,Javascript,Firefox,Firefox Addon,Firefox Addon Sdk,main.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(
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);
});
}
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
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);
});
}
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”)之外使用“var输出”
你知道我需要调整什么吗
谢谢 这更多的是一个一般的Javascript问题,而不是附加SDK特有的问题。对于或,这里有同样的东西 您基本上有两种选择:
// 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
消息通过):
self.port.on("gotURL", function(callback) {
console.log("gotURL");
myOtherAPI.doSomething(callback);
});
很好的回答。。。。那么,在我的情况下,这将如何工作?script.js是在网页上加载html的主脚本。。。。它请求图像URL
code
platform.getURL(“images/vsicon.png”)code
…请求被传递到中间脚本platform.jscode
function getURL(){self.port.on(“gotURL”,函数(回调){console.log(“gotURL”);myOtherAPI.doSomething(回调);}code
…平台对main.js进行port.emit调用。。。在您的示例中,如何在另一个函数中将回调传递给getURL()?