javascriptでURLパラメータを取得する

http://exampl.com/search.html#q=foobar;page=10みたいなurlの#以降を解析して{q:foobar, page:10}なオブジェクトとして返す。昔Yahoo!USの検索API使ってjavascriptだけではてブ検索作ったときに使っていた。

/*
 *
 * UrlParams
 *

 SYNOPSIS:

 window.onload = function() {
   var params = UrlParams.parse();
   var result = document.getElementById("result");
   var text = "";
   for (p in params) {
     text += "{" + p + ": " + params[p] + "}, ";
   }
   result.innerHTML = text;
   UrlParams.update("this_file.html", {a: 1, b: 2});
 }
*/
UrlParams = {
  separator: {
    params: ";",
    keyvalue: "="
  },
  
  parse: function() {
    var parts = location.href.split("#");
    var params = {};
    if (parts.length == 2) {
      var values = parts[1].split(this.separator.params);
      var kv;
      for (var i = 0, length = values.length; i < length; i++) {
        kv = values[i].split(this.separator.keyvalue);
        if (kv.length == 2) {
          params["" + kv[0]] = "" + decodeURI(kv[1]);
          log("  " + kv[0] + ": " + decodeURI(kv[1]));
        }
      }
    }
    return params;
  },
  
  update: function(file_name, params) {
    var parts = location.href.split("#");
    var concated_params = "#";
    if (parts[0].match(file_name)) {
      for (var p in params) {
        concated_params += p +
                           this.separator.keyvalue +
                           encodeURI(params[p]) +
                           this.separator.params;
      }
      location.href = parts[0] + concated_params;
    }
  }
};