我正在开发一个需要访问 jquery-ui 和 jquery min 的书签。当然,需要注意的是页面可能已经加载了 jQuery,应该避免冲突。
使用位于http://benalman.com/code/javascript/jquery/jquery.ba-run-code-bookmarklet.js的 Ben Alman 的代码,我已经能够优雅地引入 jQuery 并在 UI 中进行黑客攻击以加载,但是延迟似乎存在问题,并且 jQuery UI 还没有准备好立即运行......
在执行实际代码之前,是否有更好的方法来处理按顺序加载两个脚本?
(function( window, document, jQuery, req_version, callback, callback_orig, parent, script ){
if ( !window[jQuery] || req_version > window[jQuery].fn.jquery ) {
parent = document.documentElement.childNodes[0];
script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js';
parent.appendChild(script);
callback_orig = callback;
callback = function($, L) {
'$:nomunge, L:nomunge';
$(script).remove();
callback_orig( $, L );
};
}
if (typeof jQuery.ui == 'undefined'){
parent = document.documentElement.childNodes[0];
scriptui = document.createElement('script');
scriptui.type = 'text/javascript';
scriptui.src = 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.js';
parent.appendChild(scriptui);
alert('Loading your matches...');
}
(function loopy($){
'$:nomunge'; // Used by YUI compressor.
( $ = window[jQuery] ) && req_version <= $.fn.jquery
? callback( parent ? $.noConflict(1) : $, !!parent ) : setTimeout( loopy, 50 );
})();
})( window, document, 'jQuery', '1.3.2',
function($,L) {
'$:nomunge, L:nomunge';
<all the jquery stuff goes here>
Using jQuery UI in a Bookmarklet有一个类似的问题,并提供了深入的答案,但我无法将其从 CoffeeMarklet 翻译为“标准”js。