응용 프로그램의 상호 작용 토큰 정보 손실 문제에서 애플 6P / 6sp, 10 버전, 다른 사용자에 기록

첫째, 문제의 배경 :

    앞 페이지를 입력 할 때, 그것은 응용 프로그램 토큰에있는 링크를 수행하며, 모두와 함께 글로벌 윈도우 객체에 필요한 기본 정보를 필드를 추가,하지만 문제는 초기 항목 아무 문제 없지만, 애플 6P / 6sp, 10 버전, Alipay의 지불 응용 프로그램을 호출 한 다음 응용 프로그램 내에서 복귀 한 후, 필요한 윈도우 객체에서 정보의 손실이 있었다, 지불에서 반환 된 결과, 그것은 로그인 페이지로 이동합니다.

1 코드 로직 조사

(1) 응용 프로그램은 개체를 캡처 응용 프로그램 후, 기본 정보가 필요한 창에 추가 할 때 페이지가 웹보기를 열 때마다 새로 고쳐집니다, 추가 정상입니다

(2) 전단 코드 페이지는, 각 페이지 리프레시 과부하는 궁극적으로 캐시 세트 중고 window.name가 먼저하지 취득 캐시에서, 윈도우 오브젝트의 정보를 받아, 다음 값 window.name 값인지 여부를 판정한다 정보를 반환합니다.

 

 응용 프로그램의 도움말 페이지 나누기를 통해 (3) 문제의 코드를 실행하는 것으로는 실행에, 여기에 표시 . CarisokConfig = JSON . 구문 분석 ( . 이름 이전을), 모든 것이 정상이지만, 실행의 . CarisokConfig = JSON . 구문 분석 ( . 이름 캐치의 구현의 일부, 기본 정보가 빈 설정하는 데 필요한 동안) 오류가 발생했습니다.

 

 (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的环境造成影响。

 

추천

출처www.cnblogs.com/ahao68/p/12170447.html