iOS移动端WebApp的JS与Native交互(JS与OC)
来源:互联网 发布:java socket链接不上 编辑:程序博客网 时间:2024/05/18 11:37
不论是纯webApp还是hybrid,js与原生的交互都不可避免,这里做一个自己的学习记录吧。js与OC的交互。
这里就以一个最基础的web页面获取移动端设备号UUID为例。
JS代码如下:
var mobilePort; var uuid; var getUuid = function(sender){ uuid = sender; }
注意这里的mobilePort指的便是容纳webView的原生对象,在链接好之后在JS页面中便可以随意使用mobilePort来调用原生对象中遵循交互协议的方法。
链接js页面主要是在OC代码中处理。
首先在.h文件中导入JavaScriptCore框架,然后定义一个交互协议,协议中的方法便是JS可以调用的了。
#import <JavaScriptCore/JavaScriptCore.h>@protocol JSCommunicationDelegate <JSExport>- (void)sendUUID;@end.m文件中实现:
@interface BFRootViewController ()<UIWebViewDelegate,JSCommunicationDelegate>@property (nonatomic,strong) JSContext *jsContext;@end
遵循UIWebViewDelegate与.h中定义的协议,再定义一个存储JS页面上下文的对象。#pragma mark JSCommunicateDelegate- (void)sendUUID{ NSString *uuidStr = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; //获取UUID后调用js方法传出 JSValue *getUuid = self.jsContext[@"getUuid"]; [getUuid callWithArguments:@[uuidStr]]; }#pragma mark - WebViewDelegate- (void)webViewDidFinishLoad:(UIWebView *)webView { self.jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; self.jsContext[@"mobilePort"] = self; self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) { context.exception = exceptionValue; NSLog(@"异常信息:%@", exceptionValue); };}在webView当前页面加载完成后,获取当前web页面的js上下文对象,并将该对象中的mobilePort设置为自身。然后当js文件调用交互方法时,原生代码获取设备号,并且作为参数传入JS页面。
mobilePort.sendUUID();alert(uuid);
获取设备号就完成了。同样的需求还可用于调用系统相册,相机拍照,获取通讯录等场景。将调用方法写在原生的交互协议中,将数据传回JS即可。
0 0
- iOS移动端WebApp的JS与Native交互(JS与OC)
- iOS OC与js的交互
- ios oc与js的交互总结
- iOS OC与js交互
- OC与JS的交互(iOS与H5混编)
- OC与JS的交互
- JS与OC的交互
- OC与JS的交互
- JS 与 OC 的 交互
- iOS OC与JS,JS与OC交互
- JS与Native交互
- JS与NATIVE交互
- js与native交互
- JS与Native交互
- oc与js 交互
- oc与js交互
- JS与OC交互
- js与oc 交互
- Android7.0 自定义view开启硬件加速报错
- C++ 对象的内存布局(上)
- Informatica
- Spark作业运行原理
- Android面试之2017美团面试最新
- iOS移动端WebApp的JS与Native交互(JS与OC)
- c语音动态内存分配,内存重新分配,内存释放,指针运算
- 10个值得深思的 PHP 面试问题
- ajax往服务端发送checkbox的数组方式,服务端采用springMVC架构
- 外连接+聚合
- UEStudio快捷键
- 外链接
- C++ 对象的内存布局(下)
- 练习题 No.15 Expedition