Javascript 从不调用onMessage事件

Javascript 从不调用onMessage事件,javascript,firefox-addon,firefox-addon-sdk,Javascript,Firefox Addon,Firefox Addon Sdk,因此,我正在为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");

因此,我正在为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});
};
所以我看了一下错误的控制台,但这可能是我见过的最糟糕的错误格式

时间戳:14/07/2012 3:21:44错误:发生异常。回溯 (最近一次调用上次):文件 "resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/addon-kit/lib/context-menu.js", 第1310行,位于CMP_把手通风口中 this.handleClick(event.target);文件“resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/addon-kit/lib/context-menu.js", 第1339行,在CMP_handleClick中 this.browserWin.fireClick(topLevelItem、popupNode、item.data);文件 "resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/addon-kit/lib/context-menu.js", 第1162行,在BW_fireClick中 worker.fireClick(弹出节点,clickedItemData);文件“resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/addon-kit/lib/context-menu.js", 第663行,在CMW_fireClick中 这是._contentWorker.emitSync(“单击”,弹出节点,单击编辑数据);文件 "resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/api-utils/lib/content/worker.js", 第71行,同步 返回此参数。_emitToContent(Array.slice(参数));文件“resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/api-utils/lib/content/content-worker.js", 第96行,在onChromeEvent中 返回emit.apply(null,args);文件“resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/api-utils/lib/content/content-worker.js", 第45行,在onEvent中 push(callback.apply(null,args));文件“javascript:self.on”(“单击”),函数(节点,数据){
空文件中的self.postMessage(node);});”,第1行 "resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/api-utils/lib/content/content-worker.js", 第81行,在onEvent中 让str=JSON.stringify(args,replacer);[异常…”组件返回故障代码:0x80040111(NS\u错误\u不可用) [nsImageLoadingContent.loadingEnabled]“nsresult:”0x80040111 (NS\u错误\u不可用)“位置:”JS帧:: resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/api-utils/lib/cuddlefish.js -> resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/api-utils/lib/sandbox.js -> resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/api-utils/lib/content/content-worker.js ::OneEvent::第81行“数据:否]

这是实际的台词,但这对我来说没有任何意义:

文件“javascript:self.on”(“单击”),函数(节点, 数据){self.postMessage(node);});”,第1行,空


问题:这个错误是什么意思,或者说这行到底出了什么问题?

您的上下文菜单实现在一些方面有点不正常,请参见下面的固定示例:

  • 来自内容脚本的postMessage调用无法发送html节点,它只能发送JSON数据

  • 不要在main.js或从./lib/加载的其他模块中使用警报-此处未定义警报。改用console.log

  • 您需要的上下文是context:cm.SelectorContext('img')


  • 您是否试图在没有实际加载jQuery的情况下使用jQuery的
    .on()
    ?@ThiefMaster我使用的是firefox插件sdk中的on()事件,无论是插件本身idk中的jQuery事件,但我相信这不是问题所在,但是我知道为什么会发生这种情况,我相信“self”引用不是一个全局引用,而是一个我必须自己分配的引用,当我返回时会尝试。我可以复制它-但是您的上下文菜单实现看起来有点奇怪。谢谢!它现在可以工作了:)#3:这段代码与我当前的代码有什么区别?我的代码通过postMessage发布字符串,您的代码发布节点引用。postMessage只能发送基本类型,例如任何可以序列化为JSON的类型。“contextSelector:“img””作为options对象的一部分,甚至是有效代码吗?对于上下文,您需要提供单个上下文或上下文数组。查看文档:它是有效的,至少它对我有效,而另一种方法上次不起作用。