gpt4 book ai didi

Firefox 扩展中的 jQuery 与全局命名空间没有冲突

转载 作者:行者123 更新时间:2023-12-01 04:57:05 28 4
gpt4 key购买 nike

我已经阅读了很多关于这个问题的帖子,并尝试了所有包含 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 扩展内部发生冲突?

最佳答案

经过更多调查,并感谢 Omri Baumer 的不懈努力..

我们现在明白为什么会收到错误。

正确的方法不是在 xul 文件中作为包含(正如我怀疑的那样),而是通过调用未包装的 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
}

希望这对所有陷入困境的人有所帮助!!

再次感谢欧姆里·鲍默!

关于Firefox 扩展中的 jQuery 与全局命名空间没有冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13709079/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com