Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.05.2012, 20:03
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

load и popstate а Chrome
Как избежать вызов события popstate при загрузке страницы в Хроме? Это можно сделать говнокодом: поставить таймер и смотреть, вызвалось ли одно событие, но как сделать по-человечески, не могу придумать.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #2 (permalink)  
Старый 17.05.2012, 20:31
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от FINoM Посмотреть сообщение
Как избежать вызов события popstate при загрузке страницы в Хроме? Это можно сделать говнокодом: поставить таймер и смотреть, вызвалось ли одно событие, но как сделать по-человечески, не могу придумать.
а что, если вешать обработчик события после загрузки?
Ответить с цитированием
  #3 (permalink)  
Старый 21.05.2012, 19:09
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 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();
		});
	});

__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #4 (permalink)  
Старый 21.05.2012, 19:14
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 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
    // ...
}
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 21.05.2012 в 19:24.
Ответить с цитированием
  #5 (permalink)  
Старый 21.05.2012, 19:28
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

ах да, еще перед вызовом pushState или replaceState нужно зафалсить переменную initialFire иначе в других браузерах при возврате на предыдущию страницу не сработает событие popstate
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #6 (permalink)  
Старый 21.05.2012, 19:31
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Меня больше всего удивляет, что popstate срабатывает после load.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #7 (permalink)  
Старый 21.05.2012, 19:38
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 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
    // ...
}
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #8 (permalink)  
Старый 21.05.2012, 19:39
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от FINoM
Меня больше всего удивляет, что popstate срабатывает после load.
Меня больше всего удивляет что Хром и Сафари по сей день не избавились от этого ненужного действия. Оно нужно было тогда когда небыло возможности получить объект state из history но когда исправили спецификацию на эту тему, это нужно было убрать.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #9 (permalink)  
Старый 21.05.2012, 21:21
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 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);
	});

Прокатило.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #10 (permalink)  
Старый 21.02.2013, 20:37
Аватар для KupueIIIKo
Профессор
Отправить личное сообщение для KupueIIIKo Посмотреть профиль Найти все сообщения от KupueIIIKo
 
Регистрация: 04.10.2011
Сообщений: 357

Тему продолжу)
В FF TypeError: history is undefined с ссылкой на строку
pushState = history.pushState
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Chrome начал тормозить hellms Opera, Safari и др. 0 17.04.2012 19:19
ExternalInterface в Chrome haspadar Events/DOM/Window 1 24.01.2012 05:36
Получить размеры рабочей области окна в Chrome unclechu Events/DOM/Window 1 13.09.2011 02:37
Подсветка синткасиса в textarea. Chrome. kadabrik Opera, Safari и др. 3 31.08.2011 12:38
тег <audio> в Opera, Chrome, Firefox Magneto Javascript под браузер 12 25.11.2010 15:12