我正在创建一个bookmarklet,如果找不到该对象,它将加载jQuery.加载将检查jQuery的版本.代码如下:
(function(){ var myBkl = { loadScript: function(src) { if(window.jQuery && window.jQuery.fn.jquery == '1.3.2'){ return; } var s = document.createElement('script'); s.setAttribute('src', src); s.setAttribute('type', 'text/javascript'); document.getElementsByTagName('head')[0].appendChild(s); }, whenLoaded: function(callback){ if (typeof(window.jQuery) !== 'undefined' && window.jQuery.fn.jquery == '1.3.2') { callback(window.jQuery); } else { setTimeout((function() {myBkl.whenLoaded(callback); }), 100); } }, init: function($){ console.log($.fn.jquery); } }; myBkl.loadScript('http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js'); myBkl.whenLoaded(myBkl.init); })();
我使用这个bookmarklet构建器来创建书签http://subsimple.com/bookmarklets/jsbuilder.htm
显然,如果页面已经加载了jQuery.加载1.3.2脚本将覆盖页面上的window.jQuery对象.我只是想知道有没有让1.3.2加载到另一个自命名变量?用jQuery.noConflict(true);
?
是.我通过这段代码得到了它:
(function(){ var myBkl = { jq: null, loadScript: function(src) { if(window.jQuery && window.jQuery.fn.jquery == '1.3.2'){ return; } var s = document.createElement('script'); s.setAttribute('src', src); s.setAttribute('type', 'text/javascript'); document.getElementsByTagName('head')[0].appendChild(s); }, whenLoaded: function(callback){ if (typeof(window.jQuery) !== 'undefined' && window.jQuery.fn.jquery == '1.3.2') { myBkl.jq = window.jQuery.noConflict(true); callback(myBkl.jq); } else { setTimeout((function() {myBkl.whenLoaded(callback); }), 100); } }, init: function($){ console.log($.fn.jquery); console.log(window.jQuery.fn.jquery); } }; myBkl.loadScript('http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js'); myBkl.whenLoaded(myBkl.init); })();