1.現象
個別機器突然出現Chrome訪問我司產品異常,本該通過接口獲取的數據沒有呈現,之前都是好好的,而且其他機器同樣用同版本Chrome訪問正常。
出現問題的機器重裝Chrome問題依然存在,直到重裝了操作系統才恢復正常。
2.分析
打開Chrome開發者工具發現,部分接口請求一直處於pending狀態,進一步分析發現處於pending狀態的請求是fetch和vue-resource發出的,jquery的ajax請求卻是正常的。(不要問我為什么一個系統中存在這么多種請求方式-_-)
3.探索
首先,嘗試用最新的版本替換。
幸運的是,vue-resource用當前最新版本(v1.3.1)替換后就正常了。
至於fetch,因為考慮兼容低版本的Chrome,沒有用Chrome自帶的fetch,而是用了fetch polyfill(https://github.com/github/fetch),更新了當前最新版本(2.0.3)后問題依然存在。
於是乎我就開始看fetch polyfill的源碼了。
if ('responseType' in xhr && support.blob) { xhr.responseType = 'blob' }
雖然看不出為什么會導致個別機器Chrome有問題,但是因為我們的接口只返回文本數據,我就把responseType改成text,問題解決了!
if ('responseType' in xhr) { xhr.responseType = 'text' }