首页 > 代码库 > iPhone开发-点击UIWebView的链接地址时,更改链接地址
iPhone开发-点击UIWebView的链接地址时,更改链接地址
缘起
在开发的时候,有时会需要加载很多webview,当然webview的内容即可以是本地的html也可以是远端服务器的内容,随需求而选择需要用哪一种。
前两天因为开发的需要,需要将一个应用A,转换成一个新应用B,A和B中大部分功能是相同的,只是B中加了些新功能,所以B的代码是基于A的基础上添加的。A中有些功能需要调用webview,点击webview中的某些超链接会跳到A中的相应的页面,例如超链接的地址是a://app?gocontrol1。这样问题就来了(当然不是学挖掘机哪家强?),当用户在B应用的webview中点击该超链接时会怎么样呢?答案是如果该手机装了A应用,则会跳到A应用,如果没装则跳到B指定的页面,应用乱跳了,这可不是咱们想要的结果。那怎么办呢?最直接的办法是改服务端的网页内容,将所有的超链接地址a://**改为b://**,但是如果这样的webview如果少就直接改了(即直接通过服务器判断A或B之后返回A或B的内容),但是这样的界面有10多个,如果改,会增加服务器端很大的工作量,老大经过思索,决定还是改B客户端的代码,将B的webview中点击后的超链接的地址由a://**转换为b://**,这样就可以通过最少的人力达到想要的效果。
实施
在UIWebView中点击某个超链接时,希望改变超链接的地址(当然这是比较非常规的操作,但是有些妙招有时会节省很多时间)。想要监听UIWebView中的超链接的事件,首先得设置UIWebView的delegate为当前的Controller,即
myBWebView.delegate = self;
之后找到UIWebView的点击超链接的回调
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {}之后在该回调中取出超链接的地址
NSURL *url = request.URL;
因为超链接中可以有其他非跳转到本应用页面的链接地址,例如http://www.baidu.com什么的,所以需要找出以a://**的超链接地址
if ([[url scheme] isEqualToString:@"aichang"]) {}获取到了超链接地址了,下一步就是改变url的scheme,使之变成b,代码如下
NSString *newUrlString = [NSString stringWithFormat:@"b://%@%@", url.host, url.path]; if (url.query) { newUrlString = [newUrlString stringByAppendingFormat:@"?%@", url.query]; } url = [NSURL URLWithString:newUrlString];
好了,新的url就是咱们需要的的url了,全程代码整理如下:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { // Determine if we want the system to handle it. NSURL *url = request.URL; if ([[url scheme] isEqualToString:@"a"]) { NSString *newUrlString = [NSString stringWithFormat:@"b://%@%@", url.host, url.path]; if (url.query) { newUrlString = [newUrlString stringByAppendingFormat:@"?%@", url.query]; } url = [NSURL URLWithString:newUrlString]; if ([[UIApplication sharedApplication]canOpenURL:url]) { [[UIApplication sharedApplication]openURL:url]; return NO; } } return YES; }
尾声
以正合,以奇胜。改服务器端的网页内容是最直接的方法,但是代价也有些大,直接改客户端点击后的链接地址,快捷方便简单,何乐而不为呢?如果有其他的意见,欢迎讨论。
iPhone开发-点击UIWebView的链接地址时,更改链接地址