2009-09-17 77 views
0

我正在开发一个Firefox插件,在Firefox插件网站提名公开发布插件后,评论者要求我将所有函数包装在名称空间或包名称中。包装jQuery功能

到目前为止,我除了包裹“jQuery的”功能我的所有功能:

myaddonname = { 
    initialize: function() { 
     var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); 

     if (document.getElementById("contentAreaContextMenu") != null) { 
      document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", this.onContextMenuPopup(), false); 
     } 

     jQuery.noConflict(); 
    }, 

     . 
     . 
     . 
     . 
} 

jQuery.noConflict和其他一些jQuery的Ajax调用仍然解开,没有办法做到这一点?

回答

2

你可以换你附加代码的匿名函数中,接收和存储在该范围内,jQuery对象:

(function ($) { 
    // $ is available inside this scope 

    window.myaddonname = { // global add-on namespace 
    initialize: function() { 
     //... 
    } 
    //... 
    }; 
})(jQuery.noConflict()); // execute and pass a reference to jQuery 

如果你是一个非常高冲突的环境中,你可以使用jQuery.noConflict(true)(极端方式),但小心使用,具有该选项的window.jQuery对象赢不会被注册,a nd大多数插件将无法正常工作...

+0

环境是未知的,因为每个下载我的插件的用户将有不同的其他插件,可能会冲突我的。所以它是否值得使用它(我只是使用核心Ajax函数没有其他插件)? 还有一件事情是关于“window.myaddonname”在它之前写窗口更好吗?因为firefox的默认命名空间是“chrom”或类似的东西。 – 2009-09-17 05:55:06

+0

@Khaled如果'window'不存在,那么为什么不把它分配给一个全局对象(你可以通过你的匿名函数中的this来引用它)。 – kangax 2009-09-17 05:58:25

0

如果您将jQuery与您的代码一起打包,那么您可以修改库代码以将其粘贴到某个有用的位置。

要做到这一点,则需要更换所有的jQuery。*与myadoon.jQuery调用...

+0

不我使用jQuery作为一个独立的文件,以方便更新。 – 2009-09-17 05:48:33