html5 appcache: работает ли файл удаленного манифеста? - PullRequest
2 голосов
/ 11 августа 2011

Наше приложение развернуто на физическом устройстве, поэтому начальная страница index.html находится в хранилище устройства, и этот файл будет ссылаться на удаленно размещенные файлы JavaScript и другие ресурсы.То есть сам index.html не размещается на нашем веб-сервере.Можно ли использовать кеш приложения html5 в этом сценарии?То есть элемент html будет выглядеть так:

<html manifest="http://remotehost.com/site.manifest">

Поддерживается ли это?Или есть обходной путь, чтобы это работало, если наш веб-сервер не содержит index.html?

Спасибо!

1 Ответ

4 голосов
/ 19 мая 2012

Проверьте этот сайт на предмет основных требований и ограничений: http://appcachefacts.info/

Есть несколько вещей, которые мешают работе кэша приложений при развертывании файлов в хранилище устройства:

  • Cross-Origin-Policy: вы ссылаетесь на файл манифеста из другого источника -> не разрешено
  • WebKit: я предполагаю, что ваш WebView, отображающий index.html, работает на основе WebKit (iOs / Android).Я провел несколько тестов с Safari и Chrome на настольном ПК и выяснил, что манифест игнорируется, если index.html подается с URL-адресов http://localhost или file://..., даже если манифест соблюдает Cross-Origin-Policy.Это поразит вас, так как локально развернутый index.html на вашем устройстве будет обслуживаться file://... в большинстве случаев.

Поэтому мне пришла в голову идея загрузить манифест на устройство и сослаться на него.в моем index.html.Это приводит к некоторым дополнительным проблемам, которые мне не удалось устранить (мои настройки были PhoneGap, jQueryMobile, iOS):

  • Mime-Type: вы не можете гарантировать, что манифест (подается с устройствахранилище) с правильными заголовками MIME-типа, но без них браузер будет игнорировать манифест.
  • Manifest-URI: Вы не можете (жестко закодировать) распространять файл index.html с предопределеннымmanifest="uri/to/appCacheManifest.manifest" атрибут (потому что вам нужно скачать и сохранить его с вашего сервера, прежде чем вы узнаете этот URI).Кроме того, вы не можете манипулировать своими активами, распространяемыми с помощью приложения PhoneGap (папка www), чтобы каким-либо образом изменить атрибут.

До сих пор я не мог заставить манифест работать в PhoneGap WebView.Я читал некоторые статьи, где люди упоминали (iOS), что WebView не может работать с файлами манифеста, но это не правильно.Если вы переходите к веб-приложению через мобильный браузер и сохраняете закладку на главном экране, iOS встраивает этот сайт в WebView.Я попробовал это с моим приложением (обслуживаемым веб-сервером; не встроено в PhoneGap), и манифест работал просто отлично.

Это означает, что если вы можете перемещать файлы, которые «находятся в хранилище устройства»"для веб-сервера, и вы настроили собственный WebView для указания на это местоположение, манифест должен работать нормально.

...