ios js 交互分为两块:

1.oc调用js

这一块实现起来比较简单,

我的项目中加载的是本地的html,js,css,需要注意的是当你向工程中拖入这些文件时,选择拷贝到工程中,(拖入的文件夹是蓝色的,相对路径),不然css,js 的路径会存在问题

加载本地html:

 

oc调用js:一句代码搞定

2.js 调用oc

js调用oc又分为两种:

1.js端是直接调用方法

这里就要说到ios7才推出的一个新的api    JavaScriptCore,首先我们引入这个类,并初始化一个JSContext对象

 

在webViewDidFinishLoad方法里

此处通过当前webView的键获取到jscontext

 

将我们的context对象与js方法建立桥接联系,

2.js端通过对象调用方法

说到对象调方法我们首先肯定得有个对象,所以我们首先需要创建一个js交互类,并声明和实现相应的交互方法,在这里需要注意的是我们需要在这个自定义交互类里面导入JavaScriptCore框架,声明一个遵从于JSExport协议的协议(有点绕,看图),在这个协议里声明我们的交互方法,最后让我们的交互类遵从与我们自定义的协议

在交互类的.m中实现相应的js交互方法,并实现我们想要的操作

注意到图上的

JSExportAs(invoke, - (void) invoke:(NSString *) method args:(NSString *) args);

这个方法没有,这个方法的作用是当js端的方法有两个或两个以上参数时,我们需要让- (void) invoke:(NSString *) method args:(NSString *) args;这个方法代替 对应的js这个方法,因为oc端的方法名必须和js端的保持一致,不然就不会调用

最后在我们的webViewDidFinishLoad方法里初始化我们的交互对象,并让 context 与之建立联系,ok,完事

hybridApi调用此方法 -->

3. Objective-C调用JavaScript方法代码如下:

[self.webView evaluateJavaScript:[NSString stringWithFormat:@"__YutaAppOnPrepare()"]

completionHandler:^(id response, NSError *error)

{

}];

------分割线-----

如果项目中使用wkWebview, 那么不支持使用jsContext来进行js交互拦截js方法,不过可以使用一下方法:

#pragma -mark WKWebview的配置项

- (WKWebView *)wbview

{

if (!_wbview) {

config = [[WKWebViewConfiguration alloc]init];

//注册js方法

config.userContentController = [[WKUserContentController alloc]init];

//webViewAppShare这个需保持跟服务器端的一致,服务器端通过这个name发消息,客户端这边回调接收消息,从而做相关的处理

[config.userContentController addScriptMessageHandler:self name:@"webViewAppShare"];

_wbview = [[WKWebView alloc]initWithFrame:WbviewFrame configuration: config];

_wbview.navigationDelegate = self;

_wbview.UIDelegate = self;

[self.view addSubview:_wbview];

}

return _wbview;

}

//js交互方法

- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message

{

NSDictionary *msgBody = [[NSDictionary alloc] initWithDictionary:message.body];

NSString * shareTitle = text_share;

NSString * shareText = text_share;

NSString * shareUrl = url_share;

}

 
 
 

