Использование pushState/replaceState для изменения URL-адреса в jQuery-Mobile

Я хотел бы динамически изменить URL-адрес моей страницы jQM (когда пользователь выполняет какое-либо действие), чтобы изменить строку запроса. Использование history.pushState работает нормально, но когда jQM пытается добавить хэш к URL-адресу, например, при переходе к диалоговому окну, все работает не так, как ожидалось: URL-адрес возвращается к своему исходному значению, а jQM добавляет к нему хэш (не чтобы упомянуть, что ошибка возникает, когда я пытаюсь закрыть диалоговое окно).

Я просмотрел документы jQuery Mobile и, насколько я понял, исходный URL-адрес страницы хранится в атрибуте data-url элемента data-role="page". Поэтому я также пытался изменить это всякий раз, когда мне нужно изменить свой URL-адрес, но он все равно возвращается к исходному, когда открывается диалоговое окно.

Проверьте этот JS Bin для примера: http://jsbin.com/egunif/5/edit

При нажатии кнопки «Диалог» URL-адрес изменяется (вместе с атрибутом data-url), а затем открывается диалоговое окно. Вы можете видеть, что URL-адрес ненадолго меняется на egunif/hashtest, прежде чем jQM изменит его на egunif/5#&ui-state=dialog.

Итак, кажется, что исходный URL-адрес хранится где-то еще, вопрос в том, где? И можно ли изменить этот URL, чтобы не было конфликтов, когда jQM вносит в него изменения хэша?

Спасибо!


person Alejo    schedule 21.08.2012    source источник


Ответы (1)


В итоге я просто вернул исходное значение URL-адреса всякий раз, когда я меняю страницу на диалоговое окно (в обработчике pagebeforechange), а затем повторно заменяю его новым значением при возвращении на страницу (в обработчике pagechange) .

Я все еще получаю сообщение об ошибке в консоли отладки браузера из-за пустого хеш-значения (возможно, что-то связанное с эта проблема), но она не влияет на функциональность сайта, поэтому я пока оставлю ее. Я все еще открыт для лучших предложений, хотя!

Обновление:

В финальной версии jQM 1.2.0 были представлены всплывающие окна, а также возможность отключить изменение хэша, установив data-history="false" во всплывающих окнах. Заменив все мои диалоги всплывающими окнами, я могу манипулировать URL-адресом, не беспокоясь о конфликте с jQM.

person Alejo    schedule 23.08.2012