Firefox Addon SDK 消息传递错误
Firefox Addon SDK message passing error
我正在尝试在 pageMod 和内容脚本之间传递消息。
我将此代码与 pageMod 一起使用
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);
});
但是这给了我一个错误Message: [Exception... "Failure" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: <unknown filename> :: <TOP_LEVEL> :: line 0" data: no]
我不明白为什么?因为我认为我正在做的正是正在做的事情 here。如果您能就此事提供帮助,我将不胜感激
所以你是从 main.js 发射的:
worker.port.emit("updateSimpleStorage", simpleStorage);
而且您想知道为什么它不在 script.js
中调用回调,对吗?
以下是我对可能出现的问题的看法:
- 有没有可能 script.js 的
contentScript
还没有加载?
- 什么是
simpleStorage
?它可以序列化吗?
如果 script.js 还没有加载,我建议尝试这个:
In main.js
in 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);
}
});
});
请注意我是如何将它包裹在 iLoaded
.
中的
然后在 script.js
中发出这样的 iLoaded
消息:
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');
我遇到了 this,根据它,CustomEvents
不再有效,所以我使用了带有 FF Addon SDK 本地消息传递的迂回消息传递路由来获取我的信息。
我正在尝试在 pageMod 和内容脚本之间传递消息。
我将此代码与 pageMod 一起使用
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);
});
但是这给了我一个错误Message: [Exception... "Failure" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: <unknown filename> :: <TOP_LEVEL> :: line 0" data: no]
我不明白为什么?因为我认为我正在做的正是正在做的事情 here。如果您能就此事提供帮助,我将不胜感激
所以你是从 main.js 发射的:
worker.port.emit("updateSimpleStorage", simpleStorage);
而且您想知道为什么它不在 script.js
中调用回调,对吗?
以下是我对可能出现的问题的看法:
- 有没有可能 script.js 的
contentScript
还没有加载? - 什么是
simpleStorage
?它可以序列化吗?
如果 script.js 还没有加载,我建议尝试这个:
In main.js
in 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);
}
});
});
请注意我是如何将它包裹在 iLoaded
.
然后在 script.js
中发出这样的 iLoaded
消息:
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');
我遇到了 this,根据它,CustomEvents
不再有效,所以我使用了带有 FF Addon SDK 本地消息传递的迂回消息传递路由来获取我的信息。