history.backが成功したかどうかを判別する

今も昔も大変よく使われている古典的JavaScriptの一つjavascript:history.back()なんですが、実際に戻る操作が成功したのかどうかを判別することができません。タブブラウザなんかを使っててミドルクリックで新規タブで開いてたりすると、history.backをクリックしても無反応で何も起こらない、なんてことよくありませんか?

そんなわけなのでhistory.backを実行後にページ移動が発生しているかどうかを監視して、戻るに失敗したときに特定の処理を発生させることができるような関数を作ってみました。

function try_back(errback){
    var bs = false;
    Event.observe(window,"unload",function(){bs=true});
    Event.observe(window,"beforeunload",function(){bs=true});
    history.back();
    switch(typeof errback){
        case "function": setTimeout(function(){if(!bs) errback()},100);break;
        case "string"  : setTimeout(function(){if(!bs) location.href=errback},100);break;
    }
    return bs;
}
// 使い方
// 戻るに失敗したときの処理
try_back(function(){window.status="戻る失敗"});
// もしくは戻るに失敗したときにジャンプするURL
try_back("http://example.com");


Event.observeは使ってるライブラリに合わせて適当に書き換えてください。
IEやFirefoxだとhistory.backを実行した後、即座にwindow.onbeforeunloadが実行されるみたいです。Operaはonbeforeunloadが実装されてないのでunloadでも使えるようにしてあります。

window.onbeforeunloadはページから立ち去ってよろしいですか?とメッセージを出すのに使ったりするイベントハンドラ。Google Spreadsheetsなんかで使われてますね。


WriteBacks

history.backをできるだけ成功させる

最速インターフェース研究会 :: history.backが成功したかどうかを判別する を読んで、それdocument.referrer・・・と思ったので試してみました。 http://ss-o.net/historyback.html 使い方は、 <a href=”javascript:(function(){historyBack();})();”>historyBack&

Posted by アコースティック ライフ - Acoustic Life at 2006/09/02 (Sat) 06:20:16

タブ式ブラウザでもっと素早く検索。かっこいいブラウザ。

アイコンのデザイン、操作性、カスタマイズ性とすべて使いやすくなっています。初心者にはシンプルに設定できますし、コアユーザには多彩な機能が自由自在です。

Posted by 使えるタブ式ブラウザならこれです。タブブラウザのlunascape at 2006/09/30 (Sat) 14:34:57

Posted by at 2007/04/16 (Mon) 18:07:42
TrackBack ping me at
http://la.ma.la/blog/diary_200609011825.trackback
Post a comment

writeback message: Ready to post a comment.







spam yoke. nanimo ireruna.