如何使用UIWebView代理的shouldStartLoadWithRequest方法

4

我需要从UIWebView中显示的URL中删除超链接,我查看了这个问题:Removing hyper links from a URL shown in 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个回答

3

如果你想在第一页加载后禁用所有链接,可以添加一个属性来存储页面是否已被加载,并在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;
}

请注意,此方法不会隐藏链接,只是使 Webview 不加载它们。
同时,您可以在 webView:shouldStartLoadWithRequest:navigationType: 方法中检查 request.URL,以仅加载特定页面。另一种方法是检查 navigationType 值:
enum {
   UIWebViewNavigationTypeLinkClicked,
   UIWebViewNavigationTypeFormSubmitted,
   UIWebViewNavigationTypeBackForward,
   UIWebViewNavigationTypeReload,
   UIWebViewNavigationTypeFormResubmitted,
   UIWebViewNavigationTypeOther
};

2
当我打印出request.URL时,我得到了这个:about:blank?为什么会这样? - lakshmen
3
我认为这是因为你正在加载一个HTML文件而不是一个实际的网页。 - Marcelo
你的HTML文件有样式表吗?如果没有,我猜它不会工作。这个方法返回一个字符串;你可以打印它的值来帮助调试。 - Marcelo
也许在添加规则之前,您可以创建一个:https://dev59.com/l3RB5IYBdhLWcg3wv5tA - Marcelo
我正在从服务器获取一些数据。因此,这些数据是动态的->所以不能仅仅删除“a”标签。如何创建一个内联样式表? - lakshmen
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接