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){ ...
随机推荐
- MYSQL数据类型和where条件
MySQL中常见的数据类型 一.字符型 ① CHAR(N):固定N个字符长度的字符串,如果长度不够自动空格补齐; N的范围 0~255 ② VARCHAR(N): 存储可变长度的字符串,最常用 ③ T ...
- thinkphp带查询条件的分页
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- 如何用VMware打开vmdk文件
vmdk文件是一个虚拟机备份文件!你可以在vmware新建一个任何类型的虚拟机,命名为“test”,在“我的文档”找到vmware的虚拟机目录“test”,在"test"目录中可以 ...
- 使用 sitemesh/decorator装饰器装饰jsp页面(原理及详细配置)
摘要:首先这个Decorator解释一下这个单词:“装饰器”,我觉得其实可以这样理解,他就像我们用到的Frame,他把每个页面共有的东西提炼了出来,也可能我们也会用各种各样的include标签,将我们 ...
- Vue.js 基础指令实例讲解(各种数据绑定、表单渲染大总结)——新手入门、高手进阶
Vue.js 是一套构建用户界面的渐进式框架.他自身不是一个全能框架--只聚焦于视图层.因此它非常容易学习,非常容易与其它库或已有项目整合.在与相关工具和支持库一起使用时,Vue.js 也能完美地驱动 ...
- HTML5+CSS3实现的响应式垂直时间轴
<!DOCTYPE HTML><html><head><meta charset="utf-8"><meta name=&qu ...
- docker 17 安装
docker17 安装 新增一键安装命令: curl -sSL https://get.docker.com/ | sh 以下为手动安装过程 翻译自 Get Docker for Ubuntu Doc ...
- 谷歌是如何做代码审查的 | 外刊IT评论 - Google Chrome
谷歌是如何做代码审查的 本文的作者 Mark CC 在上一篇文章中提到过,我已经不在Google工作了.我还没有想清楚应该去哪里-有两三个非常好的工作机会摆在我面前.因为在这段做决 ...
- HashMap源码浅析(jdk1.8)
HashMap是以key-value键值对的形式进行存储数据的,数据结构是以数组+链表或红黑树实现. 数据结构图如下: 一.关键属性 HashMap初始化和方法使用的属性. /** * 默认初始容量1 ...
- XML文件的创建和解析笔记
解析XML的四种方法 XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这 ...