Как использовать метод shouldStartLoadWithRequest в UIWebView Delegate

Мне нужно удалить гиперссылки из URL, показанного в UIWebView, и я посмотрел на этот вопрос: удаление гиперссылок из URL, показанного в UIWebView.

Я знаю, что мне нужно использовать этот метод:

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

Но у меня все еще есть проблемы.

Во-первых, как мне избежать только определенных ссылок (например: www.google.com).

Далее, как мне избежать всех ссылок в моем UIWebView?

Мой код выглядит так:

[webUI loadHTMLString:[strDescription stringByDecodingHTMLEntities] baseURL:nil];
webUI.dataDetectorTypes = UIDataDetectorTypeNone;

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSLog(@"finish loading");

    [webUI stringByEvaluatingJavaScriptFromString:@"document.styleSheets[0].addRule(\".active\", \"pointer-events: none;\");document.styleSheets[0].addRule(\".active\", \"cursor: default;\")"];

}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
       return YES;
}

Нужно некоторое руководство. Спасибо..

HTML-строка выглядит так:

> <div style="font-family: Helvetica"><div style="color: #FFFFFF;"><div
> style="font-family: Helvetica;"><p><span style="font-size:
> 24px;"><strong>Optimal Performance Always</strong></span><span
> style="font-size: 18px;"><br /></span></p><p><span style="font-size:
> 18px;">The standard servicing package<a
> href="http://www.google.com">www.google.com</a></div>

1 ответ

Если вы хотите отключить все ссылки после загрузки первой страницы, вы можете добавить свойство для хранения, если страница была загружена, и использовать его значение в webView: shouldStartLoadWithRequest:

@property(nonatomic) BOOL pageLoaded; // initially NO

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSLog(@"finish loading");

    [webUI stringByEvaluatingJavaScriptFromString:@"document.styleSheets[0].addRule(\".active\", \"pointer-events: none;\");document.styleSheets[0].addRule(\".active\", \"cursor: default;\")"];

    // after all your stuff
    self.pageLoaded = YES;
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
   return ! self.pageLoaded;
}

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

Кроме того, вы можете проверить request.URL в webView:shouldStartLoadWithRequest:navigationType: чтобы загрузить только определенные страницы. Другим способом было бы проверить значение navigationType:

enum {
   UIWebViewNavigationTypeLinkClicked,
   UIWebViewNavigationTypeFormSubmitted,
   UIWebViewNavigationTypeBackForward,
   UIWebViewNavigationTypeReload,
   UIWebViewNavigationTypeFormResubmitted,
   UIWebViewNavigationTypeOther
};
Другие вопросы по тегам