Кадр манифеста html5 в UIWebView?

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

Я настроил образец, который, как мне кажется, соответствует спецификациям и, похоже, работает в Safari 4 и мобильном safari, но не в UIWebView моего приложения.

Образец html настроен по адресу http://bynomial.com/html5/clock3.html .

Это очень похоже на образец, представленный в стандарте HTML5 draft standard .

Вот весь (не шаблонный) код примерного приложения, которое я использую для тестирования:

 - (void)applicationDidFinishLaunching:(UIApplication *)application { // I thought this might help - I don't see any difference, though. NSURLCache* cache = [NSURLCache sharedURLCache]; [cache setDiskCapacity:512*1024]; CGRect frame = [[UIScreen mainScreen] applicationFrame]; UIWebView* webView = [[UIWebView alloc] initWithFrame:frame]; [window addSubview:webView]; NSString* urlString = @"http://bynomial.com/html5/clock3.html"; NSURL* url = [NSURL URLWithString:urlString]; NSURLRequest* request = [NSURLRequest requestWithURL:url]; [webView loadRequest:request]; [window makeKeyAndVisible]; } 

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

Любые идеи о том, как заставить это работать?

Я получил это для работы с использованием файла .manifest в UIWebView. Я обнаружил трюк на форумах разработчиков Apple.

вы должны предоставить надлежащий тип mime для файла манифеста: он должен иметь тип «text / cache-manifest» – если это что-то еще, тогда вы не будете кэшировать свои файлы.

вы можете использовать веб-сниффер в http://web-sniffer.net/, чтобы посмотреть заголовки, возвращенные вашим сервером.

если вы используете файлы .htaccess на своем веб-сервере, добавьте следующую строку в файл .htaccess:

 AddType text/cache-manifest .manifest 

убедитесь, что очистили кеш браузера после внесения этого изменения, чтобы увидеть эффект.

HTH Mark

edit: это поддерживается только для iOS 4.0 и более поздних версий. Вам нужно будет реализовать свой собственный механизм кеширования для iOS 2.x и 3.x 🙁

Вы можете использовать параметр cachePolicy для NSURLRequest.

 request = [NSURLRequest requestWithURL:[NSURL URLWithString:reqString] cachePolicy:NSURLRequestReturnCacheDataDontLoad timeoutInterval: 10.0]; 

описанных здесь .

UIWebView не может (или не будет) использовать HTML5 appcache. Они просто этого не делают. Возможно, в iPhone OS 4.0.

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

Однако нет супер простого «просто работает», чтобы это произошло.

Вы пытались создать настраиваемый объект NSURLCache и использовать метод setSharedURLCache:, как рекомендовано в документации:

«Приложения с более конкретными потребностями могут создать пользовательский объект NSURLCache и установить его как общий кеш-экземпляр с помощью setSharedURLCache:

У меня была та же проблема. Хотя я использовал:

 [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30.0]; 

Кажется, он не хотел использовать кэшированные данные. Это означает, что он постоянно запрашивал мой веб-сервис для получения последнего контента и, таким образом, делал кеширование бесполезным.


Я нашел работу. При загрузке URL-адреса в UIWebView используйте следующий код:

 NSString *html = [NSString stringWithFormat:@"", [[currentURLRequest URL] absoluteString]]; [self.webView loadHTMLString:html baseURL:nil]; 

Это было протестировано на OS 4.2, так как я использую манифест для обработки кэширования (HTML5). Существует большая вероятность, что он не будет работать на OS 2.x / 3.x, это нужно подтвердить.

Недостатки использования этого метода заключаются в том, что вы не можете отправлять данные POST с вашим запросом.

Надеюсь, это поможет кому угодно.


Вам все равно нужно отправить запрос с помощью «cachePolicy: NSURLRequestReturnCacheDataElseLoad», иначе он все равно не будет работать.

  • iPhone UIWebview: как заставить цифровую клавиатуру? Является ли это возможным?
  • Получить текущий URL-адрес UIWebView
  • как увеличить размер шрифта в UIWebView
  • Остановить UIWebView от «подпрыгивания» по вертикали?
  • Клавиатура не отображается при нажатии текстового поля в UIWebView
  • Возвратитесь к поведению приложения после разговора по телефону в собственном коде, чем UIWebView
  • Как вызвать метод Objective C из Javascript и отправить данные в Javascript в iOS?
  • UIWebView не изменяет размер при изменении ориентации?
  • iPhone UIWebView локальных ресурсов с использованием Javascript и обработки onorientationChange
  • UIWebView: когда страница действительно заканчивала загрузку?
  • iPhone - UIWebview - Получите URL-адрес ссылки, нажатой
  • Давайте будем гением компьютера.