关于JS与OC交互过程中,webVIew刷新,获取JS环境失败,导致交互失败的解决办法

    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,说明问题解决了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,002评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,777评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,341评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,085评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,110评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,868评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,528评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,422评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,938评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,067评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,199评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,877评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,540评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,079评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,192评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,514评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,190评论 2 357

推荐阅读更多精彩内容

  • 一、简介 近两年随着HTML5的迅速发展与日趋成熟,越来越多的移动开发者选择使用HTML5来进行混合开发,不仅节约...
    RainyGY阅读 1,872评论 1 12
  • 随着H5技术的兴起,在iOS开发过程中,难免会遇到原生应用需要和H5页面交互的问题。其中会涉及方法调用及参数传值等...
    Chris_js阅读 3,077评论 1 8
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,213评论 25 707
  • 本文主要记录的是《软件测试的艺术》一书的读书笔记以及相关的知识,欢迎大家提出自己的观点,进行讨论与分享。持续更新....
    _陈陌先生_阅读 6,268评论 3 37
  • 太急没有故事,太快成了事故,宁愿慢一点,克制一点,耐心一点,才能在生活的长局里找到最适合自己的那块拼图。这才是生活...
    佳猫21阅读 425评论 0 0