记录在苹果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的环境造成影响。

 

posted @ 2020-01-09 11:20  奋斗中的小人物  阅读(436)  评论(0编辑  收藏  举报