 
			
				17.05.2012, 20:03
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Новичок 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.09.2010 
					
					
					
						Сообщений: 2,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				load и popstate а Chrome
			 
			
		
		
		
		Как избежать вызов события popstate при загрузке страницы в Хроме? Это можно сделать говнокодом: поставить таймер и смотреть, вызвалось ли одно событие, но как сделать по-человечески, не могу придумать. 
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.05.2012, 20:31
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 sinistral 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 28.03.2011 
					
					
					
						Сообщений: 5,418
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от FINoM
			 
		
	 | 
 
	| 
		Как избежать вызов события popstate при загрузке страницы в Хроме? Это можно сделать говнокодом: поставить таймер и смотреть, вызвалось ли одно событие, но как сделать по-человечески, не могу придумать.
	 | 
 
	
 
 а что, если вешать обработчик события после загрузки?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				21.05.2012, 19:09
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Новичок 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.09.2010 
					
					
					
						Сообщений: 2,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от melky
			
		
	 | 
 
	| 
		а что, если вешать обработчик события после загрузки?
	 | 
 
	
 
 Не катит   
$( window ).bind( 'load', function( event ) {
		handlers.popstate();
		console.log( 'load' )
		$( window ).bind( 'popstate', function( event ) {
			console.log( 'popstate' )
			handlers.popstate();
		});
	});
  
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				21.05.2012, 19:14
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 что-то знаю 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 24.05.2009 
					
					
					
						Сообщений: 5,176
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Я так делал в своей библиотеке 
var initialFire = document.location.href;
window.onpopstate = function() {
    if ( initialFire === document.location.href ) {
        return initialFire = false;
    }
    initialFire = false;
    // some code here
    // ...
}
 
		
	
		
		
		
		
		
			
		
		
		
		
		
						  
				
				Последний раз редактировалось devote, 21.05.2012 в 19:24.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				21.05.2012, 19:28
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 что-то знаю 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 24.05.2009 
					
					
					
						Сообщений: 5,176
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 ах да, еще перед вызовом pushState или replaceState нужно зафалсить переменную initialFire иначе в других браузерах при возврате на предыдущию страницу не сработает событие popstate 
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				21.05.2012, 19:31
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Новичок 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.09.2010 
					
					
					
						Сообщений: 2,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Меня больше всего удивляет, что popstate срабатывает после load. 
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				21.05.2012, 19:38
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 что-то знаю 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 24.05.2009 
					
					
					
						Сообщений: 5,176
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		что бы не переделывать весь код, то можно сделать так, ну завернуть это куда нить или еще как нить 
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
    // ...
}
 
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				21.05.2012, 19:39
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 что-то знаю 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 24.05.2009 
					
					
					
						Сообщений: 5,176
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от FINoM
			
		
	 | 
 
	| 
		Меня больше всего удивляет, что popstate срабатывает после load.
	 | 
 
	
 
 Меня больше всего удивляет что Хром и Сафари по сей день не избавились от этого ненужного действия. Оно нужно было тогда когда небыло возможности получить объект state из history но когда исправили спецификацию на эту тему, это нужно было убрать.  
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				21.05.2012, 21:21
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Новичок 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.09.2010 
					
					
					
						Сообщений: 2,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		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);
	});
Прокатило.  
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				21.02.2013, 20:37
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.10.2011 
					
					
					
						Сообщений: 357
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Тему продолжу) 
В FF TypeError: history is undefined с ссылкой на строку  
pushState = history.pushState 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |