当我在面板的onMessage()
方法中发出消息时,我遇到了使用Addon Builder进行Firefox扩展开发的问题。错误信息为“self is not defined
”。我的代码是这样的:
main.js
中的
var savesubmittedPanel = require("sdk/panel").Panel({
width: 322,
height: 427,
contentURL: data.url("savesubmitted.html"),
include:["http://*/*","https://*/*"],
contentScriptFile: [ data.url("js/savesubmitted.js")],
onMessage: function(messagedata) {
switch(messagedata.type) {
case 'get.submittedid':
self.port.emit("response.get.submittedid",submittedIdentity);
break;
case 'add.identity':
addIdentityToList(messagedata.identity);
notifyUpdatedIdentities();
self.port.emit("response.add.identity")
break;
}
}
});
js/savesubmitted.js
中的
self.postMessage({type:"get.submittedid"});
self.port.on("response.get.submittedid",function(response){
//do something
});
我写的所有这些代码都是从Chrome扩展API转换而来的。 chrome扩展中的代码是这样的:
在内容脚本中:
chrome.extension.sendMessage({type : "get.submittedid"}, function(response) {
pageIdentitySave=response;
showSaveIdentityTab();
});
background.js
中的:
chrome.extension.onMessage.addListener(function(message, sender, sendResponse){
console.log("Background.js: " + "Received message: "+message.type+" from tab: "+sender.tab.id);
if(message.type == "get.submittedid") {
sendResponse(submittedIdentity);
}
所以,怎么了?感谢。
答案 0 :(得分:1)
在main.js
中,使用savesubmittedPanel.port.emit
代替self.port.emit
。