ObjectiveC与JavaScript的交互

UIWebView是iOS最常用的SDK之一,它有一个stringByEvaluatingJavaScriptFromString方法可以将javascript嵌入页面中,通过这个方法我们可以在iOS中与UIWebView中的网页元素交互。

stringByEvaluatingJavaScriptFromString

使用stringByEvaluatingJavaScriptFromString方法,需要等UIWebView中的页面加载完成之后去调用。我们在界面上拖放一个UIWebView控件。在Load中将google mobile加载到这个控件中,代码如下:

- ( void )viewDidLoad
{
[super viewDidLoad];
webview.backgroundColor = [UIColor clearColor];
webview.scalesPageToFit = YES;
webview. delegate = self;
NSURL * url = [[NSURL alloc] initWithString: @" http://www.google.com.hk/m?gl=CN&hl=zh_CN&source=ihp " ];

NSURLRequest * request = [[NSURLRequest alloc] initWithURL:url];
[webview loadRequest:request];
}

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

1、获取当前页面的url。

- ( void )webViewDidFinishLoad:(UIWebView * )webView {
NSString * currentURL = [webView stringByEvaluatingJavaScriptFromString: @" document.location.href " ];
}

2、获取页面title:

- ( void )webViewDidFinishLoad:(UIWebView * )webView {
NSString * currentURL = [webView stringByEvaluatingJavaScriptFromString: @" document.location.href " ];

NSString * title = [webview stringByEvaluatingJavaScriptFromString: @" document.title " ];
}

3、修改界面元素的值。

NSString * js_result = [webView stringByEvaluatingJavaScriptFromString: @"document.getElementsByName('q')[0].value='朱祁林'; " ];

4、表单提交:

NSString * js_result2 = [webView stringByEvaluatingJavaScriptFromString: @" document.forms[0].submit(); "];

这样就实现了在google搜索关键字:“朱祁林”的功能。

5、插入js代码

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

[webView stringByEvaluatingJavaScriptFromString: @" var script = document.createElement('script'); "
" script.type = 'text/javascript'; "
" script.text = \"function myFunction() { "
" var field = document.getElementsByName('q')[0]; "
" field.value='朱祁林'; "
" document.forms[0].submit(); "
" }\"; "
" document.getElementsByTagName('head')[0].appendChild(script); " ];

[webView stringByEvaluatingJavaScriptFromString: @" myFunction(); " ];

看上面的代码:

a、首先通过js创建一个script的标签,type为'text/javascript'。

b、然后在这个标签中插入一段字符串,这段字符串就是一个函数:myFunction,这个函数实现google自动搜索关键字的功能。

c、然后使用stringByEvaluatingJavaScriptFromString执行myFunction函数。

演示:

第一步打开google mobile网站




    		    ObjectiveC与JavaScript的交互

第二步输入关键字




    		    ObjectiveC与JavaScript的交互
第三步搜素




    		    ObjectiveC与JavaScript的交互

总结:这篇文章主要是讲解了stringByEvaluatingJavaScriptFromString的用法,它的功能非常的强大,用起来非常简单,通过它我们可以很方便的操作uiwebview中的页面元素。

更多相关文章
  •  传统的登录框 在之前的文章 流量劫持危害 详细讲解了 HTTP 的高危性,以至于重要的操作都使用 HTTPS 协议,来保障流量在途中的安全. 这是最经典的登录模式.尽管主页面并没有开启 HTTPS,但登录时会跳转到一个安全页面来进行,所以整个过程仍是比较安全的 —— 至少在登录页面是安全的. 对于 ...
  •   1. 数据抽象:物理抽象.概念抽象.视图级抽象,内模式.模式.外模式 2. SQL语言包括数据定义.数据操纵(Data Manipulation),数据控制(Data Control) 数据定义:Create Table,Alter Table,Drop Table, Craete/Drop I ...
  • 一.下载centos 7 livecd iso 访问镜像网站,http://mirrors.aliyun.com/centos/7.0.1406/isos/x86_64/ 或者直接下载:http://mirrors.aliyun.com/centos/7.0.1406/isos/x86_64/Cen ...
  • 据媒体报道,美国国防部计算机系统某年度遭到黑客袭击的次数总和达21124次,平均每次抵御攻击耗资150万美元.为对付黑客,美国国防部每年要付出300多亿美元的代价,比当年制造原子弹的曼哈顿工程花费还要多. 对此,负责筹办国防部官网的相关人士称:"不法分子中,有些是军事爱好者,有些是别有用心 ...
  • 斯宾塞·金博尔(Spencer Kimball)在离开谷歌之后,突然觉得不便,因为手头缺少了很多曾在公司内部使用的定制软件.于是,他携手其他谷歌离职者,决心打造自己的版本.现在,他们决心公开自己的工作成果,帮助有志者创办下一个谷歌或Facebook. 金博尔特别想打造属于自己的谷歌数据库系统Span ...
  • 易网科技讯 5月20日早间消息,易网(Nasdaq:NTES)今天公布了截至2010年3月31日的第一季度财务业绩报告.数据显示,易网一季度总营收达12亿元人民币(1.75亿美元),同比增长54.16%.其中游戏业务营收11亿元(1.59亿美元),同比增长50.06%:门户广告营收9150万元(13 ...
一周排行
  •     闲话不多扯,关于.NET架构师的培训  架构师的知识体系总结:7大重点,对7大重点作为细节的阐述将再后面陆续展开!架构师的体系纲领主要来着这7点.(必须严格记下) 1:现代软件开发过程及架构策略 1.1 软件 ...
  • 很多ASP.NET server控件都需要另外的外部资源来实现某些功能,WebResource.axd就是将一些js,jpg,bmp等封装或叫植入到类库里面. 使用WebResource.axd需要注意几点 1.在类 ...
  • 本报讯(记者李立强)近日,全国政协委员.四川鼎立律师事务所主任施杰,在政协会上表示,建议政府鼓励网络,并专设"网络纪检",专门搜集和接收网络信息. 超九成网民选择网络监督 过去一年,被很多人称为& ...
  • 一.Shark简介 Shark是基于Spark与Hive之上的一种SQL查询引擎,官网的架构图及性能测试图如下:(Ps:本人也做了一个性能测试见Shark性能测试报告) 我们涉及到了2个依赖组件,1是Apache S ...
  • 255) fc=255; if(bc>255) bc=255; int r=fc+random.nextInt(bc-fc); int g=fc+random.nextInt(bc-fc); int b=fc+ ...
  •     C++标准程序库提供了各具特长的不同容器.现在的问题是:该如何选择最佳的容器类别?下表给出了概述. 但是其中有些描述可能不一定实际.例如:如果你需呀处理的元素数量很少,可以虎落复杂度,因为线性算法通常对元素本 ...
  • Tavas and Karafs Time Limit:2MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Statu ...
  • 做了很久,做不出来,只好看题解了...要注意到分割后的两个串是有特点的.前一个串一定包含原始串的第一个字符,后一个串一定包含原始串最后一个字符.如果能注意到就可以应该能想出来了...把原始串记为S1, 将原始串翻转记 ...
  • 符合 NSObject 框架 /System/Library/Frameworks/SpriteKit.framework 可用性 可用于iOS 7.0或者更晚的版本 声明于 SKPhysicsWorld.h 参考指 ...
  • http://www.22ba.com/article/Computer513.html 什么样的情况可以使用以下的方法? 比如:1.被封网站能打开,但是速度非常慢.2.被封网站打不开,Chrome或者火狐浏览器窗口 ...