Ответ 1
Хорошо, после того, как я ударил по проблеме последние 2 часа, вот мои выводы.
Следующие события никогда не вызываются между назад и вперед:
- load/onload
- unload/onUnload
- change/onchange
- или любые другие события, которые выглядели так, как будто они могли быть вызваны в обратном направлении/вперед
IE11 кэширует все на странице, включая состояние javascript, поэтому ни одно из обычных событий не запускается. При переходе между страницами с помощью кнопок "назад/вперед" код javascript просто возобновляет состояние без уведомления о том, что он был прерван. Сорта грубая для разработчиков imho или, возможно, для этого запускается событие, но я, конечно, не знаю об этом.
В любом случае вы можете увидеть это поведение на этой странице, наполненной шарами. Обратите внимание, что в IE11 вы переходите на google.com, а затем отжимаете назад, все шары находятся в одном и том же месте, и все продолжает работать. В каждом другом браузере страница повторно инициализируется, и шары снова падают с потолка. Я вижу сценарии, в которых поведение IE11 было бы полезным и полезным, но я просто хочу, чтобы Microsoft предоставила документацию, когда вы этого не хотите. Кроме того, было бы неплохо, если бы значения по умолчанию были бы похожими на любой другой браузер и добавили бы эту функцию вместо того, чтобы нарушать всю совместимость со всем, включая свои IE9 и IE10!
Таким образом, я понял, что если бы я запустил таймер, он просто отскочил от того места, где я остановился. Мне не нравится этот код, так как это взломанный ожидание, но он делает то, что я хочу. Было бы здорово, если бы кто-нибудь мог подумать о чем-то лучшем, что бы не было так занято...
<!-- IE11 back/forward hack - http://stackoverflow.com/questions/21274085/internet-explorer-11-back-button-javascript-behavior -->
<script type="text/javascript">
var dumbIEHistory=history.length;
function busyWaitCheckForHistoryChange() {
if (history.length != dumbIEHistory) {
alert("History has changed, back/forward has been pressed, run my function!");
myFunction();
dumbIEHistory=history.length;
}
}
// using http://www.pinlady.net/PluginDetect/Browsers/ to do browser detection
$( window ).load(function() {
if (browser.isIE && browser.verIE >= 11) {
// let not bog down all the other browsers because of IE11 stupidity
window.setInterval("busyWaitCheckForHistoryChange()", 1000);
} else {
// in other browsers, this will be called when back/forward is pressed
myFunction();
}
});
</script>
Работает над тем, что я делаю, чтобы поймать, когда нажата кнопка назад/вперед, потому что длина истории будет +1 после того, как мы ударим. Если пользователь слишком быстро перемещается вперед и назад, может потребоваться секундная секция перед вызовом функции, если это вызывает беспокойство, вы можете уменьшить интервал. Надеюсь, это поможет другим.