关于混合开发,oc与js互相通信的方法总结:

最近做公司的几个项目,主要以为h5为主,不能实现的功能用oc来写,这样就经常牵扯到oc调用js,或者js调用oc。先插嘴一句,对于目前而言,我对H5包装下的app的用户体验是极其的不满,真的没法和原生比较。对注重用户体验的公司还是比较倾向与混合开发。

根据个人长期摸索,和开发踩过的坑,在这稍微总结一下下。。网上有的基本都很零散,对于开发在使用还需要具体根据项目情况来使用。

oc与js互相调用目前我知道的时主要有4种直接的方式:

1. 苹果的javascriptcore.framework框架;

2.跨平台cordova框架;

3.oc第三方WebViewJavascriptBridge;

4.还有直接就是设置自定义协议,然后在   webView的"- (BOOL) webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType"代理里面判断URL协议。便可以间接调用oc.

而通过 - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;  方法直接执行一段js代码。

苹果在iOS7中开放了javascriptCore.framework框架;这个框架大大简化了js 和oc 通信。

网上找了好多地方,发现就这篇博客关于avascriptCore.framework写的的最好。javascriptCore.framework很灵活,很强大。内容较多就不说了,看人家写的博客,很不错。

http://blog.iderzheng.com/ios7-objects-management-in-javascriptcore-framework/

可以参考这里学习。

跨平台cordova框架,提供了好多插件,对开发者以js形式提供调用各种原生功能,比如摄像头,罗盘仪之类的本机硬件的。你还可以自己定义插件,通过js调用本地代码。他还可以提供一个打包app。这个呢个人感觉就是适用于以h5为主,原生代码辅助的基础上,一套代码在各个平台上。比较方便不懂原生开发又想省钱的公司。就是目前,用户体验太差,而且cordova文档更新简直太慢,一路学习都是坑。俗话说的“爱一个人让他学习phonegap,恨一个人就让他学习phonegap吧”

参考地址 cordova官网文档:http://cordova.apache.org/docs/en/5.0.0/

oc第三方WebViewJavascriptBridge;这个是封装好的一个oc开源小框架,提供了2套oc和js之间互相调用的方法。这个比较合适混合项目,oc为主的项目。参考见WebViewJavascriptBridge的github上的网址:

https://github.com/marcuswestin/WebViewJavascriptBridge

第四种方法,在 webview的代理里根据自动以URL协议来js调oc, 不是很推介这个,这个必须在这个协议里才可以实现通信,如果多几次调用,里面会出现难以想象个if判断语句,这种很可怕。。

综合以上,鄙人觉得还是使用WebViewJavascriptBridge或者javascriptcore,比较合适混合开发。

假如是以为h5为基础的项目就用cordova。

至于第4种方法,看情况而定了。

时间: 2024-12-06 11:34:53

关于混合开发,oc与js互相通信的方法总结:的相关文章

浅谈混合开发与Android,JS数据交互

本文是作者原创,如转载请注明出处! 一.概论 现在时代已经走过了移动互联网的超级火爆阶段,市场上移动开发人员已经趋于饱和,显然,只会原生APP的开发已不能满足市场的需求,随着H5的兴起与火爆,H5在原生APP中的使用越来越广泛,也就是我们常说的混合开发(Hybrid APP).最新很火的微信小程序相信大家都是知道的,实际上微信小程序加载的界面就是一个HTML5的界面,HTML5界面在一些电商类的APP中主要承担展示数据的作用,但是他的作用并不仅限于此,最起码js调用原生方法和原生调用js的方法是

通过WebViewJavascriptBridge实现OC与JS交互

在.m方法当中,申明一个WebViewJavascriptBridge属性: 1 @interface ExampleAppViewController () 2 @property WebViewJavascriptBridge* bridge; 3 @end 4 5 @implementation ExampleAppViewController 6 7 8 - (void)viewDidLoad { 9 10 11 UIWebView* webView = [[UIWebView allo

phoneGap OC给JS传值方法

参考链接:http://www.yelanxiaoyu.com/app/phonegap开发/phonegap-ios开发-oc调用js传递参数并获得返回值.html iOS: 在要传值页面(比如城市列表)中实现如下方法: - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; //通知名仅供测试,根据项目修改 [[NSNotificationCenter defaultCenter] post

OC与JS混合开发

随着iOS开发的成本增大,越来越多的公司开始使用html5混合开发软件了,因为使用原生的开发花费的成本跟时间都很大,而使用html5来搭建界面会方便很多,效率相对而言也提高了.虽然使用UIWebView实现的交互效果与原生效果相比还是会大打折扣,这类界面通常没有复杂的交互效果,所以现在主流应用大多采用混合开发.花了几天时间,把JS的基础全部看了一遍,又研究了一下巧神的书,写了一个iOS7以前的JS与OC混合开发的demo. 既然是html5页面搭建的布局,那么肯定是得有html5页面的,所以首先

android混合开发,webview的java与js互操作

android原生应用,用webview加载应用中的网页,并且java代码与js代码可以互相操作. 这是混合开发的基石,最基本也最重要的东西,实验代码在这里. 概括说说—— java调js:调用webView.load("javascript:someFunction()"); 这样可以调用webView里页面上的全局方法.这不是什么新鲜东西,你在网页中也可以这么做,试试在浏览器地址栏输入javascript:alert("427studio");也可以在浏览器地址

iOS开发——网络开发OC篇&OC与JS交互简单案例

OC与JS交互简单案例 网页开发中三个重要的知识,这里就不详细介绍了! Html:页面代码 Css:样式 javascript:响应 先来看一段html的简单代码,里面涉及了上面的三个部分(很简单) 1 <html> 2 <!--描述网页信息--> 3 <head> 4 <meta charset="UTF-8"/> 5 <title>hello world</title> 6 <script> 7 f

混合开发Js bridge新秀-DSBridge iOS篇

这个DSBridge 和我之前开发做的混合开发 用的方式 很相似,所以觉得很是不错,推荐给你大家. DSBridge-IOS:https://github.com/wendux/DSBridge-IOS DSBridge-Android:https://github.com/wendux/DSBridge-Android 与WebViewJavascriptBridge的对比请移步 DSBridge VS WebViewJavascriptBridge. 原文链接:http://www.jian

Flutter 混合开发 (交互通信)

上篇我们介绍了 Flutter 模块集成到已有的项目工程,接下来我们看看 Native 跟 Flutter 间的交互问题. 交互通信 Flutter 与原生之间的通信依赖灵活的消息传递方式: 1,Flutter 部分通过平台通道将消息发送到其应用程序的所在的宿主环境(原生应用). 2,宿主环境通过监听平台通道,接收消息.然后它会调用平台的 API,响应 Flutter 发送的消息. Flutter主动 调用 宿主环境 在 Flutter 中通过 MethodChannel 的 API 可以发送与

转载 【iOS开发】网页JS与OC交互(JavaScriptCore) OC -----&gt;JS

目标 本文介绍利用苹果在iOS7时发布的JavaScriptCore.framework框架进行js与OC的交互.我们想要达到的目标是: OC调用网页上的js方法 网页js调用APP中的OC方法 JavaSciptCore.framework框架介绍 JavaScriptCore是webkit的一个重要组成部分,主要是对js进行解析和提供执行环境.具体介绍请看这篇简书的文章:JavaScriptCore 使用 准备环境 创建一个名为JS与OC交互Demo的iOS工程.然后在storyboard添