iOS JS 交互之利用系统JSContext实现 JS调用OC方法以及Objective-C调用JavaScript方法的更多相关文章

  1. iOS JS 交互之利用系统JSContext实现 JS调用oc方法

    ios js 交互分为两块: 1.oc调用js 这一块实现起来比较简单, 我的项目中加载的是本地的html,js,css,需要注意的是当你向工程中拖入这些文件时,选择如下操作,(拖入的文件夹是蓝色的, ...

  2. android webview js交互 第一节 (java和js交互)

    转载请注明出处         挺帅的移动开发专栏  http://blog.csdn.net/wangtingshuai/article/details/8631835        在androi ...

  3. iOS Foundation框架 -3.利用NSNumber和NSValue将非OC对象类型数据存放到集合

    1.Foundation框架中提供了很多的集合类如:NSArray,NSMutableArray,NSSet,NSMutableSet,NSDictionary,NSMutableDictionary ...

  4. 安卓高级 WebView的使用到 js交互

    我们先来学习 怎么使用再到用js和安卓源生方法交互 WebView简单使用 此部分转载并做了补充 原博客 原因:比较简单不是很想在写,我只要写js交互部分 WebView可以使得网页轻松的内嵌到app ...

  5. iOS下原生与JS交互(总结)

    iOS开发免不了要与UIWebView打交道,然后就要涉及到JS与原生OC交互,今天总结一下JS与原生OC交互的两种方式. JS调用原生OC篇(我自己用的方式二,简单方便) 方式一 第一种方式是用JS ...

  6. 李洪强iOS经典面试题147-WebView与JS交互

    李洪强iOS经典面试题147-WebView与JS交互   WebView与JS交互 iOS中调用HTML 1. 加载网页 NSURL *url = [[NSBundle mainBundle] UR ...

  7. iOS与JS交互实战篇(ObjC版)

    前言 ObjectiveC与Js交互是常见的需求,可对于新手或者所谓的高手而言,其实并不是那么简单明了.这里只介绍iOS7.0后出来的JavaScriptCore framework. 关于JavaS ...

  8. iOS之与JS交互通信

    随着苹果SDK的不断升级,越来越多的新特性增加了进来,本文主要讲述从iOS6至今,Native与JavaScript的交互方法 一.UIWebview && iframe && ...

  9. iOS开发 - Swift使用JavaScriptCore与JS交互

    一.前言 在这个提倡敏捷开发和H5横行的年代,原生App内嵌入一些H5页面已经成为一种流行的趋势.一套H5页面就可以适配复杂的iOS和Android页面,大量节省了开发和维护时间,如果本来就有移动端网 ...

随机推荐

  1. CODING 代码托管架构升级之路

    本文为 CODING 创始团队成员王振威在『CODING 技术小馆:上海站』的演讲实录. CODING 技术小馆,是由国内专业的一站式软件服务平台 CODING 主办的一系列技术沙龙.将邀请数位业内知 ...

  2. Software - 创建程序打包项目

    通常的步骤 准备一个 Visual Studio Installer 的项目模板 利用该模板,在解决方案中新建一个 Visual Studio Installer 项目 设置项目属性,配置文件系统 生 ...

  3. NetCore 学习笔记(DI 实例生命周期)

    Transient: 每一次GetService都会创建一个新的实例 Scoped:    在同一个Scope内只初始化一个实例,同一个请求内只会被创建一次 Singleton :整个应用程序生命周期 ...

  4. linux添加软件的service start/stop快捷服务(简单版)

    首先我们先需要一款软件,例如“apache” 安装解压至相应目录“/home/aaa/apache” 开始操作:进入“/etc/init.d/”中,新建一个service服务运行脚本“tomcat”, ...

  5. 配置OpenCV报应用程序无法正常启动0xc000007b

    我的配置软件是OpenCV3.4.1和visual studio2017.参考这篇博客(https://blog.csdn.net/qq_41175905/article/details/805604 ...

  6. gulp使用文档

    gulp的优势 易于使用:通过代码优于配置的策略,Gulp让简单的任务简单,复杂的任务可管理. 构建快速:利用 Node.js 流的威力,你可以快速构建项目并减少频繁的 IO 操作. 插件高质:Gul ...

  7. 51nod1305(简单逻辑)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1305 题意:中文题诶- 思路:1e5的数据直接暴力肯定是不行 ...

  8. oracle函数获取汉字拼音的首字母

    CREATE OR REPLACE FUNCTION F_TRANS_PINYIN_CAPITAL(P_NAME IN VARCHAR2) RETURN VARCHAR2 AS V_COMPARE V ...

  9. MySQL 逻辑备份mysqldump&mysqlpump&mydumper原理解析

    目录 准备 mysqldump备份 mysqlpump备份 mydumper备份 想弄清除逻辑备份的原理,最好的办法是开启general_log,一探究竟 准备 创建用户 CREATE USER IF ...

  10. 关于cookies,sessionStorage和localStorage的区别

    如果我说得啰嗦了,请麻烦提醒我一下~~ 面试的时候说: 首先这三个可以在浏览器端按下F12,在Application可以查看到. 如下图: cookies: sessionStorage: sessi ...