下午在做 UIWebView 时,有一个需求,需要获取用户点击 HTML 的 a 标签时进行判断点击的链接是否有效并做对应的处理。本来打算使用 OC 与 js 交互实现,但后来发现一个实用的方法,记录一下。
UIWebView 有一个可选的代理方法:- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
当用户点击 HTML 的 a 标签时,默认是在当前的 WebView 进行下一级跳转的,由于跳转是在 UIWebView 的下一级打开的,iOS 端返回时体验很差。
所以需求来了,当用户点击 a 标签时,判断 a 标签的内容是不是有效的 http 网页地址。如果是,点击后新开一个页面进行加载;如果不是,则请求新的跳转地址进行新开页面加载。
在上边展示的代理方法里进行实现,可以判断用户的点击行为,主要有以下几个状态:
typedef NS_ENUM(NSInteger, UIWebViewNavigationType) { UIWebViewNavigationTypeLinkClicked, UIWebViewNavigationTypeFormSubmitted, UIWebViewNavigationTypeBackForward, UIWebViewNavigationTypeReload, UIWebViewNavigationTypeFormResubmitted, UIWebViewNavigationTypeOther } __TVOS_PROHIBITED;
|
当用户点击 a 标签时,即 navigationType == UIWebViewNavigationTypeLinkClicked
时,判断 a 标签内容并进行下一步的操作,代码如下:
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { if (navigationType == UIWebViewNavigationTypeLinkClicked) { NSURL *url = [request URL]; NSString *curUrl= [url absoluteString]; NSString *str = [curUrl substringToIndex:4]; if ([str isEqualToString:@"http"]) { return NO; }else{ } } return YES; }
|
微信扫一扫,向我赞赏
支付宝扫一扫,向我赞赏