关于混合开发,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吧”

集体怎么弄可以参考看我另外一篇博文:http://www.cnblogs.com/canghaixiaoyuer/p/4713198.html

 

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

    https://github.com/marcuswestin/WebViewJavascriptBridge

 

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

    其实这个方法就是WebViewJavascriptBridge和cordova中用也有用的的js到oc调用的方法之一,只是经过封装好了以简单的方式提供给开发者。

 

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

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

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

    另外在混合开中,如果有模块化的html内容,需要App这边动态的处理这段HTML内容用于展示在UIWebView上。可使用GRMustache或者MGTemplateEngine这2个开源项目。GRMustache是一个类似templateEngine的html渲染工具,可以更加有效的帮助大家完成数据生成HTML的过程。他们的资料都可以在github上有详细说明。

   直达地址:https://github.com/groue/GRMustache

  其中GRMustache被用在开源中国iOS客户端项目里。大家可以下载参看他们的代码学习下。

   无论是GRMustache,还是templateEngine。他们都帮助大家避免了使用

    -[NSString stringByReplacingOccurrencesOfString:withString:]:
方法时,繁琐且频繁低效的字符串操作。可以更加优雅高效的生成HTML文件。具体怎么实现就不在赘述。都可以到对应github上学习。在这只是做引导。

 

大概目前个人就知道先这些,博文中会有错误,肯定还有很多需要学习的地方,希望看到文章的人多给建议,多多学习。

 

 

 
 
 
 
posted @ 2015-08-07 20:32  沧海小鱼儿  阅读(1804)  评论(1编辑  收藏  举报