美文网首页ios 进阶我爱编程
关于JS与OC交互过程中,webVIew刷新,获取JS环境失败,

关于JS与OC交互过程中,webVIew刷新,获取JS环境失败,

作者: 哇哇卡 | 来源:发表于2016-05-18 11:50 被阅读1257次

        js 具有的快速开发、跨平台、及时更新等的特点,但是用户体验真的差强人意;原生OC开发,开发周期长,更新不便捷等不足,但是良好的用户体验,是不容置疑的。因此,js与OC的混合开发便横空出世。

      本人刚接触混合交互,开始也是一头雾水,就总结一下身为小白的个人经验吧,仅以为参考,不足之处,欢迎指出。

        首先,在之前实现两者交互是棘手的,但是iOS7之后,苹果推出了JavaScriptCore.framework库(详细关于该库的介绍,可参照这两篇文章:http://justsee.iteye.com/blog/2036713  ,  http://blog.iderzheng.com/introduction-to-ios7-javascriptcore-framework/  ),使得交互变得容易了很多。

    关于交互的理解可参考下面文章:http://www.aiyingli.com/11998.htmlhttp://www.bubuko.com/infodetail-1024567.html

    详细的实现交互的细节,可参考以下文章,感觉写的还是很详细的,且提供了详细的demo源码。(我实现js  与oc 交互 的是采用模型的方式):

    http://blog.csdn.net/woaifen3344/article/details/42742893

    oc与JS交互:http://mp.weixin.qq.com/s?__biz=MzIzMzA4NjA5Mw==&mid=214063688&idx=1&sn=903258ec2d3ae431b4d9ee55cb59ed89#rd

    swift与JS交互:http://mp.weixin.qq.com/s?__biz=MzIzMzA4NjA5Mw==&mid=214070747&idx=1&sn=57b45fa293d0500365d9a0a4ff74a4e1#rd

    本文的重点就是在说一下刷新网页时js环境丢失,导致不能从js跳进SDK的问题。

    我是先建立JS模型:

    贴出来NTalkerJSInfoModel.h 的代码:

    NTalkerJSInfoModel.h的代码 NTalkerJSInfoModel.m: NTalkerJSInfoModel.m的代码

    上面的openChatWindow:方法是JS将要调用OC中的方法,即JS中也有openChatWindow这个方法,JS会传进params参数oc会将这些参数以通知的方式传给OC(oc 就可以拿到这些参数该干嘛干嘛就好了),并给JS返回一个int值,js 通过该返回值判断调用结果(返回值这是我们自己的需求)。

    然后,我建立一个控制器TestWebViewController,用来打开webVIew:

    首先在该控制器中要注册通知监听:

    注册监听

    在openSDKChat中就可以实现自己需要打开OC中方法了。

    最后,是本文的重点,我获取当前JS环境的方法一开始是在- (void)webViewDidStartLoad:(UIWebView *)webView 这个代理方法中实现的:

    获取当前JS环境

    但是测试发现,如果没有重新打开一个webView,而是对WeBView进行刷新,或者在同一个webVIew重新打开另一个网址。就会失去JS环境,导致,JS不调用openChatWindow方法,无法调用OC(SDK)中的方法!

    我的解决办法是:

    在-(void)webViewDidFinishLoad:(UIWebView*)view{}方法中再次获取当前JS环境:

    再次获取一遍JS环境

    不知道这是不是合理的解决办法,但是经测试,刷新网页后,还是能打开SDK,说明问题解决了。

    相关文章

      网友评论

      • c1adca3ce1ab:这主题分享给我😊
        c1adca3ce1ab: @哇哇卡 要ide

        主题
        配色
        哇哇卡:@分享生活之美 这是刚了解那块时候写的,没啥深度,:sweat_smile:你可以参考提供的几条链接

      本文标题:关于JS与OC交互过程中,webVIew刷新,获取JS环境失败,

      本文链接:https://www.haomeiwen.com/subject/ngcwrttx.html