【学习资料】iOS开发之Objective-C与JavaScript交互
发布时间:2016年02月23日 14:25分 来源:博为峰教育网采编 关键词:iOS开发 | 上一篇 | 下一篇 |
4. iOS
iOS开发这边根据前端定义的方法名来写代码,但是有些时候web前端会让我们定义,但是我们定义好之后又要修改,这时候就会很烦啊。所以碰到三端交互的时候最好就是让web前端去定义方法名,iOS和Android根据web前端定义好的去写代码。Java ScriptCore中web页面调用原生应用的方法可以用Delegate或Block两种方法,此文以按Delegate讲解。
●JavaScriptCore中类及协议:
JSContext:给JavaScript提供运行的上下文环境
JSValue:JavaScript和Objective-C数据和方法的桥梁
JSManagedValue:管理数据和方法的类
JSVirtualMachine:处理线程相关,使用较少
JSExport:这是一个协议,如果采用协议的方法交互,自己定义的协议必须遵守此协议
●ViewController中的代码解释
自定义JSObjcDelegate协议,而且此协议必须遵守JSExport这个协议,自定义协议中的方法就是暴露给web页面的方法。在webView加载完毕的时候获取JavaScript运行的上下文环境,然后再注入桥梁对象名为Toyun,承载的对象为self即为此控制器,控制器遵守此自定义协议实现协议中对应的方法。在JavaStript调用完本地应用的方法做完相对应的事情之后,又回调了JavaStript中对应的方法,从而实现了web页面和本地应用之间的通讯。
●JavaScriptCore使用注意
JavaStript调用本地方法是在子线程中执行的,这里要根据实际情况考虑线程之间的切换,而在回调JavaScript方法的时候最好是在刚开始调用此方法的线程中去执行那段JavaStript方法的代码,iOS开发者在实际运用中开始没注意,就肯定会被坑惨。运行效果图如下所示:
图示2 运行效果图
●拦截协议
拦截协议这个适合一些比较简单的一些情况,不需要引入什么框架,只需要web前端配合一下就好。但是在具体调用哪一个方法上,以及在传值的时候可能会有些不方便,而且调用完后无法在回调JavaScript的方法。
总结
随着手机硬件的配置越来越强大和HTML5的兴起,一个App完全可以由web页面来写。现在已经有部分应用这么干了,iOS开发应该是遇见过的,如古诗文网。尽管比较少但是web页面和本地应用的交互不论是iOS开发者还是Android都是会有遇到的。关于iOS开发,还是比较推荐JavaScript Core,这样三端可以相对统一起来,写的时候都比较简单。随着时间的推移iOS8推出的WK Web View会逐渐成为主流,这个的功能更强大。拦截协议也只能说用到比较简单的一些情况吧,复杂的情况处理相互之间参数的传递还是比较麻烦的,而且这个不能回调JavaScript的方法,确实喜欢拦截协议的同学可以研究Web View JavaScript Bridge这个第三方库。
【文章摘自互联网】