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

Bru*_*oLM 5 javascript firefox jquery firefox-addon

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

function getjQuery(window)
{
   /*jquery code*/(window);
   return window.jQuery;
}
Run Code Online (Sandbox Code Playgroud)

但后来我在评论中收到了一封电子邮件,他们告诉我,我必须使用原始文件名的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.$;
Run Code Online (Sandbox Code Playgroud)

jQuery文件加载在我的browser.xul叠加层上:

<script type="text/javascript" src="chrome://addon/content/bin/jquery-1.5.2.min.js" />
Run Code Online (Sandbox Code Playgroud)

我在正确的地方装货吗?

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

小智 3

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

使用

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

代替

$("#id").length;
Run Code Online (Sandbox Code Playgroud)

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

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

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