Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   history рассширение для браузеров не поддерживающих pushState, replaceState (https://javascript.ru/forum/project/21077-history-rassshirenie-dlya-brauzerov-ne-podderzhivayushhikh-pushstate-replacestate.html)

devote 16.01.2012 23:48

событие срабатывает если вы в браузере нажали кнопку назад или вперед.

<script type="text/javascript" src="http://code.spb-piksel.ru/history-1.2.4.min.js"></script>
<script type="text/javascript">
    var method = window.addEventListener ? ['addEventListener', ''] : ['attachEvent', 'on'];
    window[ method[ 0 ] ]( method[ 1 ] + 'popstate', function( e ) {
        var loc = e.location || document.location;
        alert( "return to: " + loc );
    }, false);

    setTimeout(function() {
        history.pushState({page: 1}, "title 1", "?page=1");
    }, 2000);
</script>

zebra 16.01.2012 23:53

Жаль. Значит всё-таки придётся следить за сменой урла. Спс за ответ

devote 17.01.2012 00:00

Цитата:

Сообщение от zebra
Жаль. Значит всё-таки придётся следить за сменой урла. Спс за ответ

что то не совсем вас понимаю, зачем следить? меняете url вы же зами скриптом, а значит знаете о том что его сменили. Вот если пользователь сменит ручками url, или нажмет назад, вперед то сработает событие.. Именно так и работают нативные функции history API тоесть от библиотеки это не зависит. Потому что она работает по тем же принципам что и нативные функции.

zebra 17.01.2012 01:19

Посмотрел Ваши функции на сайте и разобрался :)

zebra 22.01.2012 23:26

И снова я и снова ie :-? Страничка посылает ajax запросы, и вот иногда когда приходят данные IE вызывает JSON.parse (не из моей функции, а походу где-то в либе) с значением null. Отключаю Ваш скрипт, сё нормально сразу. Баг не баг, я пробовал на ie8-9.

devote 23.01.2012 00:48

Цитата:

Сообщение от zebra (Сообщение 152212)
И снова я и снова ie :-? Страничка посылает ajax запросы, и вот иногда когда приходят данные IE вызывает JSON.parse (не из моей функции, а походу где-то в либе) с значением null. Отключаю Ваш скрипт, сё нормально сразу. Баг не баг, я пробовал на ie8-9.

Не совсем понял, но если не сложно по подробнее... что конкретно происходит, какие ошибки возникают, что перестает работать, если есть возможность пришлите лог консоли.. СПС

zebra 23.01.2012 03:19

Нашёл косяк. У меня json либа была старая, и JSON.parse(null) вылетал в ие.
Вот тут data == null.
// dispatch "popstate" event if location changed
		firePopState = function( location ) {

			his.state = null;
			if ( window.sessionStorage ) {

				var data = sessionStorage.getItem( lastHash );

				if ( window.JSON && JSON.parse ) {
					his.state = JSON.parse( data );
				} else {
					his.state = (new Function( "return " + data ))();
				}

devote 23.01.2012 08:21

Цитата:

Сообщение от zebra
Нашёл косяк. У меня json либа была старая, и JSON.parse(null) вылетал в ие.
Вот тут data == null.

Да спасибо я исправил, можете скачать исправленную версию в первом топике.

64j 01.02.2012 00:56

и всё таки если обновить страницу то переходим на главную страницу, а URL не меняется, логичнее оставаться на этой же странице.
а сдругой стороны кажется это не возможно... к сожалению знания не такие глубокие , чтобы реализовать подобное

devote 01.02.2012 01:09

Цитата:

Сообщение от 64j
и всё таки если обновить страницу то переходим на главную страницу, а URL не меняется, логичнее оставаться на этой же странице.
а сдругой стороны кажется это не возможно... к сожалению знания не такие глубокие , чтобы реализовать подобное

хм... почему вы так решили? Вроде как я делал с учетом того что бы при обновлении страницы срабатывало событие popstate в случае если мы находимся не на главной. Вы можете посмотреть на сайт http://history.spb-piksel.ru/ по обновлять страницу, и увидите что страница все таже после обновления что и была до обновления.


Часовой пояс GMT +3, время: 21:48.