load и popstate а Chrome
Как избежать вызов события popstate при загрузке страницы в Хроме? Это можно сделать говнокодом: поставить таймер и смотреть, вызвалось ли одно событие, но как сделать по-человечески, не могу придумать.
|
Цитата:
|
|
Я так делал в своей библиотеке
var initialFire = document.location.href; window.onpopstate = function() { if ( initialFire === document.location.href ) { return initialFire = false; } initialFire = false; // some code here // ... } |
ах да, еще перед вызовом pushState или replaceState нужно зафалсить переменную initialFire иначе в других браузерах при возврате на предыдущию страницу не сработает событие popstate
|
Меня больше всего удивляет, что popstate срабатывает после load.
|
что бы не переделывать весь код, то можно сделать так, ну завернуть это куда нить или еще как нить
var history = window.history, pushState = history.pushState, replaceState = history.replaceState, initialFire = document.location.href; history.pushState = function() { initialFire = false; pushState.apply( history, arguments ); } history.replaceState = function() { initialFire = false; replaceState.apply( history, arguments ); } window.onpopstate = function(){ if ( initialFire === document.location.href ) { return initialFire = false; } initialFire = false; // some code here // ... } |
Цитата:
|
devote, melky, спасибо. Но я сделал вот так:
$( window ).bind( 'load', function( event ) { handlers.popstate(); console.log('load'); setTimeout( function(){ $( window ).bind( 'popstate', function( event ) { handlers.popstate(); console.log('popstate') }); },0); }); Прокатило. |
Тему продолжу)
В FF TypeError: history is undefined с ссылкой на строку pushState = history.pushState |
Часовой пояс GMT +3, время: 05:08. |