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, время: 00:47. |