Alex

js与iOS的交互(一)

感觉h5技术越来越火了,通过最近进一步对web的了解,我发现web相对靠编译语言开发的APP来说确实有很多优势,在实时性,灵活性及开发成本上都是APP原生开发比不上的。但是目前在用户体验上,肯定还是原生APP为佳的。但是随着技术体系的发展成熟,APP原生开发与web结合会不会成为未来APP开发的主流呢?貌似现在很多大公司就已经开始这么做了吧~

之前我总觉得webview是单独的一块内容,跟APP之间没有啥交互,但是在使用很多APP的时候,这些APP有些情况下貌似是与webview进行了一些交互的。最近接触web多,就顺便研究学习了一下js与iOS是怎么交互的。当然,有写的不对的地方请大牛顺便指导指导(求大牛带我飞啊!!!),博客我头像旁的标签上有我的联系方式!

通过查阅资料,原来UIWebview有一个名为

– (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;

的对象方法。它可以将一段js插入当前web页面中。所以我们就可以通过这个方法来达到很多目的。如以下代码实现

同时也可以使用document对象的一些方法对页面进行值操作,那么既然能插入js,那么我们也就可以自定义一些js操作了。如果js同时能传值给OC,那么我们不就能实现web与iOS的简单交互了吗?

通过了解,我知道了在UIWebViewDelegate协议中有如下代理方法

– (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

我们可以通过这个代理方法来实现一些交互。

那么让我们来实践一下,同样是在本地apache服务下创建test.html用模拟器来访问,我设计的代码如下:

text.html:

jsDemo(iOS):

我在web与iOS APP上各放了一个按钮,他们都可以调用web上getDict的js方法。我在getDict方法里拼装了一个url,并设计好自定义的协议,同时在webview的代理中进行解析,把request请求转化成字符串再按自定义的协议进行分割,第一次分割检测是否为OC方法的调用,如果是则进行第二次分割取值(第二次我本来想以:/分割的,但是我取出来字符串这个:号就不见了,所以最后没办法只有用::/分割了,有知道为什么的大牛求联系告知)。

我的协议传输的值有两个,一个是OC的方法名,一个是text/json,通过js转化的text/json我们就可以拿到js json对象的值了。在本次测试中,无论是点击web上的按钮还是点击iOS APP上的按钮我们都可以取到该json对象的值:

1F9C07F8-FC56-47BC-A117-EF3E640E6130

 

js与iOS的简单交互原理大概就是这样把,我们可以通过这种方式实现很多自定义的交互。

本人也是刚刚写博客,有写的不好的地方或者值得改进的地方请联系指导交流…..  联系方式在我博客头像旁的标签上。谢谢!

 

 

 

码字很辛苦,转载请注明来自Alex博客笔记《js与iOS的交互(一)》

评论

  1. Keith #1

    博主草粉不?!

    回复
    2015-12-4