基础篇:

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"];

调整webView里的字体大小
http://www.cocoachina.com/bbs/read.php?tid=29707

判断网页URL是否合法(自己写的,未经过大量验证):

 

复制代码

  1. +(BOOL)isValidWebUrl:(NSURL *)url
  2. {
  3. BOOL valid = NO;
  4. if (url) {
  5. if (!url.scheme.length) {
  6. url = [NSURL URLWithString:[@"http://" stringByAppendingString:url.absoluteString]];
  7. }
  8. if (url.host.length) {
  9. NSString * regex        =  @"^([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?[    wind_phpcode_5    ]quot;;
  10. NSPredicate * pred      = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
  11. if ([pred evaluateWithObject:url.host]) {
  12. valid = YES;
  13. }
  14. }
  15. }
  16. return valid;
  17. }

判断url是否相同:
NSURL的isEqual方法不太好用。最常见的问题是http://www.google.comhttp://www.google.com/会判断不同,原因是苹果在这里没有遵循RFC2616规则做网址对比,所以最好自己判断下最后的斜杠

加载本地html的css和图片:
基本上就是加载本地文件的url就可以了,但如果是有外部的css和图片等资源,记得拖资源的时候记得要选择下面的create folder references for any added folder,不要选group,这样才能获得正确的路径关系。

提高篇:

这里直接引用一个国外博客,先放着,日后再翻译

自定义网页上的长按弹出菜单:
http://www.icab.de/blog/2010/07/11/customize-the-contextual-menu-of-uiwebview/

网页内关键字搜索与高亮:
http://www.icab.de/blog/2010/01/12/search-and-highlight-text-in-uiwebview/

自动根据网页打开新标签和新窗口:
http://www.icab.de/blog/2009/07/27/webkit-on-the-iphone-part-1/
http://www.icab.de/blog/2009/08/05/webkit-on-the-iphone-part-2/
只是上面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. }

清除UIWebVIew的内存占用和泄露:
http://www.codercowboy.com/code-uiwebview-memory-leak-prevention/

地址栏随着网页下拉移动,类似safari:
先拿到webView的scrollView,如果5.0以下就用靠循环去找了

 

复制代码

  1. -(UIScrollView *)getWebScrollView{
  2. UIScrollView* scroll = nil;
  3. if ([self respondsToSelector:@selector(scrollView)]) {
  4. scroll = [self scrollView];
  5. }else{
  6. for (UIView* view in [self subviews]) {
  7. if ([view isKindOfClass:[UIScrollView class]]) {
  8. scroll = (UIScrollView*)view;
  9. break;
  10. }
  11. }
  12. }
  13. return scroll;
  14. }

然后把设置delegate,实现scrollViewDidScroll方法

 

复制代码

  1. -(void)scrollViewDidScroll:(UIScrollView *)scrollView{
  2. CGPoint contentOffset = scrollView.contentOffset;
  3. CGFloat threshold = self.topBar.frame.size.height; // topBar就是webview上面的地址栏
  4. if(contentOffset.y>=-threshold &&contentOffset.y<=480 )  // 480设置得有些大了,这里是为了防止快速滑动的时候回调会跟不上,
  5. {
  6. self.topBar.frame = CGRectMake(0,-threshold-contentOffset.y, 320, self.topBar.frame.size.height);
  7. }
  8. else if(contentOffset.y<-threshold){
  9. self.topBar.frame = CGRectMake(0, 0, 320, self.topBar.frame.size.height);
  10. }
  11. }

停止和播放网页上的视频:
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的时候就是一个网页加载完毕了。 不过别高兴太早,加载完毕不代表网页渲染完毕,所以在最后还需要做一个延时操作,以确保网页确实显示出来了。
好了,现在网页开始和网页结束都找到了,但中间过程仍然是个谜,只能不靠谱模拟了。

