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 28.12.2011 19:04

Исправил одну не приятную ошибку, читаем первый пост

devote 02.01.2012 06:42

Обновил версию, исправил работу с относительными ссылками, и добавил дополнительный параметр по просьбе трудящихся =)

zebra 16.01.2012 20:59

Странное поведение в IE 9. Урл такого вида http://12.345.678.999:20000/home.htm превращает в такой http://12.345.678.999:20000/#home.htm. И невозможно загрузить страницу

devote 16.01.2012 21:48

Цитата:

Сообщение от zebra (Сообщение 150957)
Странное поведение в IE 9. Урл такого вида http://12.345.678.999:20000/home.htm превращает в такой http://12.345.678.999:20000/#home.htm. И невозможно загрузить страницу

А что вы ожидали? что магическим образов в ИЕ9 появится полнофункциональная поддержка pushState и в строке адреса будет поддерживаться нормальный юрл?
Естественно работа с этой библиотекой подразумевает работу с якорем. если не хотите что бы она меняла юрл, запретите ей, указав параметр redirect=false
<script type="text/javascript" src="history-1.2.3.js?redirect=false"></script>

zebra 16.01.2012 22:05

Вы бы хоть написали, что в ие не будет работать.

devote 16.01.2012 22:09

Цитата:

Сообщение от zebra
Вы бы хоть написали, что в ие не будет работать.

собственно библиотека написана какраз для недоразвитых браузеров. Она не работает в нормальных браузерах, там она просто простаивает. А в таких браузерах как ИЕ она какраз таки наоборот именно что и делает, дык это работает.

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

zebra 16.01.2012 22:40

Та вот тетсил в фф/хром/ие9 простой пример
window.history.pushState({'note': 123 }, '', '?test=123');
alert(window.history.state);

Выводит объект только в фф. Я что-то делаю не так?

devote 16.01.2012 22:51

Цитата:

Сообщение от zebra
Выводит объект только в фф. Я что-то делаю не так?

Обычно параметр state получают при срабатывании события popstate.

А вообще вы правы, по идее его можно получить и без события. В библиотеке я это поправлю, но вот на Хром мои изменения не повлияют.

devote 16.01.2012 23:03

Обновил версию в первом топике. zebra, спасибо за указание на ошибку.

zebra 16.01.2012 23:43

Всё никак не могу понять как history работает. Вроде всё просто, но событие не popstate не срабатывает. Или всё-таки popstate не ловит вызов pushState, и надо всё время следить за изменением урла?
window.onpopstate = function(event) {
          alert(11111);
        };
        setTimeout(function() {
            history.pushState({page: 1}, "title 1", "?page=1");
        }, 2000);

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/ по обновлять страницу, и увидите что страница все таже после обновления что и была до обновления.

devote 11.02.2012 06:01

Как всегда обновил версию... Исправлена очередная ошибка.

float 11.02.2012 15:32

Вроде как архив битый...

Octane 11.02.2012 16:02

Залей на GitHub или Google Code. Неудобно же помнить ссылку и качать архив после каждого изменения…

Sergey999 11.02.2012 16:57

Подключил, заработало отлично, правда подключил стандартный что в примере, на сайте есть библиотеки для Jquery и т.п. и не очень понятно что подключать что нет... и зачем..

devote 11.02.2012 21:36

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

Цитата:

Сообщение от Sergey999
правда подключил стандартный что в примере, на сайте есть библиотеки для Jquery и т.п. и не очень понятно что подключать что нет... и зачем..

Ничего не понял, что за стандартный, причем тут вообще джуквери и что именно не понятно? Скачай архив по ссылке в первом посте, там внутри есть .txt файл с описанием как с нею работать.

Sergey999 11.02.2012 22:48

он тогда не качался так что взял с примера, я про это:
https://github.com/balupton/history....s/uncompressed
что это все и что с ним делать?

devote 12.02.2012 01:18

Цитата:

Сообщение от Sergey999 (Сообщение 156843)
он тогда не качался так что взял с примера, я про это:
https://github.com/balupton/history....s/uncompressed
что это все и что с ним делать?

Это вообще не моя библиотека, а фуфло... ссылка просто была приведена для примера того что моя библа проще чем эта грамоздкая.

Sergey999 12.02.2012 01:18

А то я думаю что у меня не сходится то нихрена вместе =)
p.s. А за библиотеку спасибо избавили от кучи проблем и время сэкономили много!

devote 12.02.2012 01:23

Цитата:

Сообщение от Sergey999
А то я думаю что у меня не сходится то нихрена вместе =)

Ну вот качай нормальную.. Там есть и пример использования. Там не сложно все... лишь одно отличие от нативной поддержки. Это получение location из объекта события. А все остальное один в один так же как и то что описано в официальных источниках.

one_hp 22.02.2012 15:51

А не мог бы дописать пару строчек, чтобы в ie6 тоже работало?

Nekromancer 22.02.2012 16:09

one_hp,
не, лучше вы допишете пару строчек, чтоб на ваш сайт в ие6 не пускало.

one_hp 24.02.2012 07:16

С удовольствием бы сделал подобную ( http://habrahabr.ru/blogs/noie/80319/ ) заглушку для ie6, но к сожалению требования к сайту включают в себя совместимость со старыми браузерами :(

devote 24.02.2012 14:15

Цитата:

Сообщение от one_hp (Сообщение 159589)
С удовольствием бы сделал подобную ( http://habrahabr.ru/blogs/noie/80319/ ) заглушку для ie6, но к сожалению требования к сайту включают в себя совместимость со старыми браузерами :(

да чуть позже выложу с поддержкой ИЕ6

devote 24.02.2012 16:51

Добавил поддержку ИЕ6 в архиве два типа библиотеки, та что не подерживает ИЕ6 и та куда я добавил пару строк кода для поддержки ИЕ6

one_hp 27.02.2012 07:29

Спасибо большое :)

devote 02.03.2012 03:04

Обновил версию

devote 09.03.2012 02:04

Выпустил новую версию библиотеки, долгожданную вторую версию. Полностью переписанную. Читаем первый топик.

FINoM 14.03.2012 03:24

devote, чего на гитхаб не запилишь?

devote 14.03.2012 04:14

Цитата:

Сообщение от FINoM (Сообщение 162990)
devote, чего на гитхаб не запилишь?

Лень устанавливать под него софт, а с SVN он чего-то не хочет импортировать. http://home.spb-piksel.ru:8080/svn/history/trunk/

FINoM 14.03.2012 04:19

Цитата:

Сообщение от devote
Лень устанавливать под него софт

Э? Ставишь гит, настраиваешь и всё.


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