ページ遷移前に確認ダイアログを出す onbeforeunload

編集中に別のページに遷移しようとした時に確認ダイアログを出したい。
以下のように onbeforeunload イベントを使えばOK。

window.onbeforeunload = function (e) {
  var e = e || window.event;

  // For IE and Firefox prior to version 4
  if (e) {
    e.returnValue = 'Any string';
  }

  // For Safari
  return 'Any string';
};

jQueryの場合

$(window).bind('beforeunload', function(event) {
	return 'Any string';
});

ただし、IEの場合は以下のような遷移しないaタグでもonbeforeunloadが発生してしまう。

<a href="javascript:void(0);">保存</a>

以下のように対応

var execBeforeUnload = true;
$(window).bind('beforeunload', function(e) {
	if (execBeforeUnload) {
		return 'Any string';
	}
});

$(document).ready(function() {
	$('a').click(function(e) {
		if (e.target.href && e.target.href.indexOf("javascript") === 0) {
			cancelBeforeUnload();
		}
	});
});

function cancelBeforeUnload() {
	execBeforeUnload = false;
	setTimeout(function() {
		execBeforeUnload = true;
	}, 0);
}

参考:
window.onbeforeunload - MDC Doc Center
https://developer.mozilla.org/en/DOM/window.onbeforeunload

ページ移動前に確認ダイアログ - ironsJPのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/irons765/6688178.html