UiwebView and html的更多相关文章

  1. AFNetworking 3.0 源码解读(十一)之 UIButton/UIProgressView/UIWebView + AFNetworking

    AFNetworking的源码解读马上就结束了,这一篇应该算是倒数第二篇,下一篇会是对AFNetworking中的技术点进行总结. 前言 上一篇我们总结了 UIActivityIndicatorVie ...

  2. ios UIWebView自定义Alert风格的弹框

    之前开发过一个App,因为公司之前写好了网页版的内容和安卓版本的App,我进去后老板要求我ios直接用网页的内容,而不需要自己再搭建框架.我一听,偷笑了,这不就是一个UIWebView吗?简单! 但是 ...

  3. iOS网络3—UIWebView与WKWebView使用详解

    一.整体介绍 UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView.通过简单的测试即可发现UIWebView占用过多内存,且 ...

  4. IOS 网络浅析-(十二 UIWebView简介)

    在这篇随笔里,我们只要知道UIWebView是什么就可以了. UIWebView 是苹果提供的用来展示网页的UI控件,它也是最占内存的控件. iOS8.0之后出现了webkit框架,WKWebView ...

  5. UIWebView获取网页点击事件

    //接收web事件 -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request nav ...

  6. IOS UIWebView 下拉刷新功能的简单实现

    1.运行效果图 2.swift 代码的实现 import UIKit class RefreshWebViewController: UIViewController,UIScrollViewDele ...

  7. UI控件(UIWebView)

    本文主要记录UIWebView三方面内容: 1.基本的加载网页链接或文件: 2.网页js调用原生,也就是Cordova混合架构的原理: 3.原生调用js程序: 原生部分主要代码: @implement ...

  8. UIwebView 和 H5交互详情

    背景: 最近公司准备上一个只有原生登录界面 + H5网页 ,并且支持ios7.0 以上系统的混合app;这可把我难住了,原生的UI界面我可以正写反写各种style把界面搭建起来.而要这个app的难点在 ...

  9. ios UIWebView 在开发中加载文件

    UIWebView 在实际应用中加载文件的时候,有两种情况, 1. 实行在线预览 , 2. 下载到本地,再查看 如果是第一种情况: NSURL *url = [NSURL URLWithString: ...

  10. iOS UIWebView 拦截点击事件(双击缩放)

    在平时的开发中,要使用到webview,但类似微信的webview在数据没有加载完成的时候 双击屏幕,webview不会缩放,其实实现这个功能很简单 代码是用swift写的 class YYSimpl ...

随机推荐

  1. arguments对象、apply()、匿名函数

    在学习arguments对象时,碰到的一段code,不是太好理解.原文地址中文(http://www.jb51.net/article/25048.htm).英文(http://www.sitepoi ...

  2. Docker安装RabbitMQ,RabbitMQ Management使用

    原文:Docker安装RabbitMQ,RabbitMQ Management使用 版权声明:本文为博主原创文章,未经博主允许不得转载.需要转载请先评论或者邮箱联系我,谢谢! https://blog ...

  3. 洛谷 P2969 [USACO09DEC]音符Music Notes

    P2969 [USACO09DEC]音符Music Notes 题目描述 FJ is going to teach his cows how to play a song. The song cons ...

  4. 洛谷 P2693 [USACO1.3]号码锁 Combination Lock

    P2693 [USACO1.3]号码锁 Combination Lock 题目描述 农夫约翰的奶牛不停地从他的农场中逃出来,导致了很多损害.为了防止它们再逃出来,他买了一只很大的号码锁以防止奶牛们打开 ...

  5. 怎么做好看的html5游戏界面

    怎么做好看的html5游戏界面 一.总结 一句话总结:html5应该是完全可以做特别好看的游戏界面的.最下面那个背景图完全是一张图片动的雪和小动物可以是gif,或者是canvas,右边的那各个选择框就 ...

  6. 2013腾讯编程马拉松||HDU 4505 小Q系列故事——电梯里的爱情 水水水

    http://acm.hdu.edu.cn/showproblem.php?pid=4505 题目大意: 电梯最开始在0层,并且最后必须再回到0层才算一趟任务结束.假设在开始的时候已知电梯内的每个人要 ...

  7. Android开发系列(二十):AutoCompleteTextView(自己主动完毕文本框)的功能和使用方法

    当用户输入一定的字符之后,自己主动完毕文本框可以显示一个下拉菜单,供用户从中选择,当用户选择某个菜单项之后,AutoCompleteTextView可以依照用户的选择自己主动填写该文本框 AutoCo ...

  8. 从零开始使用git第一篇:下载安装配置

    从零开始使用git 第一篇:下载安装配置 第一篇:从零开始使用git第一篇:下载安装配置 第二篇:从零开始使用git第二篇:git实践操作 第三篇:从零开始使用git第三篇:git撤销操作.分支操作和 ...

  9. 【BZOJ 2754】[SCOI2012]喵星球上的点名

    [链接]h在这里写链接 [题意]     n个人;     由姓和名组成.s1[i]和s2[i];     有m个询问串.     问你第j个询问串,是否为某个人的姓或者名的子串.     如果是的话 ...

  10. Android中各种drawable的使用

    转载请说明出处.本文来自Android菜鸟:http://blog.csdn.net/android_cai_niao/article/details/46854767  QQ:2717521606 ...