永远不会调用onMessage事件

时间:2012-07-14 01:34:36

标签: 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");

    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

问题:这个错误意味着什么,或者说这条线有什么问题?

1 个答案:

答案 0 :(得分:2)

您的上下文菜单实现在某些方面有点棘手,请参阅此固定示例:

https://builder.addons.mozilla.org/addon/1065630/latest/

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

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

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