Так как в любом случае ваш onbeforeunload
интерпретируется через JS, вы, вероятно, можете использовать логический флаг в глобальной переменной, чтобы узнать, запускается ли процесс, запущенный событием впервые.Например:
<head>
...
<script ...>
var flag=true;
var ret="";
function getoff() {
if(flag) {
//do your things and save your return value to the global variable "ret"
//ret="Unsaved changes";
flag=false; //with this, the code above will be executed only once
}
return ret; //the second call will return the same thing as the first call, as first call's return value is stored in a global variable, and is not modified during the second call
}
</script>
</head>
<body onbeforeunload="return getoff();">
...
Возможно, еще одна возможность, поскольку, согласно этому сообщению проблема, похоже, связана с изменением страницы с помощью JS, вы можете использовать скрытую гиперссылку, чтобы изменить страницу с помощью HTML, что-то вроде:
<a href="404.htm" id="myButton" style="display:none;visibility:hidden;"></a>
Тогда ваша кнопка может сделать:
<input type="button" ... onclick="document.getElementById('myButton').click();">
Если предположить, что что-то из этого работает, скрытая ссылка, подобная этой, является уродливым хаком (первая возможностьво всяком случае, намного красивее), но что не требует некоторых отвратительных хаков, когда речь идет о том, чтобы MSIE вел себя так, как если бы это был веб-браузер ...