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

标签 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.$;

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

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

我加载的位置正确吗?

我如何使用 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,避免内存泄漏。

关于javascript - 如何在 Firefox 插件上使用 jQuery 1.5.2+?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5863557/

相关文章:

php - 如何在 php 和 javascript 中创建小部件?

javascript - 在 Electron 应用程序中捕获文件下载事件

javascript - async await 在 react-native 中不起作用

javascript - 为什么我难以通过 href ="element"滚动?

javascript - 浏览器可以检测浏览器何时在前台或后台模式下运行吗?

css - 我的动画 CSS 不适用于 Firefox 和 IE

javascript - 如何根据时间戳过滤对象数组

javascript - 如何在CSS中绘制可配置的饼图

javascript - 无法清除临时存储

javascript - jQuery 加入 location.hash 无尽清爽 Firefox