OC和JS的交互
引入类拓展UIWebView+TS_JavaScriptContext, 这个类拓展是能在JSCotext出现的时候就可以拿到. 因为一般情况下JSCotext在webViewDidFinishLoad:才拿到, JS端可能在我们没有执行webViewDidFinishLoad:方法的时候就已经调用了我们的方法.
在交互类中创建一个实现了JSExport协议的协议, 协议中提供暴露的方法给JS端. 并在交互类中实现我们定义的方法. 如果需要相关控制器相关参数的话, 可以写个通知(代理或block也行)然后让相关控制器去实现.
1.把拓展类UIWebView+TS_JavaScriptContext拖进项目.
2.创建交互类JavaOCInterRac, 给H5提供相关方法, 并在@implementation中实现方法.
// 首先创建一个实现了JSExport协议的协议
@protocol JavaOCInterRacProtocol <JSExport>
// 调系统相册
- (void)callPicker;
// 调支付
- (void)callPay;
// 传一个参数回来
- (void)callPassParameter: (NSString *)orderNumber;
// 传两个参数回来
- (void)callTestParameterone: (NSString *)orderNumber AndParametertwo:(NSString *)name;
@end
// JavaOCInterRac.h
@interface JavaOCInterRac : NSObject
+(instancetype)getInstance
/** 定义block,回调到控制器中 */
@property (nonatomic, copy) void(^showPickerBlock)();
@end
// JavaOCInterRac.m
@interface JavaOCInterRac() <JavaOCInterRacProtocol>
@end
@implementation JavaOCInterRac
// 提供交互类的单例单例对象
static JavaOCInterRac *JavaOCInterac = nil;
+(instancetype)getInstance
{
@synchronized(self)
{
if(!JavaOCInterac)
{
JavaOCInterac = [[self alloc] init];
}
}
return JavaOCInterac;
}
// 调用系统相册实现
- (void)callPicker {
NSLog(@"%s %s [第%d行] ----- 点击了调用系统相册", __TIME__, __FUNCTION__, __LINE__);
self.showPickerBlock(); //定义block回调
}
// ...其他方法实现同理
@end
3.在对应控制器.m中
#pragma mark ----- TSWebViewDelegate
- (void)webView:(UIWebView *)webView didCreateJavaScriptContext:(JSContext*) ctx {
ctx[@"object"] = [JavaOCInterRac getInstance];
}
#pragma mark ----- UIWebViewDelegate
- (void)webViewDidStartLoad:(UIWebView *)webView {
JavaOCInterRac *interac = [JavaOCInterRac getInstance];
interac.showPickerBlock = ^{
[self showImagePicker];
};
}
- (void)showImagePicker {
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:@"请选择文件来源"
delegate:nil
cancelButtonTitle:@"取消"
destructiveButtonTitle:nil
otherButtonTitles:@"拍照",@"从手机相册选择",nil];
[actionSheet showInView:self.view];
}
附上git托管地址: https://github.com/yemuhong/OCJS_Interac
OC和JS的交互的更多相关文章
- OC与JS的交互(iOS与H5混编)
大神总结WKWebView的坑:https://mp.weixin.qq.com/s/rhYKLIbXOsUJC_n6dt9UfA 在开发过程中,经常会出现需要iOS移动端与H5混编的使用场景. iO ...
- [转]OC与JS的交互详解
事情的起因还是因为项目需求驱动.折腾了两天,由于之前没有UIWebView与JS交互的经历,并且觉得这次在功能上有一定的创造性,特此留下一点文字,方便日后回顾. 我要实现这样一个需求:按照本地的CSS ...
- OC与JS的交互
现在APP的开发已经不局限于原生开发,很多都是原生+html5这种混合开发 我们可以通过webView这个控件,实现混合开发. 1.首先你需要创建一个html页面 <html> <h ...
- OC和JS的交互---JavaScriptCore
JavaScriptCore的简单介绍 JavaScriptCore是iOS7提供的原生框架,可以让Objective-C和JavaScript提供简单直接的交互. JavaScriptCore的使用 ...
- iOS OC与JS的交互(JavaScriptCore实现)
本文包括JS调用OC方法并传值,OC调用JS方法并传值 本来想把html放进服务器里面,然后访问,但是觉得如果html在本地加载更有助于理解,特把html放进项目里 HTML代码 <!DOCTY ...
- OC与JS的交互详解
事情的起因还是因为项目需求驱动.折腾了两天,由于之前没有UIWebView与JS交互的经历,并且觉得这次在功能上有一定的创造性,特此留下一点文字,方便日后回顾. 我要实现这样一个需求:按照本地的CSS ...
- iOS OC和JS的交互 javaScriptCore方法封装
一.javaScriptCore javaScriptCore是一种JavaScript引擎,主要为webKit提供脚本处理能力,javaScriptCore是开源webkit的一部分,他提供了强大的 ...
- 实现OC与JS的交互
oc-->js stringByEvaluatingJavaScriptFromString,其参数是一NSString 字符串内容是js代码(这又可以是一个js函数.一句js代码或他们 ...
- OC和JS之间的交互
OC和JS之间的交互 目录 对OC和JS之间交互的理解 JS调用OC OC调用JS 对OC和JS之间交互的理解 JS调用OC JS文件 function sendCommand(cmd,param){ ...
随机推荐
- [leetcode-628-Maximum Product of Three Numbers]
Given an integer array, find three numbers whose product is maximum and output the maximum product. ...
- tab切换实现方式2
tab切换实现方式2: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- work1-英语辅导班在线报名系统
作品简述: 这是一个英语辅导班在线报名系统,目的是提供一个供学生报名辅导班的平台,也同时为老师收集报名信息提供便利. 使用的语言: php+html+js 服务器: 新浪sae服务器,apache 数 ...
- 在两个ASP.NET页面之间传递变量【转】
ASP.NET提供了事件驱动编程模型,使开发者简化了应用程序的总体设计,但是这个也造成了它固有的一些问题,例如,在传统的ASP里,我们可以通过使用POST方法很容易地实现页面间传递变量,同样的事情,在 ...
- MySQL(二)--事务与视图
一.事务 1.提交 2.回滚 3.ACID特性 二.视图 1.创建视图 2.删除视图 3.更新视图 4.使用视图 三.子查询 1. 使用子查询 2. 标量子查询 3. 关联子查询 一.事务 在 RDB ...
- 恐怖的ifdown eth0;0
下午闲的蛋疼,随手给测试机配了个浮动地址eth0:0. ping了下OK,内网访问没问题. 准备收手的时候,瞄了一眼ifcfg-eth0:0的配置,发现广播地址BROADCAST写成了BOADCAST ...
- ReactiveCocoa源码解析(六) SignalProtocol的take(first)与collect()延展实现
上篇博客我们聊了observe().map().filter()延展函数的具体实现方式以及使用方式.我们在之前的博客中已经聊过,Signal的主要功能是位于SignalProtocol的协议延展中的, ...
- Chrome浏览器扩展开发系列之十五:跨域访问的XMLHttpRequest对象
XMLHttpRequest对象是W3C的标准API,用于访问服务器资源.XMLHttpRequest对象支持多种文本格式,如XML和JSON等.XMLHttpRequest对象可以通过HTTP和HT ...
- C#常用8种排序算法实现以及原理简介
public static class SortExtention { #region 冒泡排序 /* * 已知一组无序数据a[1].a[2].--a[n],需将其按升序排列.首先比较a[1]与a[2 ...
- jmeter连接配置带跳板机(SSH)的mysql服务器
jmeter连接配置mysql服务器时,如果数据库服务器没有通过ssh连接,则只需要配置相应的jdbc参数就可以了,即请求域名或ip地址:3306,如果数据库服务器是通过SSH连接的,那需要通过中间远 ...