标签:blog class c code java tar
转自:http://www.cocoachina.com/applenews/devnews/2013/0105/5473.html
最近做了浏览器的项目,和UIWebView大了不少交道,所以专门开个帖子讲讲相关内容吧,想到什么就更新什么。
基础篇:
NSURL介绍 http://blog.csdn.net/ysy441088327/article/details/7416759
网页执行js代码
1 stringByEvaluatingJavaScriptFromString
这个方法是让一切成为可能的关键,有了这个方法,才能对网页进行各种操作。我自己没有做过网页开发,所以对js不熟悉,只用了一些最常用的js,如果非常熟悉的话应该能做更多的事。
从网页获取URL:
1 - (NSURL*)url
2
{
3 NSString *urlString = [self
stringByEvaluatingJavaScriptFromString:@"location.href"];
4
if (urlString)
{
5 return
[NSURL URLWithString:urlString];
6
} else {
7
return nil;
8
}
9 }
从网页获取标题:
1 - (NSString*)title
2
{
3 return [self
stringByEvaluatingJavaScriptFromString:@"document.title"];
4
}
网页的滚动位置:
1 - (CGPoint)scrollOffset
{
2 CGPoint
pt;
3 pt.x = [[self
stringByEvaluatingJavaScriptFromString:@"window.pageXOffset"]
integerValue];
4 pt.y = [[self
stringByEvaluatingJavaScriptFromString:@"window.pageYOffset"]
integerValue];
5 return
pt;
6 }
网站的图标Icon下载地址:
1 NSURL *url = [[NSURL alloc] initWithScheme:[web.request.URL
scheme] host:[web.request.URL host] path:@"/favicon.ico"];
1 +(BOOL)isValidWebUrl:(NSURL
*)url
2 {
3
BOOL valid = NO;
4
5 if (url)
{
6 if
(!url.scheme.length)
{
7
url = [NSURL URLWithString:[@"http://"
stringByAppendingString:url.absoluteString]];
8
}
9 if (url.host.length)
{
10 NSString * regex =
@"^([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?[
wind_phpcode_5
]quot;;
11
NSPredicate * pred = [NSPredicate
predicateWithFormat:@"SELF MATCHES %@",
regex];
12
if ([pred evaluateWithObject:url.host])
{
13
valid =
YES;
14
}
15
}
16
}
17 return valid;
18
}
判断url是否相同:
只是上面2个还不够,有些网页的_blank不是写在链接上的,而是全局都是_blank,所以再补上下面的部分才行
1 function MyIPhoneApp_isBlankInBaseElement()
{ var baseElements =
document.getElementsByTagName(‘base‘);
2
if(baseElements.length >
0){
3
if(baseElements[0].getAttribute(‘target‘) ==
‘_blank‘){
4
return ‘yes‘;
5
}
6 }
7 return
‘no‘;
8 }
1 -(UIScrollView
*)getWebScrollView{
2 UIScrollView*
scroll = nil;
3
4
5 if ([self
respondsToSelector:@selector(scrollView)])
{
6 scroll
= [self scrollView];
7
}else{
8
for (UIView* view in [self subviews])
{
9
if ([view isKindOfClass:[UIScrollView class]])
{
10
scroll =
(UIScrollView*)view;
11
break;
12
}
13
}
14
}
15 return
scroll;
16 }
然后把设置delegate,实现scrollViewDidScroll方法
1 -(void)scrollViewDidScroll:(UIScrollView
*)scrollView{
2
3
4 CGPoint
contentOffset =
scrollView.contentOffset;
5
6
CGFloat threshold = self.topBar.frame.size.height; //
topBar就是webview上面的地址栏
7
8
if(contentOffset.y>=-threshold &&contentOffset.y<=480 ) //
480设置得有些大了,这里是为了防止快速滑动的时候回调会跟不上,
9
{
10
self.topBar.frame = CGRectMake(0,-threshold-contentOffset.y, 320,
self.topBar.frame.size.height);
11
}
12 else
if(contentOffset.y<-threshold){
13
self.topBar.frame = CGRectMake(0, 0, 320,
self.topBar.frame.size.height);
14
}
15 }
停止和播放网页上的视频:
iPad上在网页里播放视频,即使关掉webView,依旧余音绕耳,调用下面的js可以停止播放
1 function stopVideo(){ var
videos =
document.querySelectorAll("video");
2
for (var i = videos.length - 1; i >= 0;
i--){
3
videos.pause();
4
};
5 return
‘stop‘;
6 }
离线缓存网页:
http://re-reference.iteye.com/blog/1391408网页加载进度不靠谱模拟:
一般情况下,加载一个网页会经历should->start->finish3个阶段。仔细看UIWebViewDelegate的文档,会发现这里的delegate针对的是每个frame,也就是说如果网页由多个frame组成的话会有多个start。那么这里的finish也会被调用多次,所以仅靠finish是无法判断网页是否加载完全的。
事实是,加载任意网页,srart和finish/fail是配对的,也就是说有多少个start就有多少个finish/fail。所以在start做count++,finish/fail做count-
-,为0的时候就是一个网页加载完毕了。
不过别高兴太早,加载完毕不代表网页渲染完毕,所以在最后还需要做一个延时操作,以确保网页确实显示出来了。
好了,现在网页开始和网页结束都找到了,但中间过程仍然是个谜,只能不靠谱模拟了。
原帖地址:http://www.cocoachina.com/bbs/read.php?tid=123113
关于UIWebView的一些事---转载,布布扣,bubuko.com
关于UIWebView的一些事---转载
标签:blog class c code java tar
原文地址:http://www.cnblogs.com/lisaloveyou1900/p/3738154.html