2015-12-06 3 views
9

У меня есть мобильное приложение jQuery, которое я разрабатываю. jQuery Mobile использует pushState по умолчанию, чтобы позволить кнопке возврата браузера работать динамически.Включение кнопки «Назад» без внесения изменений вручную через URL-адрес

Теперь мое приложение предназначено для динамического изменения его страниц, и пользователь должен всегда приходить на первую страницу при загрузке приложения.

Проблема в том, что jQuery Mobile обновляет хэш страницы в URL-адресе всякий раз, когда я перехожу на страницу в приложении. Теперь, если пользователь вводит один и тот же хэш в приложении, jQuery Mobile автоматически перенесет их на эту страницу (когда я хочу, чтобы они обрабатывались моим кодом). Кроме того, если они обновляют страницу, я бы хотел, чтобы мой код возвращал их туда, где они должны быть, а не напрямую перемещается в хэш-адрес URL-адреса.

Чтобы предотвратить это, я пытался добавить следующий код в mobileinit событие:

$.mobile.hashListeningEnabled = false; 

Это работает, но это также отключает pushState обновления, которые, в свою очередь, ломает кнопку назад, что я не» Я хочу, чтобы это случилось.

Что было бы лучшим способом разрешить пользователям использовать кнопку «Назад», не позволяя вручную перемещаться между страницами?

+0

Вы вложили 100 своих представителей в этот вопрос; у вас есть два ответа, помогли ли вы решить вашу проблему? – Omar

ответ

6

Я не так много элементов, чтобы описать возможное и точное решение для вашей проблемы, но легко один должен быть этим:

по каждой ссылке на странице, которые принимают на другой прикрепить такую ​​функцию это:

$(DOMElem).on("click",function(){ 
    sessionStorage["urlChangedByLink"] = "true"; 
}); 

на этой же странице вы можете попробовать, если нет никаких проблем с этим:

$(window).on("navigate", function(event, data) { 
    if(sessionStorage["urlChangedByLink"] == "true") 
    $.mobile.hashListeningEnabled = true; 
    else 
    $.mobile.hashListeningEnabled = false; 
}); 

Или это на другой странице вы проверить, если это variabl хранения е exsist и чем сделать вашу работу:

if(sessionStorage["urlChangedByLink"] == "true") 
    continue navigation... 
else 
    window.history.back(); 
+0

отличное предложение Emanuele! Я использовал localStorage в прошлом, чтобы помочь мне в моих проблемах с навигацией. Мне пришлось перемещаться по каталогу, поэтому я сохранил 3-значный код для района, поэтому я всегда знал, где я был! –

+0

Не должно быть места, где вы установите для параметра sessionStorage ["urlChangedByLink"] значение false? в противном случае это будет всегда верно. Я думаю, в конце окна navigate handler мы должны установить его в false. –

+0

Неверный. Это не распространяется на обновление текущей страницы и доступ к страницам вручную с помощью хэша. Интересно, почему пользователи полностью игнорируют ответ. – Omar

0

один вариант здесь должен установить data-url для каждого из ваших страниц, которые вы просто добавить атрибут к странице div и установите его равным вашей домашней странице этак URL для страница, отображаемая в истории, не имеет хэш-значений (или вы можете указать свои собственные значения). документация по этому вопросу лучше поясняется in the jquery mobile documentation

Смежные вопросы