我已经阅读了很多关于此事的帖子,并尝试了所有方法来包含jQuery。
如果我在xul文件中加载jQuery并将其存储在变量中,它可以工作。 (如How to use jQuery in Firefox Extension)
jQuery.noConflict();
sbsh.safeWalletUtils.$ = function (selector, context) {
return new jQuery.fn.init(selector, context || doc);
};
sbsh.safeWalletUtils.$.fn = sbsh.safeWalletUtils.$.prototype = jQuery.fn;
但是,我怀疑这里的建议解决方案要好得多: http://forums.mozillazine.org/viewtopic.php?f=19&t=2105087
loadjQuery: function(wnd){
var loader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
.getService(Components.interfaces.mozIJSSubScriptLoader);
loader.loadSubScript("chrome://clhelper/content/jquery/jquery-1.5.js",wnd);
var jQuery = wnd.jQuery.noConflict(true);
loader.loadSubScript("chrome://clhelper/content/jquery/jquery.hoverIntent.js", jQuery);
return jQuery;
},
页面加载事件处理程序中的:
var doc = event.originalTarget;
var wnd = doc.defaultView;
// load jQuery and save it as a property of the window
myprivatejQuery = loadjQuery(wnd)
但是我一直得到wnd.jQuery未定义..(链接中很少有人说这是问题)
我该怎么办? 我如何使用jQuery而不用担心Firefox扩展中的冲突?
答案 0 :(得分:1)
经过更多的调查,感谢Omri Baumer的无情工作......
我们现在明白为什么会收到错误。
正确的方法不是在xul文件中作为include(我怀疑),而是通过调用unwrapped js对象:
// correct function to load jQuery
var loadjQuery = function(wnd){
var loader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
.getService(Components.interfaces.mozIJSSubScriptLoader);
loader.loadSubScript("chrome://sbshsafewallet/content/jquery-1.8.3.js", wnd);
var jQuery = XPCNativeWrapper.unwrap(wnd).$;
jQuery.noConflict(true);
return jQuery;
};
// field to store the jQuery for the current document window (as there can be multiple tabs)
var jQueryForWindow = null;
// event to call on window load (didn't include the code, left for reader to do)
windowLoad = function (event)
{
var appcontent = document.getElementById("appcontent"); // browser
appcontent.addEventListener("DOMContentLoaded", pageLoadedInit, false);
}
// load jQuery on DOMContentLoaded event
pageLoad = function (event) {
var doc = event.originalTarget;
var wnd = doc.defaultView;
jQueryForWindow = loadjQuery(wnd);
}
//example of function using the jQuery
function usesjQuery()
{
var $ = jQueryForWindow;
//do something with jquery here
}
希望这可以帮助所有被困的人!!
再次感谢Omri Baumer!