4

我在 Firefox 插件上加载了 jQuery,这导致它使用 XUL 的window.

我想更改默认上下文,以便它使用正确的window对象。

我经常看到的经典例子是:

var $ = function(selector,context){
   return new  jQuery.fn.init(selector,context|| correctWindow );
};
$.fn = $.prototype = jQuery.fn;

但是这样做我会杀死很多功能,比如.ajax,,.browser......我需要这些方法。

AMO不会让我创建一个包装器jQuery来发送正确的window对象。

所以我唯一的选择是以某种方式更改 jQuery 的默认上下文而不更改其源代码。

我有什么选择?

4

2 回答 2

1

在我添加的第一个内容脚本上

var loader = Components
    .classes["@mozilla.org/moz/jssubscript-loader;1"]
    .getService(Components.interfaces.mozIJSSubScriptLoader);

loader.loadSubScript("chrome://extensions/js/jquery-1.7.2.min.js");

var initjQuery = jQuery.fn.init;
$.fn.init = function(s,c,r) {
    c = c || window.document;
    return new initjQuery(s,c,r);
};

这样就可以了。

于 2013-12-12T18:55:24.527 回答
0

您可以使用此包装器更改默认上下文:

jQuery.fn.init2 = jQuery.fn.init;

jQuery.prototype.init = function (selection, context, root) {
    return new jQuery.fn.init2(selection, context, jQuery.context || root);
}

$(document).ready(function () {
    jQuery.context = $(newContextSelector);
    $("*").css("color", "red");
});

查看作为 jquery 对象的上下文。

于 2020-02-05T18:43:49.003 回答