2012-07-14 51 views
1

所以我不過工作在我的下一個附加的Firefox,而閱讀ContextMenus的文檔,似乎在onMessage事件永遠不會被調用,這裏是我的代碼:的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}); 
}; 

所以我來看看錯誤控制檯,但這probbaly我見過的最糟糕的一種格式錯誤的......

Timestamp: 14/07/2012 3:21:44 Error: An exception occurred. Traceback (most recent call last): File "resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/addon-kit/lib/context-menu.js", line 1310, in CMP_handleEvent this.handleClick(event.target); File "resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/addon-kit/lib/context-menu.js", line 1339, in CMP_handleClick this.browserWin.fireClick(topLevelItem, popupNode, item.data); File "resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/addon-kit/lib/context-menu.js", line 1162, in BW_fireClick worker.fireClick(popupNode, clickedItemData); File "resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/addon-kit/lib/context-menu.js", line 663, in CMW_fireClick this._contentWorker.emitSync("click", popupNode, clickedItemData); File "resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/api-utils/lib/content/worker.js", line 71, in emitSync return this._emitToContent(Array.slice(arguments)); File "resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/api-utils/lib/content/content-worker.js", line 96, in onChromeEvent return emit.apply(null, args); File "resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/api-utils/lib/content/content-worker.js", line 45, in onEvent results.push(callback.apply(null, args)); File "javascript:self.on("click", function(node, data){
self.postMessage(node);});", line 1, in null File "resource://jid0-dxglsws2k0cubycbcn7cw5tcyqk-at-jetpack/api-utils/lib/content/content-worker.js", line 81, in onEvent let str = JSON.stringify(args, replacer); [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIImageLoadingContent.loadingEnabled]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: 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 :: onEvent :: line 81" data: no]

這裏的實際線,但這不是讓任何意義我:

File "javascript:self.on("click", function(node, data){self.postMessage(node);});", line 1, in null

問題:這個錯誤的含義是什麼,或者說上面的那一行有什麼錯誤?

+0

你想使用jQuery的'。對()',而無需實際加載的jQuery? – ThiefMaster 2012-07-14 10:16:49

+0

@ThiefMaster我使用的是firefox-addon-sdk中的on()事件,無論是從插件本身idk中獲得的jQuery,但我相信這不是問題,但我有一個想法,爲什麼這可能會有發生了,我相信這個「​​自我」的參照不是全球性的,而是我必須指定的一個參考,在我回頭看時會嘗試。 – EliotVU 2012-07-14 10:47:37

+0

顯然不是這種情況:/ – EliotVU 2012-07-14 11:00:04

回答

2

你的上下文菜單中執行是在幾個方面有點扭曲,看到這個固定的例子:

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

  1. 從內容腳本的postMessage調用不能發送HTML節點,它可以只發送JSON數據。

  2. 不要在main.js或從./lib/加載的其他模塊中使用警報 - 警報在此處未定義。改用console.log。

  3. 你需要的上下文語境:cm.SelectorContext( 'IMG')

+0

謝謝!它現在的作品:) #3:這和我目前的代碼有什麼區別? – EliotVU 2012-07-15 04:15:40

+0

我的代碼通過postMessage發佈了一個字符串,您的代碼發佈了一個節點引用。 postMessage只能發送基本類型,例如任何可以序列化爲JSON的東西。 – canuckistani 2012-07-15 05:38:49

+0

我實際上指向了你的第三點:D – EliotVU 2012-07-15 05:43:45