IOS-的UIWebView

UIWebVew是ios开发中较为常用的一个控件。其可以打开网页,加载html,打开文档等。当我们在开发中需要用到一些显示页面时,UIWebView是一个很好的选择。

创建一个UIWebView


  1. CGRect bouds = [[UIScreen manScreen] applicationFrame];
  2. UIWebViewweb视图* = [[UIWebView的页头] initWithFrame:方法界限]

设置属性


  1. //UIWebView默认允许当网页内容处于最顶端时,用户用手指往下拖动,然后露出空白的背景。这份代码能够禁止这种效果。
  2. webView.scrollView.bounces = NO;
  3. //是否与用​​户交互(即用户能不能控制的WebView)
  4. [web视图setUserInteractionEnabledYES];
  5. //自动对页面进行缩放以适应屏幕
  6. webView.scalespageToFit = YES;
  7. //自动检测网页上的电话号码,单击可以拨打
  8. webView.detectsPhoneNumbers = YES;

加载内容


  1. NSURL * URL = [NSURL URLWithString:@“http://www.youku.com”]; //创建网址
  2. *的NSURLRequest请求= [的NSURLRequest requestWithURLURL]; //创建的NSURLRequest
  3. [web视图的loadRequest:请求]; //加载

加载本地HTML页面


  1. //返回HTML文件路径
  2. * NSString的文件路径= [[[一个NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@“homeDetail.html”];
  3. //读取HTML文件内容
  4. * NSStringhtmlString = [NSStringstringWithContentsOfFile:文件路径编码:NSUTF8StringEncoding错误:无];
  5. //替换HTML文件的内容
  6. htmlString = [htmlString stringByReplacingOccurrencesOfString:@“$ {} docContentwithString:[的NSString stringWithFormat:@“%@”,[JSON objectForKey:@“内容”]]];
  7. [web视图loadHTMLStringhtmlString BASEURL:[NSURL URLWithString:文件路径]];

UIWebViewDelegate委托代理


  1. //设置委托对象
  2. webView.delegate =自我;
  3. //选择要实现的委托方法
  4. ////当网页视图被指示载入内容而得到通知。应当返回YES,这样会进行加载。
  5. - BOOLweb视图:(UIWebView的*)web视图shouldStartLoadWithRequest:(*的NSURLRequestreuqest navigationType:(UIWebViewNavigationTypenavigationType;
  6. //通过导航类型参数(navigationType)可以得到请求发起的原因,可以是以下任意值:
  7. UIWebViewNavigationTypeLinkClicked
  8. UIWebViewNavigationTypeFormSubmitted
  9. UIWebViewNavigationTypeBackForward
  10. UIWebViewNavigationTypeReload
  11. UIWebViewNavigationTypeFormResubmitted
  12. UIWebViewNavigationTypeOther
  13. //当网页视图已经开始加载一个请求后,得到通知。
  14. - (无效)webViewDidStartLoad:(UIWebView的*)web视图;
  15. //当网页视图结束加载一个请求之后,得到通知。
  16. - (无效)webViewDidFinishLoad:(UIWebView的*)web视图;
  17. //当在请求加载中发生错误时,得到通知。会提供一个NSSError对象,以标识所发生错误类型。
  18. - (无效)web视图:(UIWebView的*)web视图DidFailLoadWithError:(NSError *)错误;

[参考] http://blog.csdn.net/toss156/article/details/7303425


与JavaScript的的交互

stringByEvaluatingJavaScriptFromString方法可以将javascript嵌入页面中,通过这个方法我们可以在iOS中与UIWebView中的网页元素交互。

我们在webViewDidFinishLoad方法中就可以通过JavaScript的操作界面元素了。

获取当前页面的URL。


  1. - (无效)webViewDidFinishLoad:(UIWebView的*){web视图
  2. * NSStringCURRENTURL = [web视图stringByEvaluatingJavaScriptFromString:@“document.location.href”];
  3. }

获取页面标题:


  1. - (无效)webViewDidFinishLoad:(UIWebView的*){web视图
  2. * NSStringCURRENTURL = [web视图stringByEvaluatingJavaScriptFromString:@“document.location.href”];
  3. * NSString的标题=的WebView stringByEvaluatingJavaScriptFromString:@“document.title时”];
  4. }

修改界面元素的值。


  1. NSString * js_result = [web视图stringByEvaluatingJavaScriptFromString:@“document.getElementsByName'Q')[0]。价值=”AAA“;”];

表单提交


  1. * NSStringjs_result2 = [web视图stringByEvaluatingJavaScriptFromString:@“document.forms [0] .submit();”];

插入JS代码

我们可以封装到一个JS函数中,将这个函数插入到页面上执行,代码如下:

  1. - (无效)webViewDidFinishLoad:(UIWebView的*){web视图
  2. //拦截网页图片并修改图片大小
  3. [web视图stringByEvaluatingJavaScriptFromString
  4. @“VAR脚本=使用document.createElement'脚本');”
  5. script.type =”文/ JavaScript的“;”
  6. script.text = \”功能ResizeImages(){“
  7. VAR myimgoldwidth;”
  8. VARmaxWidth = 300;” //缩放系数
  9. “对于(i = 0;我 <document.images.length;i++){" "myimg="document.images[i];"" "if(myimg.width=""> maxWidth){“
  10. oldwidth = myimg.width;”
  11. myimg.width =了maxWidth;”
  12. //"myimg.height = myimg.height *(了maxWidth / oldwidth);“
  13. “}”
  14. “}”
  15. “} \”;“
  16. document.getElementsByTagName'头')[0] .appendChild(脚本);”];
  17. //
  18. [web视图stringByEvaluatingJavaScriptFromString:@“ResizeImages();”];
  19. }

[参考]http://www.cnblogs.com/zhuqil/archive/2011/08/03/2126562.html


响应图片长按事件


  1. 静态的NSString * constkTouchJavaScriptString =
  2. @“document.ontouchstart =函数(事件){\
  3. X = event.targetTouches [0] .clientX; \
  4. Y = event.targetTouches [0] .clientY; \
  5. document.location = \“MyWeb即可:触摸:启动:\”+ X + \“\”+ Y;};“;
  6. - (无效)webViewDidFinishLoad:(UIWebView的*){web视图
  7. [web视图stringByEvaluatingJavaScriptFromStringkTouchJavaScriptString];
  8. }
  9. //功能:UIWebView的响应长按事件
  10. - BOOLweb视图:(UIWebView的*)web视图shouldStartLoadWithRequest:(*的NSURLRequest)要求navigationType:(UIWebViewNavigationTypenavigationType {
  11. * NSStringrequestString = [[URL请求] absoluteString]
  12. NSArray的*组件= [requestString componentsSeparatedByString:@“”];
  13. 如果([组件数]> 1 && [(的NSString *)[成分objectAtIndex0]
  14. isEqualToString:@“MyWeb即可”]){
  15. 如果([(的NSString *)[成分objectAtIndex1] isEqualToString:@“触摸”])
  16. {
  17. 如果([(的NSString *)[成分objectAtIndex2] isEqualToString:@“开始”])
  18. {
  19. / *
  20. @需延时判断是否响应页面内的JS ...
  21. * /
  22. self.gesState = GESTURE_STATE_START;
  23. PTX = [[成分objectAtIndex3]的floatValue]
  24. PTY = [[成分objectAtIndex4]的floatValue]
  25. * NSStringJS = [的NSString stringWithFormat:@“document.elementFromPoint(%F,%F).tagName”,PTXPTY]
  26. * NSString的标签名= [self.webView stringByEvaluatingJavaScriptFromStringJS];
  27. self.imgUrl =零;
  28. 如果([标签名isEqualToString:@“IMG”]){
  29. self.imgUrl = [的NSString stringWithFormat:@“document.elementFromPoint(%F,%F)的.src”,PTXPTY]
  30. }
  31. 如果(self.imgUrl){
  32. self.timer = [的NSTimer scheduledTimerWithTimeInterval0.5目标:自我选择:@选择(handleLongTouch :)用户信息:无重复:NO];
  33. }
  34. }
  35. }
  36. 返回NO;
  37. }
  38. 返回YES;
  39. }
  40. //功能:如果点击的是图片,并且按住的时间超过1秒,执行handleLongTouch函数。
  41. - (无效)handleLongTouch:(*的NSTimer)定时器{
  42. 如果(self.imgUrl && self.gesState == GESTURE_STATE_START){
  43. self.gesState = GESTURE_STATE_END;
  44. HomeDetailImageViewController * imageViewController = [[HomeDetailImageViewControlleralloc]初始化];
  45. imageViewController.imgUrlStr = [self.webView stringByEvaluatingJavaScriptFromStringself.imgUrl];
  46. [self.navigationController pushViewControllerimageViewController动画:是];
  47. }
  48. }

[参考] http://www.tuicool.com/articles/j6fmY3j

在UIWebView的内容加载完之后,可以利用javascript获取其页面内的数据,核心就是通过UIWebView的方法:

NSString *string = [awebView stringByEvaluatingJavaScriptFromString:@"document.getElementById('field_2').value;" ];

以下是一些常用的js脚本:

thisURL = document.URL;
thisHREF = document.location.href;
thisSLoc = self.location.href;
thisDLoc = document.location;
thisTLoc = top.location.href;
thisPLoc = parent.document.location;
thisTHost = top.location.hostname;
thisHost = location.hostname;
thisTitle = document.title;
thisProtocol = document.location.protocol;
thisPort = document.location.port;
thisHash = document.location.hash;
thisSearch = document.location.search;
thisPathname = document.location.pathname;
thisHtml = document.documentElement.innerHTML;
thisBodyText = document.documentElement.innerText;//获取网页内容文字
thisBodyText = document.body.innerText;//获取网页内容文字

也可以通过同样的方法去设置页面内容(比如帮用户输入表单数据)
比如:
NSString *string = [awebView stringByEvaluatingJavaScriptFromString:@"document.getElementById('field_2').value='a value';" ];
就可以修改field_2的值了

同样也可以去模拟页面内按钮的点击,提交页面,比如:
document.getElementById('aButtonName').click();
或者,假设知道按钮是第几个input标签(假设为第一个)
document.getElementsByTagName('input').item(0).click();
也可以设置checkBox的状态:
document.getElementById('aCheckBoxId').checked=true;

参考:
http://hi.baidu.com/zfpp25/blog/item/0bc5e3565a7e632e0cf3e3d7.html
http://www.cnblogs.com/del/archive/2009/01/07/1370907.html
http://blog.csdn.net/studyrecord/article/details/6213843

UIWebView与JS的交互的更多相关文章

  1. iOS中使用UIWebView与JS进行交互

    iOS中使用UIWebView与JS进行交互 前一段忙着面试和复习,这两天终于考完试了,下学期的实习也有了着落,把最近学的东西更新一下,首先是使用UIWebView与JS进行交互 在webView中我 ...

  2. 【Swift】WKWebView与JS的交互使用

    一.前言 近日,有朋友问我关于WKWebView与JS的交互问题,可我之前一直使用的是UIWebView,也不曾做过WKWebView的交互啊!接下来大家一块学习下WKWebView是怎么实现原生代码 ...

  3. 【iOS开发】UIWebView与JavaScript(JS) 回调交互

    ------------------------------------------------- 很多关于objc 与 js 交互的文章都比较适用于 mac开发,iOS的webview 还是有所不一 ...

  4. iOS UIWebView和网页的交互(OC中调执行JS)

    UIWebView和网页的交互(OC中调执行JS)- (void)viewDidLoad{[super viewDidLoad];// 1.webViewUIWebView *webView = [[ ...

  5. UIWebView与JS的深度交互

    我要实现这样一个需求:按照本地的CSS文件展示一串网络获取的带HTML格式的只有body部分的文本,需要自己拼写完整的 HTML.除此之外,还需要禁用获取的HTML文本中自带的 < img &g ...

  6. UIWebView与JS的深度交互-b

    要实现这样一个需求:按照本地的CSS文件展示一串网络获取的带HTML格式的只有body部分的文本,需要自己拼写完整的 HTML.除此之外,还需要禁用获取的HTML文本中自带的 < img > ...

  7. UIWebView与JavaScript(JS) 回调交互 -备

    很多关于objc 与 js 交互的文章都比较适用于 mac开发,iOS的webview 还是有所不一样, 参考:http://blog.sina.com.cn/s/blog_693de6100102v ...

  8. [转]OC与JS的交互详解

    事情的起因还是因为项目需求驱动.折腾了两天,由于之前没有UIWebView与JS交互的经历,并且觉得这次在功能上有一定的创造性,特此留下一点文字,方便日后回顾. 我要实现这样一个需求:按照本地的CSS ...

  9. iOS中UIWebView执行JS代码(UIWebView)

    iOS中UIWebView执行JS代码(UIWebView) 有时候iOS开发过程中使用 UIWebView 经常需要加载网页,但是网页中有很多明显的标记让人一眼就能看出来是加载的网页,而我们又不想被 ...

随机推荐

  1. c++使用openssl操作秘钥相关

    PEM_write_bio_RSAPublicKey(pub, keypair);//生成-----BEGIN RSA PUBLIC KEY-----类型的公钥 PEM_write_bio_RSA_P ...

  2. leetcode-easy-trees-98. Validate Binary Search Tree-NO

    mycode   不会 注意:root的值要比左子树上所有的数大 参考 # Definition for a binary tree node. # class TreeNode(object): # ...

  3. [C#菜鸟]C# Hook (三) Windows常用消息大全

    表A-1  Windows消息分布 消息范围 说 明 0 - WM_USER – 1 系统消息 WM_USER - 0x7FFF 自定义窗口类整数消息 WM_APP - 0xBFFF 应用程序自定义消 ...

  4. leetcode 146LRU cache

    class LRUCache { public: LRUCache(int capacity) {_capacity=capacity;} //返回key对应的value int get(int ke ...

  5. Android的工程目录主要有哪些

    src 源文件gen 生成的文件 R 文件就在此android. jar 依赖的 android sdkassets 资源文件bin 生成的字节码 apk 在此libs 依赖 jar 和 sores ...

  6. python threading.current_thread().name和.getName()有什么区别

    今天学到python多线程这块,想显示当前线程是主线程还是子线程.网上一搜,有个方法叫 threading.current().name 定海偶然 但是发现,同样的threading.current_ ...

  7. ControlTemplate in WPF —— Expander

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...

  8. 52N皇后II

    题目:给定一个整数 n,返回 n 皇后不同的解决方案的数量. 来源:https://leetcode-cn.com/problems/n-queens-ii/ 法一: 自己的代码  时间超过百分之90 ...

  9. python调用不同目录中类的终极方法

    1.在需要导入别的类包中加入这两行代码 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))sys.path.a ...

  10. SAE Django如何禁止外部IP访问

    在SAE上基于Django搭建的Web工程有时需要禁止来自某些特定IP地址的访问请求. 例如一个为搭建在SAE的其他项目提供服务的内部工程,可以设置为只允许SAE内部的IP地址访问,从而提高项目的安全 ...