指定した処理の実行を後回しにする 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
