Таким образом, суть в том, что iOS добавила свою собственную безопасность в API истории, что означает, что вы не можете использовать скрипт для изменения URL. Только действие пользователя может разрешить API истории изменять URL-адрес - то есть щелчок - как в примере с Aral.
Обходной путь - использовать хеш (идентификатор фрагмента) в URL.
Вместо history.pushState
мы просто изменим местоположение:
var i = 0;
var locationUpdateInterval = setInterval(function(){
window.location.hash = i;
i++;
}, 1000);
Чтобы зафиксировать событие, когда что-то меняет это местоположение в приложении iOS или если они имеют постоянную ссылку на определенную страницу / панель в вашем приложении:
// named function on purpose for later
function hashchange() {
var pageId = location.hash.substr(1); // drop the # symbol
// do something with pageId
}
window.onhashchange = hashchange;
// onload - if there's a hash on the url, try to do something with it
if (location.hash) hashchange();
Довольно плохо, что мы не можем использовать pushState
/ popState
на iOS, но это та же безопасность, что и невозможность запуска полноэкранного видео, если пользователь не инициирует действие, которое аналогично загрузке видео или аудиоконтент на iOS - вы не можете его написать, пользователь должен запустить его (так или иначе).
Так же, как примечание об Android - проблемы очень похожи, так что это (должно) также работать в качестве обходного пути для Android.
Если вам нужна поддержка рабочего стола, большинство браузеров поддерживают onhashchange
, но, как вы уже догадались, IE отстает - так что вы можете заполнить этого плохого парня (хотя требует jQuery ...): http://benalman.com/projects/jquery-hashchange-plugin/
Надеюсь, это поможет.