今回は

の合わせ技。

表示するページの文字コードと form の送信先の期待する文字コードが異なる場合、IE 以外のブラウザなら accept-charset 属性に従って送信してくれる。

つまり IE でだけゴニョゴニョしなきゃいけないわけだけど1

  • 送信先で期待している文字コードが UTF-8
  • GET リクエストが有効

の二つが AND でクリアできている場合、form の submit を横取りして JavaScript の encodeURIComponent() を使って URI を生成して、そこに飛べばよい。

が、これだけだと履歴を戻ることができなくなってしまう。例の、Ajax と同じ問題だ。そこで location.hash を適当に書き直してやることで送信先の URI に飛んで行く前の URI を履歴に保存してやろうとするんだけど、これがまた IE でだけ動かないorz

もう IE なんて死滅しろ。

ちなみに、Win2k + IE の場合は location.hash なんて書き換えなくても履歴に残ったりする。なんだこのいきなりの挙動の変わりっぷり。IE のバージョンとか JScript のバージョンとかじゃなくて OS のバージョンが影響するところがよく分からん2

  1. 6 も 7 もダメダメ 

  2. WinXP + IE 6/7, JScript 5.6/5.7 ともに location.hash を使っても履歴に残せないが、Win2k + IE 6, JScript 5.6 では何もせずに履歴が残る。 

More