记录在苹果6p/6sp,10版本上,app内交互token等用户信息丢失的问题
一、问题产生背景:
在app内进入前端页面的时候,会在链接上携带token,以及在window对象全局添加字段,附带所有需要的基础信息,而此次问题就在于,初次进入没有问题,而在苹果6p/6sp,10版本上,调用支付宝app支付后,再返回app内,出现了window对象里所需要的信息丢失的情况,结果从支付返回,就会跳转到登录页面。
1、排查代码逻辑
(1)app会在每次重新刷新打开webview页面的时候,往window对象添加所需要的基础信息,经过app抓包,是正常添加的
(2)前端代码页面,每次页面刷新重载,都会从window对象先取相关信息,没有则从缓存获取,接着又判断window.name值是否有值,有则使用window.name的,最终设置缓存,返回信息。
(3)通过app协助页面断点,结果发现运行有问题的代码出现在这里,在执行window.carisokConfig = JSON.parse(window.name)之前,一切正常,但是在执行window.carisokConfig = JSON.parse(window.name),发生了错误而执行了catch部分,将需要的基础信息置空了。
(4)于是排查window.name,发现正常的机子下,断点抓到的window.name值如下:
而在苹果6p/6sp,10版本这类异常的机子下,断点抓到的window.name值如下:
很意外,没有代码对window.name进行格式化,也没添加nameStorage,但此处竟然异变了,百思不得其解....
二、解决思路:
添加代码,判断window.name值是否带了{},可以被Json.parse,否则将不赋值window.name给window.carisokConfig,防止window.carisokConfig被置空,当然是考虑这样限制不会给其他端,比如需要用到window.name的环境造成影响。