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 ...
一周排行
  • 1.微处理器的字长.主频.ALU结构以及( )是影响其处理速度的重要因素. A.有无中断处理 B.是否微程序控制 C.有无DMA功能 D.有无Cache存储器 参考答案:D 分析:微处理器的字长.主频.ALU结构以及 ...
  • 首先说明一下吧,我的这些教程最早发布在博客园上,但是无奈没有人气,于是就搬到了csdn上,于是就开始了这一系列的教程,大家也可以在博客园上找到我,都是同一个人...  先从第一节开始把,首先推荐一个网站,就是http ...
  • 有些书上也称"代表"或"委托".     C#中取消了指针的概念.对指针恋恋不舍的程序员可以有两种解决方法:声明"非安全"(unsafe)代码段然后在其中使 ...
  •  参考:http://blog.chinaunix.net/uid-23381466-id-88482.html f'l ct' #fX,X可用任何字符,l表示向右移一位,ct'表示删除至引号前di'  
  • Timer事件 反应堆event_base包含了一个最小堆min_heap结构体的实例,以此维护注册到这个反应堆实例的定时器事件: view sourceprint? 1.struct event_base { 2. ...
  • 题目链接:http://codeforces.com/contest/379/problem/B 题目意思:给定一个有n个钱包的序列,其中第i个钱包需要投入ai个钱币,需要编写一个程序,使得在对第i个钱包不能连续投入 ...
  • 今天我给大家介绍一款圆形统计图circliful,它基于HTML5的画布和jQuery,无需使用图像轻松实现圆形统计图,而且有很多属性设置,使用起来非常方便. 首先我们需要将jquery库文件和jquery.circ ...
  • 如题,遇到这种情况一般都是引用jar包版本不一致或者编译后的class除了问题 解决办法: a.如果是maven项目,把项目全部clean一下,重新mvn install b.如果不是maven项目,就重新引入jar ...
  • ios7.1正式版日历怎么显示节假日呢?很多用户对于ios7.1正式版日历如何显示节假日不是很清楚,下面为大家介绍ios7.1正式版日历显示节假日的方法,还不了解的用户们一起来看看吧 方法/步骤: 设置--通用--多 ...
  • 不要把重要的文件单独存放 在U盘上,而应该养成将重要信息存储在硬盘上的良好习惯,把U盘只当成文件交换的临时工具 一. 异常情况介绍      1. 公司内部编辑部一用户因工作需要,经常需要使用U盘与对口印刷单位交换文 ...