2022.8.14
先講結論:
safari 的環境的new Date(),吃的參數字串比chrome嚴格
// chrome
new Date('2020-12-01 12:00:00')//pass
new Date('2020-12-12T12:00:00')//pass//safari
new Date('2020-12-12 12:00:00')//error
new Date('2020-12-12T12:00:00')//pass
找尋程式裡new Date()部分,並檢查格式,修正格式,就能解決問題。
情境:
今天遇到客戶說,產品頁面打開一遍白,心理OS 怎麼可能?
看了客戶截圖,還真的是一遍白, ゚Д゚) ゚Д゚) ゚Д゚)
但有注意到一件事,客戶是用safari,就知道又是他在作怪
走了個ie,還有個safari==。
環境:vue3+pinia+typescritp
debugger:
開了safari 把開發者模式打開,只顯示了一行錯afari
他只噴了這行
Unhandled Promise Rejection: RangeError: Invalid time value
程式哪行錯,哪隻檔案錯 完全不知道 這樣怎麼找啊(/‵Д′)/(/‵Д′)/
問了google 大神,大概鎖定問題是出在safari new Date 部分,一看畫面白的一想到就是渲染問題,所以就解決方式就是從vue 程式進入點 main.ts 開始,一路到App.vue 到最後渲染的組件一層一層的設中斷點…
最後發現出在某個組件,其組件有一段
toDate 是一隻自己寫的function
export const toDate = (date: string) => format(new Date(date), 'yyyy-MM-dd')
大概是new Date 時出錯了,所以改造,拆分邏輯,並加入try catch,將空白替換成T
export const getNewDate = (date: string): Date => {
let _date = new Date()
try {
_date = new Date(date.replace(/ /g, 'T'))
} catch (error) {
console.warn('@@newDateTimeError:', date)
}
return _date
}export const toDate = (date: string) => format(getNewDate(date), 'yyyy-MM-dd')