MCWebBridgeNative ,webview内容与本地交互,有非常非常爽的功能 (附 源码)
来源:互联网 发布:休斯顿国际电影节知乎 编辑:程序博客网 时间:2024/06/08 00:31
MCWebBridgeNative
利用的url拼接地址 打开任意controller(不需要预埋import,不需要预埋实现方法,很方便)并且可以进行传参,或者执行预埋的方法
主要作者比较懒,有问题可以直接发邮件chenxingghost@gmail.com或者在issues提问,还有待完善的地方慢慢修改
简书地址:http://www.jianshu.com/p/760ca42f6475
Examples【示例】
知道你们懒,所以实现上面的方法只需要一行代码!是不是很爽
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ return [MCURLBridgeNative MC_autoExecute:request withReceiver:self];}
使用方法
上面的全自动判断执行的方法,下面介绍下自定义的内容
/** * 知道你们懒 给你们一个全自动的方法 */+ (BOOL)MC_autoExecute:(NSURLRequest *)request withReceiver:(id)receiver;/** * 创建并获取Controller对象 */+ (id)MC_getViewControllerRequestURL:(NSURLRequest *)request;/** * 将创建的Controller push,如果没有navigation则执行present */+ (void)MC_pushViewControllerRequestURL:(NSURLRequest *)request;/** * 将创建的Controller present */+ (void)MC_presentViewControllerRequestURL:(NSURLRequest *)request;/** * 根据showtype字段判断是push还是present,controller,如没有这个字段则执行MC_push方法 */+ (void)MC_showViewControllerRequestURL:(NSURLRequest *)request;/** * 执行一个本地的方法 */+ (void)MC_msgSendFuncRequestURL:(NSURLRequest *)request withReceiver:(id)receiver;/** * 判断scheme协议是否和设定的相同 */+ (BOOL)MC_checkScheme:(NSURLRequest *)request;/** * 判断host是不是获取controller */+ (BOOL)MC_checkHostisEqualVc:(NSURLRequest *)request;/** * 判断host是不是获取function */+ (BOOL)MC_checkHostisEqualFunc:(NSURLRequest *)request;
Web需要对应的内容,下面这是示例
<a href="mc://mcvc?class=TestViewController">打开test控制器</a><br> <a href="mc://mcvc?class=TestViewController&showtype=push&dataString=MCstring&dataInteger=123">push打开test控制器并传值</a><br> <a href="mc://mcvc?class=TestViewController&showtype=present&dataString=MCstring&dataInteger=123">present打开test控制器并传值</a><br> <a href="mc://mcfunc?func=test">执行本地方法</a><br> <a href="mc://mcfunc?func=test:&data=MCstring">执行本地方法并传值</a><br>
介绍一下结构
mc://mcvc?class=TestViewController&showtype=push&dataString=MCstring&dataInteger=123”
* 第一部分mc:// (这是客户端和web预定的协议,可用MC_checkScheme方法执行判断)
* 第二部分mcvc?或者mcfunc? (host,判断是打开controller还是执行本地方法)
* 第三部分class或者func字段 (class字段是用来生成需要打开的controller的类名,func字段是用来打执行需要执行的本地方法)
* showtype字段是 MC_autoExecute:withReceiver: 和MC_showViewControllerRequestURL:方法 自动判断显示controller的方式,如何使用MC_pushViewControllerRequestURL:和MC_presentViewControllerRequestURL方法会无视这个字段
* 第四部分后面的部分就是你们需要传输的字段,这个库会自动按照字段名对应相同名字的属性进行赋值,暂时不能支持NSArray NSDictionary NSSet 或自定义类,如果需要可以使用MJExension库替换 MC_ObjectWithkeyValues这个方法中的使用
使用示例
示例1 半自动啦
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ if ([MCURLBridgeNative MC_checkScheme:request]) { if ([MCURLBridgeNative MC_getViewControllerRequestURL:request]) { [MCURLBridgeNative MC_pushViewControllerRequestURL:request]; }else { [MCURLBridgeNative MC_msgSendFuncRequestURL:request withReceiver:self]; } return NO; } return YES;}
示例2 喜欢自己创建类的朋友
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ if ([MCURLBridgeNative MC_checkScheme:request]) { if ([MCURLBridgeNative MC_getViewControllerRequestURL:request]) { id VC = [MCURLBridgeNative MC_getViewControllerRequestURL:request]; [self.navigationController pushViewController:VC animated:YES]; } return NO; } return YES;}
加密
执行显示url里的内容不是很安全,特地加了加密工具,支持RSA 和 DES 加密
已内置DES解密方法
[MCURLBridgeNative MC_DESDecrypt:request key:@"mc"]
任何解密之后需要重新生成一个新的NSURLRequest对象
加密前:mc://mcvc?class=TestViewController&showtype=push&dataString=MCstring&dataInteger=123加密后:mc://j97nAm965gnrIXpHYmW+a8kNd5UpDJcuqJYyrNSlOfWR5C2gOs7LAmySYbtGFzPolyMefbL2IuSLsF1zrEbwNOEZLT7LCQ945mhWKf58hEQ=(协议://)协议头不要加密用来判断[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@://%@",协议头,"解密后的内容"]]]
示例
if ([MCURLBridgeNative MC_checkScheme:request]) { return [MCURLBridgeNative MC_autoExecute:[MCURLBridgeNative MC_DESDecrypt:request key:@"mc"] withReceiver:self]; }
- MCWebBridgeNative ,webview内容与本地交互,有非常非常爽的功能 (附 源码)
- iOS webView与本地js的交互
- WebView控件中的javascript与Android本地功能交互
- 与excel交互的几种“非常”思路
- java new socket 非常慢(附非常笨的解决方法)
- Android列表收缩与展开仿QQ好友列表(非常详细,附源码)
- Android列表收缩与展开仿QQ好友列表(非常详细,附源码)
- WebView的JavaScript与本地代码三种交互方式
- WebView的JavaScript与本地代码三种交互方式
- WebView的JavaScript与本地代码三种交互方式
- WebView的JavaScript与本地代码三种交互方式
- 非常实用的本地天气获取控件
- 一个内容非常多的网站
- 我的浏览器1.0 [非常小巧的浏览器, 有地址加一减一的功能]
- linux中有非常方便的一个which命令.在windows中也使用这个功能
- 非常有深度的冷笑话
- Makefile有三个非常有用的变量
- 非常有用的JS事件功能
- Lombok Requires Annotation Processing Annotation processing seems to be disabled for the project "xx
- 复制粘贴功能
- BigDecimal用法之计算等额本金和等额本息
- SPSS:T检验、方差分析、非参检验、卡方检验的使用要求和适用场景
- 浅析Fragment中startActivityForResult()与getActivity().startActivityForResult()的异同
- MCWebBridgeNative ,webview内容与本地交互,有非常非常爽的功能 (附 源码)
- RabbitMQ案例七之RPC远程过程调用
- 代理Hook
- React Native 中遇到的问题
- Mysql-Client编码问题
- PHP基础补全系列:异常处理
- httpClient 绕证书
- HTML初探
- 第一节 javascript的简史