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と同じく主要ブラウザが対応しているので、実質デファクトとして使っていけそうです。