2010-04-08 2 views
3

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

Веб-страница сильно связана с веб-сайтом с ASP.NET и AJAX (для этого требуются внешние файлы), поэтому я не думаю, что это возможно, чтобы загрузить HTML-строку.

Я хочу, чтобы изображения полностью не загружались. Итак, как я блокирую их? Измените код HTML как его загрузку каким-либо образом или заблокируйте изображения от загрузки?

ответ

2

У меня есть 3 мысли.

  1. использовать прокси-сервер для фильтрации HTML-
  2. фильтр HTML, сами по скачивании это первый
  3. Просто загрузите HTML и загрузить его с помощью файла: // URL. Это наиболее вероятно предотвратить ссылки изображения от разрешения - хотя это будет оставить некрасивые квадраты везде
+0

Проблема состоит в том, что это серия динамически загружаемых страниц, которые имеют контент, основанный на том, что было введено на предыдущих страницах. Таким образом, загрузка их и их связь не является вариантом. –

+0

Тогда я бы использовал фильтрующий прокси - его очень похоже на использование блока объявлений в вашем веб-браузере – sylvanaar

+0

, как бы я мог реализовать это? –

1

Делегат подход UIWebView не работает, вы правы! новый ответ:

Правильно, вам нужно идти на один уровень глубже, чтобы поймать NSURLRequest, исходя из UIWebView. Вы имеете в виду блог использует NSURLCache, и я думаю, что это хорошая стартовая точка:

ли вы пытаетесь подкласс NSURLCache, а затем переопределить -(NSURLCacheResponse*) cachedResponseForRequest:(NSURLRequest*) request

Если вы хотите, чтобы избежать запроса вам нужно что-то вернуть (как NSURLCachedResponse). Вы можете, например, получить изображение, которое статически определено в вашем приложении (возможно, PNG с размером 0,0).

Если вы вернетесь nil, запрос будет выполнен.

Я использую этот подход, чтобы заставить UIWebView заполнить локальный кеш. Смотрите мой ответ Детальные об этом здесь:

How to save the content in UIWebView for faster loading on next launch?


Неправильный первый ответ:/

Добавить себя в качестве делегата на UIWebView (UIWebViewDelegate).

Для каждого изображения, что UIWebView попытки загрузки, то delagate получает следующую функцию обратного вызова вызывается:

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

Просто проверить, если запрос связан с изображением, которое вы хотите, чтобы избежать для загрузки.В таком случае просто верните NO в этот обратный вызов: изображение не будет загружено в UIWebView.

Используя этот подход, никаких изменений не требуется на стороне сервера.

+0

Я пробовал это, но он вызывает это только при загрузке самой страницы. Ни один из элементов страницы не проходит (изображения, JS, CSS ...) –

+0

Вы правы, я описал другой подход в ответе. Приветствия. – yonel

+0

Ваш ответ верен. Мое требование - когда любая загрузка url в webview отображает только текст, а не изображения. как я могу получить URL-адрес IMAGE в запросе webview и STOP его –

0

Я хотел бы предложить еще один вариант, чтобы попробовать:

webView:shouldStartLoadWithRequest:navigationType: не используя делегата в WebView, чтобы вернуть NO, когда он попытается загрузить изображение.

+0

ваш ответ верен. Мое требование - когда любая загрузка url в webview отображает только текст, а не изображения. как я могу получить URL-адрес IMAGE в запросе webview и остановить его. –

0

Вы можете использовать следующую строку кода, всякий раз, когда вы хотите остановить загрузку webView.

[webView stopLoading];