Открываем любой инстраграм (например), тыкаем на любую фотку - ссылка в адресной строке браузера меняется. Это в JavaScript такое делается? Я в свои бородатые студенческие годы читал, что JavaScript такое не умеет делать по соображениям безопасности. Но видимо стандарты поменялись?
Сел наконец-то за эту штуку. Есть каталог. Когда нажимаешь на элемент - всплывает окно, адресная строка меняется например на /catalog/17. Закрываешь окно - адресная строка меняется обратно на /catalog/. Это всё работает. Ежели кому интересно как оно работает, то вот: Код (Javascript): // я использую плагин FancyBox 2 для всплывающих окон // после успешного аджакса по клику, контент выплёвывается во всплывающее окно $.fancybox({ content: result['html'], afterClose: function() { // при закрытии окна, возвращаемся в каталог window.history.pushState({nav:'popup'}, '', '/catalog/'); } }); // тут адресная строка меняется на /catalog/17 например window.history.pushState({nav:'popup'}, '', '/catalog/'+Id); А теперь вот в чём загвоздка. Если после закрытия всплывающего окна, нажать в браузере "назад", то ссылка поменяется на /catalog/17, но всплывающее окно естественно не откроется, потому что не было клик-эвента. Как с этим быть? Как поймать эвент изменения ссылки и повесить на него свою функцию? --- Добавлено --- Ещё аналогичная ситуация. Если открыть всплывающее окно, потом нажать "назад" в браузере, то ссылка меняется на /catalog/, но всплывающее окно не закрывается.
А как в том же Инстаграмме сделано доподлинно не известно? Загружать фронт-энд фреймворком из-за такой фигни не хотелось бы, попробую найти библиотеку.
Походу тут и плагин не нужен, вот то что я искал: http://stackoverflow.com/questions/...-changes-of-the-history-via-history-pushstate
@igordata Вообще ничего не надо. Вот весь код: Код (Javascript): window.onpopstate = history.onpushstate = function(e) { $('body').html(window.location.href); // тест }; Ловит именно нажатия в браузере вперёд-назад, но не когда ты вызываешь в скрипте window.history.pushState.
Короче у меня вот такая штука получилась. По-моему красота. Код (Javascript): window.onpopstate = history.onpushstate = function(e) { var uri = window.location.pathname; uri = uri.split('/'); uri.forEach(function(value, key, arr) { if (value == 'catalog') { var Id = parseInt(arr[key+1]); if (Number.isInteger(Id)) { alert(Id); } else { $('.fancybox-overlay').remove(); } return false; } }); };