jQueryを読み込ませるbookmarklet Google AJAX Libraries API版 (JavaScriptの動的ロードとか)
jQueryを読み込ませるbookmarklet - 文殊堂
↑を置き換える用に作った。
javascript:(function%20(options)%20{var%20version=(options%20||%200).version%20||%201.2;var%20noConflict=(options%20||%200).noConflict%20||%20false;if%20(typeof%20jQuery%20!=%20'undefined'%20&&%20jQuery.fn.jquery==version)%20{return;}var%20s=document.createElement('script');var%20head=document.getElementsByTagName('head')[0];var%20done=false;s.charset='UTF-8';s.language='javascript';s.type='text/javascript';s.src='http://ajax.googleapis.com/ajax/libs/jquery/'%20+%20version%20+%20'/jquery.min.js';s.onload=s.onreadystatechange=function%20()%20{if%20(!done%20&&%20(!this.readyState%20||%20this.readyState=='loaded'%20||%20this.readyState=='complete'))%20{done=true;if%20(noConflict)%20{jQuery.noConflict();}head.removeChild(s);}};head.appendChild(s);})({version:'1.2',noConflict:false});
使い方
- 一番後ろのversion:'1.2'ってやってる所でバージョン指定出来る。
- 1.2なら1.2系の最新版がロード出来る
- noConflict:falseをnoConflict:trueに変えればPrototype.js等と共存可能
元のコード
(function(options){ var version = (options || 0).version || 1.2; var noConflict = (options || 0).noConflict || false; if(typeof jQuery != 'undefined' && jQuery.fn.jquery == version){ return; } var s=document.createElement('script'); var head = document.getElementsByTagName('head')[0]; var done = false; s.charset='UTF-8'; s.language='javascript'; s.type='text/javascript'; s.src='http://ajax.googleapis.com/ajax/libs/jquery/' + version + '/jquery.min.js'; s.onload = s.onreadystatechange = function(){ if ( !done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete") ) { done = true; if(noConflict)jQuery.noConflict(); head.removeChild( s ); } }; head.appendChild(s); })({version:'1.2',noConflict:false}); scriptロード確認のコードはjQuery1.2.6の2668〜2678行目を参考にした。
2008/10/15追記
上記のjQueryのdataType:'script'の場合の実装と、
下記エントリでの最終的な実装がほぼ同じでした。
外部JavaScriptの動的ロード - os0x.blog
キャッシュされていないファイルについてはreadyStateがcompleteではなく、loadedになるようです。
「this.readyState == "loaded" || this.readyState == "complete"」なのはそれでなのかー。