window.onhashchangeが便利すぎる
昨日の記事
http://d.hatena.ne.jp/da-yoshi/20100722/1279811055
に対してコメントいただきました。
http://d.hatena.ne.jp/da-yoshi/20100722/1279811055#c1279857804
window.onhashchangeというそのものズバリのイベントハンドラがあるのですね。
IE8については、HTML5だけではなく、XHTML1.0やHTML4.01の標準モードでも動作しました。Firefox3.6でもChrome5でもSafariでも動作しますね。これなら十分採用できます。ちょっと簡単なHTML書いてみました。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> <script type="text/javascript"> $(function() { $(window).bind("hashchange", function() { $("#p1").text(this.location.hash); }); if (window.location.hash) { window.onhashchange(); } }); </script> </head> <body> <p id="p1">test</p> <a href="#link1">link1</a> <a href="#link2">link2</a> </body> </html>
業務系アプリでよくある一覧画面の検索やページング、詳細画面への遷移などは、このハッシュとhashchangeハンドラを使えばかなり楽に構築可能ですね。リンクに対して個別にイベントを定義する必要も無ければ、動的に作成される一覧内のリンクに対して、jQueryのlive等を使う必要も無くなります。そしてURL直接アクセスや戻るボタン対応もこれで出来てしまうという、良いこと尽くめな機能です。
IE7以下への対応が必要なときはsetInterval等で代用すれば、ほぼ同じ手法で開発できます。このハンドラはHTML5で正式に仕様化されるみたいですが、XHRと同じく主要ブラウザが対応しているので、実質デファクトとして使っていけそうです。