iPhone SDK: UIWebView, чтобы остановить загрузку / загрузку изображений - PullRequest
6 голосов
/ 25 февраля 2009

Как я могу использовать UIWebView в XCode, чтобы при загрузке страниц он НЕ загружал изображения (чтобы ускорить загрузку страницы)?

Ответы [ 4 ]

4 голосов
/ 08 мая 2009

UIWebView - это бледная, бедная маленькая тень полного WebView WebKit, для которой это легко. -webView:shouldStartLoadWithRequest:navigationType: вызывается только для навигации. Он не вызывается для каждого запроса, как WebPolicyDelegate для Mac. С UIWebView вот как я мог бы атаковать эту проблему:

Реализуйте -webView:shouldStartLoadWithRequest:navigationType: и установите для него всегда возврат NO. Но вы также примете запрос и создадите NSURLConnection. Когда NSURLConnection закончит извлечение данных, вы просмотрите все теги IMG и измените их в соответствии с любым заполнителем. Затем вы загрузите полученную строку в UIWebView, используя -loadHTMLString:baseURL:.

Конечно, разбор HTML не является тривиальной задачей на iPhone, и загрузчики Javascript доставят вам неприятности, так что это не идеальный ответ, но это лучшее, что я знаю.

1 голос
/ 17 декабря 2009

расширяется ответ Роба. Я заметил, что когда loadHTMLString: baseURL: и всегда возвращает NO, то webView: shouldStartLoadWithRequest: navigationType: просто продолжает вызываться (Я подозреваю, что loadHTMLString вызывает другой shouldStartLoadWithRequest).

так что я должен был чередовать возвращение ДА / НЕТ и я использовал NSScanner для анализа HTML и изменения src = "http: // ..." на src = ""

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if (pageHasNoImages==YES)
    {
        pageHasNoImages=FALSE;
        return YES;     
    }
    NSString* newHtml;
    NSString* oldHtml;
    NSData *urlData;
    NSURLResponse *response;
    NSError *error;
    urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    oldHtml=[[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];

    newHtml=[self.detail scannerReplaceImg:oldHtml]; // my own function to parse HTML
    newHtml=[self.detail scannerReplaceAds:newHtml]; // my own function to parse HTML
    if (newHtml==nil) 
    {
        NSLog(@"newHtml is nil");
        newHtml=oldHtml;
    }
    [oldHtml release];

    pageHasNoImages=TRUE;
    [web loadHTMLString:newHtml baseURL:request.URL];

    return NO;
}
0 голосов
/ 11 декабря 2009

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

или должен лиStartLoadWithRequest просто сначала загрузить текст HTML?

0 голосов
/ 25 февраля 2009

Будьте делегатом для UIWebView, затем перехватите вызов:

– webView:shouldStartLoadWithRequest:navigationType:

Проверьте значения navigationType в документации. Я верю, что вам лучше обслужится, вернув NO на navigationType == UIWebViewNavigationTypeOther.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...