博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ReactNative填坑记
阅读量:6671 次
发布时间:2019-06-25

本文共 1900 字,大约阅读时间需要 6 分钟。

本文迁移自本人简书账号, 后续不会再在简书更新文章, 具体原因可以查看

前言

公司的项目是从Objective C启动的, 期间经历了Swift的混编. 再考虑到后期Web模块的添加, 直接上了ReactNative, 从一个纯粹的项目变成了大杂烩. 这篇文章就是记录其中RN嵌入老工程的心酸史.

先开始熟悉RN的语法, 安装node, 安装react-native-cli, 安装... 还好有Homebrew神器, 否则光是环境问题就要命了

编辑package.json文件, 指定版本对RN的集成有一定的意义. 但说实话, 1000多个Contributor的RN确实不稳定, Bug也不少, 所以0.420.43等等其实没啥区别, 因为社区现在根本不敢把它做成1.0.

接下去就是各种npm包安装了, 这步没啥好说, 傻瓜化操作.

由于我们的工程使用了CocoaPods, 所以第一反应是使用pods安装, 幸运的是React提供了CocoaPods支持. 所以很快也搞定了.

头疼的问题终于来了. 我们使用了H5 Web App嵌入工程的方式, 但是调试的时候发现无论如何都无法postMessage成功. 总是报***Setting onMessage on a WebView overrides existing value of window.postMessage, but a previous value was defined***. 找了很久解决办法, 最后实在是没辙了, 只好修改源码, 把React工程的RCTWebView中的代码替换:

//    NSString *source = [NSString stringWithFormat://      @"window.originalPostMessage = window.postMessage;"//      "window.postMessage = function(data) {"//        "window.location = '%@://%@?' + encodeURIComponent(String(data));"//      "};", RCTJSNavigationScheme, RCTJSPostMessageHost//    ];    NSString *source = [NSString stringWithFormat:                        @"window.originalPostMessage = window.dispatchMessage;"                        "window.dispatchMessage = function(data) {"                        "window.location = '%@://%@?' + encodeURIComponent(String(data));"                        "};", RCTJSNavigationScheme, RCTJSPostMessageHost                        ];复制代码

才能保证本地和Web App, Web App和后台的通信互相不冲突. 可算把问题解决了, 终于可以愉快玩耍了.

接着, 让人头大的内存问题又来了.

由于本地使用TabViewController持有多个WebView模块, 导致内存大量增加, 特别是持有图片和视频的网页, 会导致Web狂增几十M甚至超过一百M.

联想到WKWebview在内存方面的改进, 积极引入该模块, 用的是Github上的, 终于把内存问题解决了.

程序员总是喜欢在解决一个问题的同时, 引入更多的问题. XD

因为WKWebView默认不保存和共享Cookies, 我们不幸地把原来可以正常使用的确认登陆状态的Cookies给丢了. ORZ

试了各种途径, 发现本地Web App只能自己手动传入.

所以每次登陆后尝试把Cookies解析并保存下来, 然后需要使用时, 将Cookies中需要使用的内容通过RN下发给本地Web App, 让其可以正常的保持登陆状态.

更多

后续其实还有各种坑需要一点一点趟, 想来这也是编程的乐趣, 找出问题 => 解决问题, 不断地前进, 永无止境.

所以建议后面的内容读者自己尝试后, 再进行补充吧. XD

转载地址:http://islxo.baihongyu.com/

你可能感兴趣的文章
nginx学习路线
查看>>
汇编入门(长文多图,流量慎入!!!)
查看>>
powershell常用
查看>>
[transferred] javascript exception handling.
查看>>
CoreOS实践(2)—在coreos上安装Kubernetes
查看>>
java学习 第四天 数组
查看>>
[SRM577]BoardPainting
查看>>
活用C++模板之traits
查看>>
二分图匹配学习记录
查看>>
TFS安装与管理
查看>>
[WorldWind学习]15.模型加载
查看>>
java发送短信
查看>>
c#学习笔记02——接口
查看>>
Html.Encode
查看>>
P4491 [HAOI2018] 染色
查看>>
HDOJ_ACM_Piggy-Bank
查看>>
【ZJOI2012】灾难
查看>>
如何通过使用Xmanager的图形化界面修改系统
查看>>
数据库MongoDB查询语句--持续更新
查看>>
ios 应用内支付(In-App Purchase,沙盒测试,后台验证)iap
查看>>