Клуб API Карт

Сохранение состояния карты в URL

Пост в архиве.

У вас есть пример http://api.yandex.ru/maps/doc/jsapi/2.x/examples/savemap.html
Как его допилить, чтобы он реагировал не только на смещение карты, но и на правку самого урла? Скажем, если юзер хочет из адресной строки поменять координаты центра карты или зум. Тогда я думаю и backspace станет работать, а то сейчас урл хоть и меняется, а забой не работает.

АПД спасибо qfox за ответ!, вот что в итоге получилось:

чтобы реализовать отклик карты на изменение урла и перемещение по истории, следует, всего лишь! добавить эту строчку:

$(window).on('hashchange', function() { setMapStateByHash(); }); //jquery должен быть подключён

9 комментариев
Алексей Yarrr!
28 января 2016, 01:15

Нужно завязываться на событие самого браузера и передавать его в апи. Апи не может ничего знать про урлы, формат данных координат, и т.д. Другими словами — вашу бизнес логику придется писать самому.

Копать в эту сторону: $(window).on('hashchange', function() { console.log(window.hash); map.panTo(coods); }); и coords нужно выбрать из window.location.hash. Если не используете jquery — уточните, какой фреймворк у вас, подскажем как быть

Спасибище!!! написал так:

$(window).on('hashchange', function() { setMapStateByHash(); });

Не хотел я jquery подключать, но без него походу никак это не реализовать. Зато теперь и backspace работает!

Можно посмотреть пример с HTML5 History API

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

 

в этом примере немного не по фен шую, урл кодируется, запятые и решётка конвертируются..

JFYI

Запятые как раз должны конвертироваться согласно rfc-1738

Подробнее можно прочитать хотя бы на w3schools

я так понимаю, что при передаче url от браузера -> сайт, он кодируется, но при этом в адресной строке выглядит некодированным. и только если его явно в адресную строку вставить закодированным, то адрес таким и останется, что в примере выше и происходит.

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

правильно я понимаю?

Броузеры сами декодируют урлы, чтобы они выглядели человеко-понятно.

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

Для примера можно попробовать поискать в Яндексе слово по-русски, и скопировать урл, а затем вставить его в новом окне.

У меня отображается незакодированным, а вставляется закодированным

Алексей Yarrr!
28 января 2016, 01:15

Вы же можете менять запятую на плюс, почему нет?