题
我正在开发一个Firefox插件,在Firefox插件网站上提名公开发布插件后,审阅者要求我将所有功能包装在命名空间或包名称中。
到目前为止,我已经包装了除“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调用仍然无法解开,无论如何都可以这样做?
解决方案
您可以将附加代码包装在匿名函数中,在该作用域上接收和存储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
对象不会注册,大多数插件都无法正常工作......
其他提示
如果你要将jQuery与代码一起打包,你可能只需修改库代码就可以将它粘贴到有用的地方。
要做到正确,你需要用myadoon.jQuery替换你所有的jQuery。*调用......
不隶属于 StackOverflow