iOS中JavaScript和OC交互 --by 胡 xu
在iOS开发中很多时候我们会和UIWebView打交道,目前国内的很多应用都采用了UIWebView的混合编程技术,最常见的是微信公众号的内容页面。前段时间在做微信公众平台相关的开发,发现很多应用场景都是利用HTML5和UIWebView来实现的。
机制
Objective-C语言调用JavaScript语言,是通过UIWebView的 - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
的方法来实现的。该方法向UIWebView传递一段需要执行的JavaScript代码最后获取执行结果。
JavaScript语言调用Objective-C语言,并没有现成的API,但是有些方法可以达到相应的效果。具体是利用UIWebView的特性:在UIWebView的内发起的所有网络请求,都可以通过delegate函数得到通知。
示例
下面提供一个简单的例子介绍如何相互的调用,实现的效果是在界面上点击一个链接,然后弹出一个对话框判断是否登录成功。
(1)示例的HTML的源码如下:
1 |
|
(2)UIWebView Delegate回调方法为:
1 |
|
说明:
1、同步和异步的问题
(1)Objective-C调用JavaScript代码的时候是同步的
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
(2)JavaScript调用Objective-C代码的时候是异步的
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
2、常见的JS调用
(1)获取页面title
NSString *title = [webview stringByEvaluatingJavaScriptFromString:@"document.title"];
(2)获取当前的URL
NSString *url = [webview stringByEvaluatingJavaScriptFromString:@"document.location.href"];
3、使用第三方库
https://github.com/marcuswestin/WebViewJavascriptBridge
使用案例
1、动态将网页上的图片全部缩放
JavaScript脚本如下:
1 |
|
在iOS代码中添加如下代码:
1 |
|
最新文章
- java初始化
- java文件编程总结
- 常用的css命名规则:
- Ubuntu 使用笔记
- RFIDler:一款定义RFID的读、写、仿真器的开源软件
- 采用Reflector的VS.net插件断点调试无源码DLL 分类:
- wps批量使标题靠文档左边
- js数组操作-打乱数组
- 详解Django的CSRF认证
- WiFi其他方法和WiFi事件响
- Kotlin入门(21)活动页面的跳转处理
- MT【287】余弦的线性组合
- ffmpeg CLI常用命令
- Ext.net 3.1学习
- Python2.7-difflib
- 【android】Android ADB 端口占用问题解决方案
- Flume的一些报错问题解决(持续更新中)
- mysql优化方法积累
- IndexedDB:浏览器里内置的数据库(转)
- 2013年,移动App设计的13大精髓
热门文章
- JAVA获取上下行网速
- MySQL数据库安装Version5.7.25
- css基础-1
- mysql5.7初始化密码报错 ERROR 1820 (HY000): You must reset your password using ALTER USER statement
- spring security 继承 WebSecurityConfigurerAdapter 的重写方法configure() 参数 HttpSecurity 常用方法及说明
- centos7 alias别名永久生效
- PHP靶场-bWAPP环境搭建
- Numpy实现简单BP神经网络识别手写数字
- 【白话科普】《逆局》最终 boss 隐藏自己的方式是?
- 【刷题-LeetCode】221. Maximal Square