我在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的默认上下文而不更改其源代码。
我有哪些选择?
答案 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对象的上下文。