めも:ajaxの戻る

またハマってるのがajax…ブラウザの戻る。
ブラウザの「戻る」自体はわたし自身もよく使うし、いわゆるユーザビリティを考えても、ブラウザ標準の機能をサービスの都合でどーこーするのは、発想する時点で負け確定。
とはいえ、確認画面なんかで、おっといけない書き直し、となった場合、用意されてる「戻る」ボタンじゃなくて、ブラウザの「戻る」を押すことが多くて(わたしはSleipnirでマウスジェスチャで戻る)それはそれで問題。
ブラウザで戻られると、ajaxで出してるフローティングコンテナのフォームがぶっ飛んでしまう。
せめて一度だけこのときだけでもブラウザの「戻る」は「なにもしない」で欲しい、と。
あれこれ検索してみて、とりあえず一度きり、ブラウザの戻るを「なにもしない」にしてみる。
if(document.all){
var ifr = document.createElement(’IFRAME’);
ifr.style.cssText="display:none";
document.body.appendChild(ifr);
var iframe = frames[frames.length -1].document;
iframe.open();
iframe.close();
iframe.location.hash="#books";
}
else{
window.location.hash="#books";
}
location.hashにテキトーな値を入れると、URLの履歴にページ内ジャンプのURLが追加される=ページ遷移が起こらない。これを利用してブラウザの戻るを意図どおり一度だけ「なにもしない」にできる。
ajaxが絡むページ移動やブックマークではこいつをさらにガリガリ使って、いわゆるフツーのページ遷移・ブックマークを実現する…らしいけど、わたしはそこまで考えてないし、そんなスキルもない。
で、どうもIEだけが別扱いらしく、widndow.location.hashに値を入れても反応してくれない。
document.allでくくった中のように、ダミーでiframeを生成して、そのiframeをopen→closeして、そのiframe のlocation.hashに値を代入、なんて二度手間三度手間してようやく。
うーん、でもこれでいいのか、本当に意図どおりなのか、てのはいろんなパターンを検証しないとわからんちんだなぁ。

