Javascript Firefox插件SDK消息传递错误
我试图在pageMod和内容脚本之间传递消息 我将此代码与pageMod一起使用Javascript Firefox插件SDK消息传递错误,javascript,firefox,firefox-addon,firefox-addon-sdk,Javascript,Firefox,Firefox Addon,Firefox Addon Sdk,我试图在pageMod和内容脚本之间传递消息 我将此代码与pageMod一起使用 var gmailPageMod = pageMod.PageMod({ include: "https://mail.google.com/*", contentScriptWhen: "ready", contentScriptFile: [self.data.url('js/script.js')], conten
var gmailPageMod = pageMod.PageMod({
include: "https://mail.google.com/*",
contentScriptWhen: "ready",
contentScriptFile: [self.data.url('js/script.js')],
contentStyleFile: [
self.data.url("css/angular.min.css"),
self.data.url("css/style.css")
],
onAttach: function(worker) {
try {
console.log("adding worker");
gmail_workers.push(worker);
} catch (error) {
console.log("error", error);
}
worker.port.on("getTalentGamil_recipient_change", function(email) {
console.log(email);
});
try {
console.log("updating SS");
console.log(simpleStorage);
worker.port.emit("updateSimpleStorage", simpleStorage);
} catch (error) {
console.log("error", error);
}
});
在script.js中
self.port.on("updateSimpleStorage", function(simpleStorage) {
console.log('updateSimpleStorage from script.js', simpleStorage);
var e = new CustomEvent('updateSimpleStorage', {
'detail': simpleStorage
});
window.dispatchEvent(e);
});
但是,这会给我一条错误消息:[异常…“失败”nsresult:“0x80004005(NS\u错误\u失败)”位置:“JS帧::::行0”数据:否]
我不明白为什么?因为我想我做的正是我正在做的。我非常感谢在这件事上的任何帮助我在这里读到这篇文章-
因此,您从main.js发出以下信息:
worker.port.emit("updateSimpleStorage", simpleStorage);
您想知道为什么它不在script.js
中调用回调,对吗
以下是我对可能出现的问题的看法:
contentScript
尚未加载simpleStorage
?它可以连载吗main.js
中的onAttach
中,侦听如下加载事件:
var gmailPageMod = pageMod.PageMod({
include: "https://mail.google.com/*",
contentScriptWhen: "ready",
contentScriptFile: [self.data.url('js/script.js')],
contentStyleFile: [
self.data.url("css/angular.min.css"),
self.data.url("css/style.css")
],
onAttach: function(worker) {
try {
console.log("adding worker");
gmail_workers.push(worker);
} catch (error) {
console.log("error", error);
}
worker.port.on("getTalentGamil_recipient_change", function(email) {
console.log(email);
});
worker.port.on('iLoaded', function() {
try {
console.log("updating SS");
console.log(simpleStorage);
worker.port.emit("updateSimpleStorage", simpleStorage);
} catch (error) {
console.log("error", error);
}
});
});
self.port.on("updateSimpleStorage", function(simpleStorage) {
console.log('updateSimpleStorage from script.js', simpleStorage);
var e = new CustomEvent('updateSimpleStorage', {
'detail': simpleStorage
});
window.dispatchEvent(e);
});
self.port.emit('iLoaded');
注意我是如何将它包装在一个iLoaded
中的
然后在script.js
中发出iLoaded
消息,如下所示:
var gmailPageMod = pageMod.PageMod({
include: "https://mail.google.com/*",
contentScriptWhen: "ready",
contentScriptFile: [self.data.url('js/script.js')],
contentStyleFile: [
self.data.url("css/angular.min.css"),
self.data.url("css/style.css")
],
onAttach: function(worker) {
try {
console.log("adding worker");
gmail_workers.push(worker);
} catch (error) {
console.log("error", error);
}
worker.port.on("getTalentGamil_recipient_change", function(email) {
console.log(email);
});
worker.port.on('iLoaded', function() {
try {
console.log("updating SS");
console.log(simpleStorage);
worker.port.emit("updateSimpleStorage", simpleStorage);
} catch (error) {
console.log("error", error);
}
});
});
self.port.on("updateSimpleStorage", function(simpleStorage) {
console.log('updateSimpleStorage from script.js', simpleStorage);
var e = new CustomEvent('updateSimpleStorage', {
'detail': simpleStorage
});
window.dispatchEvent(e);
});
self.port.emit('iLoaded');
我在这里读这个-
因此,您从main.js发出以下信息:
worker.port.emit("updateSimpleStorage", simpleStorage);
您想知道为什么它不在script.js
中调用回调,对吗
以下是我对可能出现的问题的看法:
contentScript
尚未加载simpleStorage
?它可以连载吗main.js
中的onAttach
中,侦听如下加载事件:
var gmailPageMod = pageMod.PageMod({
include: "https://mail.google.com/*",
contentScriptWhen: "ready",
contentScriptFile: [self.data.url('js/script.js')],
contentStyleFile: [
self.data.url("css/angular.min.css"),
self.data.url("css/style.css")
],
onAttach: function(worker) {
try {
console.log("adding worker");
gmail_workers.push(worker);
} catch (error) {
console.log("error", error);
}
worker.port.on("getTalentGamil_recipient_change", function(email) {
console.log(email);
});
worker.port.on('iLoaded', function() {
try {
console.log("updating SS");
console.log(simpleStorage);
worker.port.emit("updateSimpleStorage", simpleStorage);
} catch (error) {
console.log("error", error);
}
});
});
self.port.on("updateSimpleStorage", function(simpleStorage) {
console.log('updateSimpleStorage from script.js', simpleStorage);
var e = new CustomEvent('updateSimpleStorage', {
'detail': simpleStorage
});
window.dispatchEvent(e);
});
self.port.emit('iLoaded');
注意我是如何将它包装在一个iLoaded
中的
然后在script.js
中发出iLoaded
消息,如下所示:
var gmailPageMod = pageMod.PageMod({
include: "https://mail.google.com/*",
contentScriptWhen: "ready",
contentScriptFile: [self.data.url('js/script.js')],
contentStyleFile: [
self.data.url("css/angular.min.css"),
self.data.url("css/style.css")
],
onAttach: function(worker) {
try {
console.log("adding worker");
gmail_workers.push(worker);
} catch (error) {
console.log("error", error);
}
worker.port.on("getTalentGamil_recipient_change", function(email) {
console.log(email);
});
worker.port.on('iLoaded', function() {
try {
console.log("updating SS");
console.log(simpleStorage);
worker.port.emit("updateSimpleStorage", simpleStorage);
} catch (error) {
console.log("error", error);
}
});
});
self.port.on("updateSimpleStorage", function(simpleStorage) {
console.log('updateSimpleStorage from script.js', simpleStorage);
var e = new CustomEvent('updateSimpleStorage', {
'detail': simpleStorage
});
window.dispatchEvent(e);
});
self.port.emit('iLoaded');
我发现,根据它,
CustomEvents
不再工作,所以我使用了一个带有FF插件SDK本机消息传递的迂回消息传递路由来传递我的信息 我遇到了,根据它,CustomEvents
不再工作,所以我使用FF插件SDK本机消息传递的迂回消息传递路径来传递我的信息 非常感谢你的帮助。但是,问题不在于FF本机消息传递。这是CustomEvent
,显然它已被弃用,不再适用于FF 42。这很有趣@Irtza.QC请链接源代码。也请发布并接受您的解决方案。非常感谢您的帮助。但是,问题不在于FF本机消息传递。这是CustomEvent
,显然它已被弃用,不再适用于FF 42。这很有趣@Irtza.QC请链接源代码。也请发布并接受您的解决方案。