Наверное, это своего рода продолжение темы» Различия в адаптации сайта и веб-приложения AJAX для iOS "и развитие идей от моего Комментарии там.
Тема старая, но для многих до сих пор актуальна.
В целом внутри будет много специфики, так как цель не придумать универсальное решение, а просто заставить один конкретный сайт работать как Web App, не прибегая к серьезным модификациям.
В общем, как обычно, на разрез идут те, кому интересно, остальные, наверное, проходят мимо.
Итак, обозначим вводные задачи и проблемы: нам нужно убедиться, что сайт (обычный, ничего особенного) работает как веб-приложение, не запрыгивая в Safari и не запоминая, на какой странице находился клиент и что он там делал.
Думаю, те, кто дочитал до этого момента, прекрасно знают, какие проблемы не позволяют сделать все вышеперечисленное, ничего не делая: любая нормальная ссылка открывается в Safari, если переключиться с Web App на другое приложение, или свернуть то, когда вы его откроете, будет показана страница, которая на самом деле была сохранена как веб-приложение — чаще всего основная.
В общем, сухие задачи: 1) сделать так, чтобы в Safari не выкидывались ссылки; 2) сделать занятие запоминающимся; 3) убедиться, что открытая страница запомнилась.
В отличие от исходной темы, я ставлю задачи именно в таком порядке; ниже будет понятно почему.
Поехали решать!
Ссылки не должны выдаваться в Safari
Этот вопрос уже давно обыгран и решен.Вам просто нужно поймать все клики по ссылкам в JS и преобразовать их в местоположение.
назначить() .
(Почему-то с давних времен вместо location.assign() везде использовалось присвоение window.location — не знаю, с чем это связано, наверное, так считалось более правильным, когда деревья были большими.
) В целом ничего нового я здесь не придумал, просто пришлось немного расширить: 1) это применимо только в автономном режиме; 2) если ссылка «внешняя» (с другим хостом), то она не применяется (открывается Safari); 3) если ссылка является анкором (#какая-то херня), то заменяется только location.hash. То есть вы включаете этот обработчик в автономном режиме, требуете, чтобы ссылка имела href, а затем отлаживаете его для конкретного случая.
Кода здесь не будет, потому что там одна строка и много деталей, которые никого не интересуют, потому что это не их детали.
Сеанс должен запомниться
Здесь сложнее.Проблема в том, что при перезапуске веб-приложения файлы cookie не отправляются; кукисов нет - сессия новая.
Тележка потерялась.
В общем, это плохо.
В исходной теме было решение с чтением и записью куки прямо из JS, но как я писал в комментариях - в современных реалиях это работает не очень хорошо - сессионный куки теперь httpOnly, то есть он не виден в JS ни в коем случае.
Решим немного по-другому: идентификатор будем хранить так же в localStorage, но сравнивать и управлять сессией будем со стороны сервера, а обрабатывать все это будем через ajax. В JS делаем что-то вроде этого (тоже только для автономного режима):
Теги: #веб-приложение #iOS #cookie #localstorage #session #разработка веб-сайтов #JavaScript #разработка iOS$.
post('/super-puper-server-script.json', {'sid': localStorage.getItem('sid')}, function(data) {
-
Неизбежность Краха Сложного Проекта
19 Oct, 24 -
Скоро Выйдет Ubuntu 7.10 (Gutsy Gibbon).
19 Oct, 24 -
Краткая Инструкция По Работе С Клиентами
19 Oct, 24 -
«Грот-М» — Армейский Штурман.
19 Oct, 24 -
Руби 1.9 Уже Здесь!
19 Oct, 24 -
«Вымпелком» Наградил Сотрудников
19 Oct, 24