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

时间:2011-05-02 23:23:11

标签: javascript jquery firefox firefox-addon

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

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

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

我开始寻找替代方案并找到了this solution,但它无法正常工作。

创建了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.$;

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

<script type="text/javascript" src="chrome://addon/content/bin/jquery-1.5.2.min.js" />

我在正确的地方装货吗?

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

2 个答案:

答案 0 :(得分:3)

您需要在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,避免内存泄漏。

答案 1 :(得分:2)

加载它的首选方法是使用mozIJSSubScriptLoader,因此您不会与其他扩展程序发生冲突。我不确定你为什么遇到问题,我可以在我的插件中使用jQuery,例如$("#id").hide(),而不需要额外的代码(尽管来自侧边栏,现在是browser.xul)。

无论哪种方式,this blog post提供了非常好的指南,甚至还有一个示例xpi可供下载。