Вот пример тестового html:
<!DOCTYPE html>
<html>
<body>
<a href="javascript:alert('Not going anywhere!');">Go nowhere 1</a>
<a href="javascript:void(0);" onclick="alert('Not going anywhere!');">Go nowhere 2</a>
<a href="#" onclick="location.href='http://www.google.com'; return false;">Go somewhere</a>
<script type="text/javascript">
window.onbeforeunload = function() { return "Really leave?"; };
</script>
</body>
</html>
Это доступно здесь как рабочая страница: timjeanes.com/ie9_onbeforeunload.htm
В Firefox, Chrome и Safari я получаю поведение, которое я хочу. То есть, нажатие любой из первых двух ссылок показывает диалог предупреждения; нажав на третью ссылку (или, в противном случае, навигация), вы увидите "Вы уверены, что хотите покинуть эту страницу?" сообщение.
Однако, в IE9, "Вы уверены, что хотите покинуть эту страницу?" сообщение также показывает, когда вы нажимаете на одну из первых двух ссылок, даже если никакой навигации не происходит - мы просто запускаем некоторый javascript.
Есть ли что-то, что я делаю неправильно? Или есть хороший обходной путь для IE?
Один из вариантов - использовать href= "#" и поместить мой javascript в onclick. Я не заинтересован в этом, так как он занимает верхнюю часть страницы, а моя реальная страница довольно высока.
Я не тестировал в других версиях IE.