我設法找出解決方案,並將其他人感興趣的解決方案。
jQuery Mobile的v1.4.5
望着jQuery Mobile的的美化版本,我們可以看到,有多個封裝,在這段代碼,我們可以看到頂部的參數傳遞由「root」的名稱
(function (root, doc, factory) {
if (typeof define === "function" && define.amd) {
// AMD. Register as an anonymous module.
define([ "jquery" ], function ($) {
factory($, root, doc);
return $.mobile;
});
} else {
// Browser globals
factory(root.jQuery, root, doc);
}
}(this, document, function (jQuery, window, document, undefined) {/*!
此頂層函數是調用其餘代碼的工廠函數。如果記錄「root」的值,參數命名空間窗口對象,後跟文檔和回調函數。該命名空間窗口對象必須從「此」對象的名稱在連接了改變jQuery來,比如這個:
}(window.myObject, document, function (jQuery, window, document, undefined) {/*!
這幾乎工作,有這一個步驟,因爲這會引起的jQuery移動在代碼中的這三個點引用的命名空間窗口對象時引發錯誤:
line 1472: window.navigator.userAgent.indexOf("Firefox")
line 1473: window.navigator.userAgent.search(/CriOS/)
line 1499: var ua = window.navigtor.userAgent;
窗口對象jQueryM正在引用這些是您在上面改變的根名稱空間。對於這三個行代碼一個簡單的修正都設置爲jQuery Mobile的,外部的窗口對象的變量如像這樣:
var pseudoWindow = window;
(function (root, doc, factory) {
if (typeof define === "function" && define.amd) {
,然後爲三行代碼上方設置窗口參考參考這個變量
line 1472: pseudoWindow.navigator.userAgent.indexOf("Firefox")
line 1473: pseudoWindow.navigator.userAgent.search(/CriOS/)
line 1499: var ua = pseudoWindow.navigtor.userAgent;
這將成功地使jQuery移動自己附加到一個不直接附加到窗口的jQuery。
只是爲了文檔,並回答@twernt,這裏是我如何將jQuery附加到我自己的自定義對象。
如果你打開了jQuery庫,你可以在底部附近找到其中的jQuery直接連接本身window對象:
var
// Map over jQuery in case of overwrite
_jQuery = window.jQuery,
// Map over the $ in case of overwrite
_$ = window.$;
jQuery.noConflict = function(deep) {
if (window.$ === jQuery) {
window.$ = _$;
}
if (deep && window.jQuery === jQuery) {
window.jQuery = _jQuery;
}
return jQuery;
};
// Expose jQuery and $ identifiers, even in
// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
// and CommonJS for browser emulators (#13566)
if (!noGlobal) {
window.jQuery = window.$ = jQuery;
}
return jQuery;
,我只是相應地改變jQueries代碼將其自身附加到我的對象這樣的:
var
// Map over jQuery in case of overwrite
_jQuery = window.myObject.jQuery,
// Map over the $ in case of overwrite
_$ = window.$;
jQuery.noConflict = function(deep) {
if (window.$ === jQuery) {
window.$ = _$;
}
if (deep && window.jQuery === jQuery) {
window.jQuery = _jQuery;
}
return jQuery;
};
// Expose jQuery and $ identifiers, even in
// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
// and CommonJS for browser emulators (#13566)
if (!noGlobal) {
window.myObject.jQuery = window.myObject.$ = jQuery;
}
return jQuery;
所以你可以在這裏看到,jQuery是永遠擺在首位連接直接 window對象,所以引用jQuery直接從window.jQuery之類的窗口中不起作用。