指定した処理の実行を後回しにする jQuery later プラグイン
jQuery later プラグインはメソッドチェーンの中で、指定した処理の実行を後回しにできるプラグインです。JSONP のコールバック関数の中で script 要素を削除すると IE がクラッシュしてしまう問題を jQuery 的に解決しようとして、このプラグインを作成しました。
KoshigoeBLOG: 某所の"MochiKit.Async JSONP"を使わさせていただきました。
ロードのたびにユニークにしなければならなかったのは、script要素を削除している辺りにIEのバグが潜んでいたかららしいので、その辺を中心にtry&error。setTimeoutを使ってscript要素の削除を遅延させてみました。
このプラグインを作成するにあたり、上記のブログとそのリンク先を参考にさせてもらいました。
さらにいろいろ調べた結果、次の条件を満たすとき、script 要素を削除しようとすると IE がクラッシュすることがわかりました。
- file://... といった file プロトコルを使うとき
- ブラウザでキャッシュ済みのとき
いずれも、このプラグインを使って script 要素の削除を遅らせることによって、うまく解決できています。
(function($) { // later $.fn.later = function(fn) { var self = this; var timer = setTimeout(function() { clearTimeout(timer); self.each(fn); }, 10); return self; }; })(jQuery); // function($)
次の例は div 要素の削除を後回しにしています。$.later メソッドで指定した関数は 10ms のタイムアウト後、実行されることになります。div 要素を script 要素に置き換えれば JSONP のコールバック関数の問題が解決できます。
<div id="r">foo</div> <script type="text/javascript"> //<![CDATA[ jQuery(function($) { $('#r').later(function() { $(this).remove(); }); }); //]]> </script>
jQuery later プラグインは Postal Search Ajax API に組み込んで配布しています。詳しくは Postal Search Ajax API リファレンス をご覧ください。
関連情報
- fixedUI プラグイン
- jTemplates
- Cycle Plugin
- Flash Plugin
- tablesorter
- Interface Elements
-
- Interface Elements の Carousel とフォートラベル API で旅行写真の 3D ギャラリーを作る
- Interface Elements の Imagebox とフォートラベル API で旅行写真のギャラリーを作る
- Interface Elements の Slider で郵便番号を入力してみたが・・・
- Interface Elements の Slider で旅行写真を拡大(または縮小)表示する
- Interface Elements の Tooltips をいろいろな要素で使ってみた
- Interface Elements の Scrollto でページ内リンクをスムースにする
- Interface Elements の Carousel と YouTube Data API で動画のサムネイルを回転表示する
- Selectors
- Events
- DOM Manipulation
- AJAX
- Forms with Functions
- Using with Other Libraries
- Books
- Resources