UIWebView使用小记

对webview 加载的文本中所有的网址变成可点击操作处理(我的方法:过滤所有的网址,然后变成html中的超链接形式如:<a href="http://www.baidu.com">www.baidu.com</a>),一开始没发现有属性可以设置,尝试了自己过滤html内容,发现自己过滤html中的内容时,标签对中的网址、以及一些图片显示的网址、或者输入习惯(多了空格,多了些字符等)会造成比较困难正确的把网址过滤,以及在替换时候会出错。忙活了一阵子。。。。(┬_┬)白白忙活了,还是做下网址过滤正则表达式的记录吧:

1.http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

2.((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\w]*))?)

3.(((ftp|https?):\/\/)(www\.)?|www\.)([\da-z-_\.]+)([a-z\.]{2,7})([\/\w\.-_\?\&]*)*\/?

4.(?i)\\b((?:https?://|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:‘\".,<>???“”‘’]))


妈蛋啊!!原来webview有属性可以实现过滤。。。。。对,没错,就是下面的属性。~~o(>_<)o ~~ 以后看属性得认真

dataDetectorTypes属性(需要检测的数据类型),可以使得webview文本中 电话,网址,地址等文本加上标识


如果上述属性已经设置了,还无法使用,可能是在html文本中加了屏蔽的属性

format-detection翻译成中文的意思是“格式检测”,顾名思义,它是用来检测html里的一些格式的,那关于meta的format-detection属性主要是有以下几个设置:

meta name="format-detection" content="telephone=no"
meta name="format-detection" content="email=no"
meta name="format-detection" content="adress=no" 
也可以连写:meta name="format-detection" content="telephone=no,email=no,adress=no"
下面具体说下每个设置的作用:
一、telephone

你明明写的一串数字没加链接样式,而iPhone会自动把你这个文字加链接样式、并且点击这个数字还会自动拨号!想去掉这个拨号链接该如何操作呢?这时我们的meta又该大显神通了,代码如下:

telephone=no就禁止了把数字转化为拨号链接!
telephone=yes就开启了把数字转化为拨号链接,要开启转化功能,这个meta就不用写了,在默认是情况下就是开启!

二、email

告诉设备不识别邮箱,点击之后不自动发送

email=no禁止作为邮箱地址!
email=yes就开启了把文字默认为邮箱地址,这个meta就不用写了,在默认是情况下就是开启!

三、adress

adress=no禁止跳转至地图!
adress=yes就开启了点击
地址直接跳转至地图的功能,在默认是情况下就是开启!



UIWebView在发送请求之前,都会调?用这个?方法,如果返回NO,代表停?止加载 请求,返回YES,代表允许加载请求

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

可用于监听上面所说的事件

[[[request URL] scheme]]isEqualToString:@"mailto"]--判断邮件地址

[[[request URL] scheme]]isEqualToString:@"tel"]--判断电话号码

[[[request URL] scheme]]isEqualToString:@"http"]--判断网址地址


默认标识长按有系统的调用,如何屏蔽呢

方法一、

<span style="font-family:KaiTi_GB2312;font-size:12px;">- (void)webViewDidFinishLoad:(UIWebView*)theWebView
{
 
        [self.webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitUserSelect='none';"];
     
        [self.webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitTouchCallout='none';"];
      
}
</span>

方法二、更安全的方式是,写html的时候加上以下代码,这样不管谁调用你的网页,长按链接都不会呼出弹窗框

<span style="font-family:KaiTi_GB2312;font-size:12px;"><script type="text/javascript">
        window.onload=function(){
            document.documentElement.style.webkitTouchCallout='none';
        };
</script></span>

更多操作webview:http://blog.csdn.net/zhaoweixing1989/article/details/13021513






郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。