如何更改jQuery默认上下文?

时间:2012-04-03 21:07:52

标签: javascript jquery firefox-addon

我在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的默认上下文而不更改其源代码。

我有哪些选择?

2 个答案:

答案 0 :(得分: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);
};

这种方式有效。

答案 1 :(得分: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对象的上下文。