【iOS】网页中调用JS与JS注入
非常多应用为了节约成本,做出同一时候在Android与iOS上都能使用的界面,这时就要使用WebView来做。Android和IOS上都有WebView,做起来非常省事。当然这时就要考虑怎样在Android或iOS中实现与网页的交互。对iOS而言,包含怎样在网页中调用OC,以及怎样在OC中对网页进行操作。
先将网页弄到iOS项目中:
网页内容例如以下, 仅供測试:
<html>
<head>
<meta xmlns="http://www.w3.org/1999/xhtml" http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>这是一个演示样例html文件</title>
<script Type='text/javascript'>
function clickme() {
alert('点击button了!');
}
</script>
</head>
<body>
<h1>OC与JS互动</h1>
<h2>blog.csdn.net/xn4545945</h2>
<!-- 自己定义协议与OC进行交互 -->
<a href="neng://loadUrl/blog.csdn.net">点击一下, 链接调用OC函数</a>
<br/>
<br/>
<a href="http://m.baidu.com">js注入, 到baidu页面上实验</a>
</body>
</html>
一、在OC中调用JS
最重要的方法:stringByEvaluatingJavaScriptFromString
直接上代码,说明见凝视:
/**===========================OC 中调用 JS====================================*/
- (void)webViewDidFinishLoad:(UIWebView *)webView {
//1.OC中调用JS的文档对象. (先拼出文档对象的属性) 能够在浏览器控制台输入来进行測试
NSLog(@"%@", [self.webView stringByEvaluatingJavaScriptFromString:@"document.title"]); //2.OC中调用JS的方法
[self.webView stringByEvaluatingJavaScriptFromString:@"clickme()"];
}
二、用超链接来调用OC中方法
步骤:
代码例如以下:
/**=========================== webView链接 中调用 OC===============================*/
/**webView的代理方法:载入页面有关. 当直接返回为NO时,会调用JS方法
当中request參数与发送请求有关*/
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSLog(@"%@", request.URL.absoluteString); //能够直接拿到发送请求的网址
NSString *urlStr = request.URL.absoluteString; // 格式 neng://loadUrl/blog.csdn.net 协议/方法/网址
//推断链接中的协议头,假设是neng://, 则进行相关操作
if ([urlStr hasPrefix:@"neng://"]) {
//拿到除去协议头的后部
NSString *urlContent = [urlStr substringFromIndex:[@"neng://" length]];
NSLog(@"%@", urlContent); //用/来拆分字符串
NSArray *urls = [urlContent componentsSeparatedByString:@"/"];
NSLog(@"拆分的结果为:%@", urls); //取出方法名
if (urls.count != 2) {
return NO;
}
NSString *funName = [NSString stringWithFormat:@"%@:", urls[0]]; //带參数的方法,加冒号 SEL callFun = NSSelectorFromString(funName);
//取消警告
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[self performSelector:callFun withObject:urls[1]]; //将blog.csdn.net作为參数传入
# pragma clang diagnostic pop
NSLog(@"方法名为%@, 传入參数为%@", funName, urls[1]); return NO;
} return YES;
} - (void)loadUrl:(NSString *)urlStr {
NSLog(@"接收到參数: %@", urlStr); //跳转到指定的URL--->urlStr
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", urlStr]];
NSURLRequest *request = [NSURLRequest requestWithURL:url]; [self.webView loadRequest:request];
}
三、JS实现注入
JS是操作网页的利器,利用好JS才干真正在应用中随心所欲的操作网页。
核心方法:stringByEvaluatingJavaScriptFromString(与第一个同样,这个是在iOS中操作JS最重要方法)
代码例如以下:
/**===========================JS 注入====================================*/
- (void)jsClick {
[self.webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');"
"script.type = 'text/javascript';"
"script.text = \"function myFunction() { " //定义myFunction方法
"var field = document.getElementsByName('word')[0];"
"field.value='WWDC2014';"
"document.forms[0].submit();"
"}\";"
"document.getElementsByTagName('head')[0].appendChild(script);"]; //加入到head标签中 [self.webView stringByEvaluatingJavaScriptFromString:@"myFunction();"];
}
附上样例源代码:http://download.csdn.net/detail/xn4545945/7584575
转载请注明出处:http://blog.csdn.net/xn4545945
【iOS】网页中调用JS与JS注入的更多相关文章
- js网页中调用本地应用程序
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv="Con ...
- bug日记之---------js中调用另一个js中的有ajax的方法, 返回值为undefind
今天做一个OCR授权的需求, 需要开发一个OCR弹框, 让用户选择是否授权给第三方识别公司(旷世科技)保存和识别用户个人信息, 照片等. 其中用到了在一个js的方法中调用另外一个js的方法, 其中有一 ...
- Js文件函数中调用另一个Js文件函数的方法
在项目中Js文件需要完成某一功能,但这一功能的大部分代码在另外一个Js文件已经完成,只需要调用这个文件实现功能.那么如何调用:一个Js文件函数中调用另一个Js文件函数的方法? (直接代码说明) 示例d ...
- ios开发--网页中调用JS与JS注入
先将网页弄到iOS项目中: 网页内容如下, 仅供测试: <html> <head> <meta xmlns="http://www.w3.org/1999/xh ...
- 如何在网页中调用百度地图api
我想在木有提供地图接口的年代,前端工程师门要么只写上企业的具体地址,要么就是用一张标有自己位置的地图图片.但是现在不一样啦!为了增强用户体验,谷歌,甚至百度都很开放了,你可以在他们的网站上找到地图接口 ...
- iOS程序中调用系统自带应用(短信,邮件,浏览器,地图,appstore,拨打电话,iTunes,iBooks )
在网上找到了下在记录下来以后方便用 在程序中调用系统自带的应用,比如我进入程序的时候,希望直接调用safar来打开一个网页,下面是一个简单的使用:
- [置顶] ios 网页中图片点击放大效果demo
demo功能:点击网页中的图片,图片放大效果的demo.iphone6.1 测试通过. demo说明:通过webview的委托事件shouldStartLoadWithRequest来实现. demo ...
- <<< 网页中如何利用原生js和jquery储存cookie
javascript当中的cookie机制,使应用达到了真正的全局变量的要求,cookie是浏览器提供的一种机制,它将document 对象的cookie属性提供给JavaScript.可以由Java ...
- 如何快速找出网页中事件对应的js代码片段
后端人员也免不了要处理一些前端的事情,由于代码不是自己写的,所以不好找到相关的代码. 比如在表单提交时,前端提交的数据不正确,这时候你可能会想在谷歌浏览器里添加一个鼠标 点击事件的断点. 然而查看js ...
随机推荐
- 安卓开发37:自定义的HorizontalScrollView类,使其pageScroll的时候焦点不选中
自定义一个HorizontalScrollView类,主要为了让这个HorizontalScrollView不能鼠标点击,不能左右按键,并且没有焦点. public class ImageMoveHo ...
- BZOJ 1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机
题目 1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机 Time Limit: 5 Sec Memory Limit: 64 MB Desc ...
- UITabbar的常用属性
// //设置tabbar的背景颜色 // [self.tabBar setBarTintColor:[UIColor redColor]]; // //设置选中时图片和文字的颜色 // [self. ...
- ARM流水线(pipeline)
- Windows的公共控件窗口类列表
The following window class names are provided by the common control library: ANIMATE_CLASS Creates a ...
- Python 2.7 学习笔记 访问mysql数据库
一.基本概念 使用python操作数据库,其基本的流程如下(其实所有开发语言访问数据库的流程都是这样). 1.第一,引入相应数据库的python数据库接口模块,针对不同的数据库类型,有不同的数据库访问 ...
- 评侯捷的<深入浅出MFC>和李久进的<MFC深入浅出>
侯捷的<深入浅出mfc>相信大家都已经很熟悉了,论坛上也有很多介绍,这里我就不多说了. 而李久进的<mfc深入浅出>,听说的人可能就少得多.原因听说是这本书当时没有怎么宣传,而 ...
- poj1920 Towers of Hanoi
关于汉诺塔的递归,记住一个结论是,转移n个盘子至少需要2^n-1步 #include<iostream> #include<cstdio> #include<cmath& ...
- Redis性能调优:保存SNAPSHOT对性能的影响
前一段时间.开发环境反馈,Redisserver訪问很慢,每一个请求要数秒时间,重新启动之后2~3天又会这样. 我查看了一下Linux的性能,没有什么问题. 通过 # redis-cli --late ...
- HFS - 简单的将个人电脑变服务器!
网络硬盘 HTTP File Server(HFS)是我目前所知道的最简便的P2P文件分享方式,只一个大小为559KB的单文件绿色软件(hfs.exe)就可以在瞬间不经过任何系统设置将一台普通的联 ...