所以我正在开发我的下一个Firefox附加组件,但是,在阅读ContextMenus的文档时,似乎永远不会调用onMessage事件,这是我的代码:
exports.main = function(){
var addonTab = require('addon-page');
var data = require('self').data;
var tabs = require('tabs');
var cm = require("context-menu");
cm.Item({
label: "Tag This Image",
context: cm.URLContext("*"),
contextSelector: "img",
contentScript:
'self.on("click", function(node, data){' +
' self.postMessage(node);' +
'});',
// nothing works...
onMessage: function(node){
openImageEditor(node.src);
alert("Message? It worked? No way!");
onTagImage(node);
}
});
var onTagImage = function(node){
alert("Image tagged!");
};
tabs.open({url: data.url('index.html'), isPinned:true});
};
所以我看一下Error的控制台,但这可能是我见过的最糟糕的错误格式......
时间戳:14/07/2012 3:21:44错误:发生异常。追溯 (最近一次调用最后一次):文件 “资源://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/addon-kit/lib/context-menu.js” 第1310行,在CMP_handleEvent中 此 handleClick(event.target)。文件“resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/addon-kit/lib/context-menu.js”, 第1339行,在CMP _handleClick中 this.browserWin.fireClick(topLevelItem,popupNode,item.data);文件 “资源://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/addon-kit/lib/context-menu.js” 第1162行,在BW_fireClick中 worker.fireClick(popupNode,clickedItemData);文件“resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/addon-kit/lib/context-menu.js”, 第663行,在CMW_fireClick中 this._contentWorker.emitSync(“click”,popupNode,clickedItemData);文件 “资源://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/api-utils/lib/content/worker.js” 第71行,在emitSync中 return this._emitToContent(Array.slice(arguments));文件“resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/api-utils/lib/content/content-worker.js”, 第96行,在onChromeEvent中 return emit.apply(null,args);文件“resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/api-utils/lib/content/content-worker.js”, 第45行,在onEvent results.push(callback.apply(null,args));文件“javascript:self.on(”click“,function(node,data){
self.postMessage(node);});“,第1行,在null文件中 “资源://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/api-utils/lib/content/content-worker.js” 第81行,在onEvent let str = JSON.stringify(args,replacer); [Exception ...“组件返回失败代码:0x80040111(NS_ERROR_NOT_AVAILABLE) [nsIImageLoadingContent.loadingEnabled]“nsresult:”0x80040111 (NS_ERROR_NOT_AVAILABLE)“位置:”JS框架:: 资源://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/api-utils/lib/cuddlefish.js - >资源://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/api-utils/lib/sandbox.js - >资源://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/api-utils/lib/content/content-worker.js :: onEvent ::第81行“数据:否]
这是实际的行,但这对我没有任何意义:
文件“javascript:self.on(”click“,function(node, data){self.postMessage(node);});“,第1行,null
问题:这个错误意味着什么,或者说这条线有什么问题?
答案 0 :(得分:2)
您的上下文菜单实现在某些方面有点棘手,请参阅此固定示例:
https://builder.addons.mozilla.org/addon/1065630/latest/
来自内容脚本的postMessage调用无法发送html节点,它只能发送JSON数据。
不要在main.js或从./lib/加载的其他模块中使用警报 - 此处未定义警报。请改用console.log。
您需要的上下文是上下文:cm.SelectorContext('img')