如何在Firefox插件上使用jQuery 1.5.2+?

起初我创建了一个函数,它接收了一个参数并返回了jQuery,例如:

function getjQuery(window) { /*jquery code*/(window); return window.jQuery; } 

但后来我在评论中收到了一封电子邮件,他们告诉我,我必须使用原始文件名的jQuery文件并完全不加修改。

我开始寻找替代方案并找到了这个解决方案 ,但它没有办法。

jQuery对象已创建,但我找不到任何元素。 $("#id").length始终为0 。 使用以前的方法,它始终被发现。

我目前的代码(不起作用)

 AddonNameSpace.jQueryAux = jQuery; AddonNameSpace.$ = function(selector,context) { return // correct window new AddonNameSpace.jQueryAux.fn.init(selector,context||contentWindow); }; AddonNameSpace.$.fn = AddonNameSpace.$.prototype = AddonNameSpace.jQueryAux.fn; AddonNameSpace.jQuery = AddonNameSpace.$; 

jQuery文件正在我的browser.xul overlay上加载:

  

我在正确的地方装货吗?

如何使用jQuery使用原始jQuery文件修改页面上的内容(HTML),甚至可能吗?

你需要在jquery上的第二个参数上传递e.originalTarget.defaultView。如果你没有jquery将使用window.document,这是来自xul的window.document。

使用

 gBrowser.addEventListener("DOMContentLoaded", function (e) { $("#id", e.originalTarget.defaultView).length }, true); 

代替

 $("#id").length; 

并且,为了避免与其他扩展冲突,请不要在xul页面中使用脚本,请使用MozIJSSubScriptLoader。

 Components.classes["@mozilla.org/moz/jssubscript-loader;1"] .getService(Components.interfaces.mozIJSSubScriptLoader) .loadSubScript("chrome://youraddon/content/jquery-1.5.2.min.js"); 

如果使用此方法,则仅在需要时加载jquery,以避免内存泄漏。

加载它的首选方法是使用mozIJSSubScriptLoader,这样就不会与其他扩展冲突。 我不确定你为什么遇到问题,我可以在我的插件中使用jQuery,如$("#id").hide() ,没有额外的代码(虽然来自侧边栏,现在是browser.xul)。

无论哪种方式, 这篇博客文章提供了一个非常好的指南,甚至有一个示例xpi下载。