iOS 12 JS陣列Bug,可能帶來網際網路風波,附解決方案

明非發表於2018-09-19

喜氣洋洋,被安利使用iOS12,紅紅火火,更新最新版本。

網路上已經有人遇到 iOS 陣列相關的一個Bug,似乎會釀成整個網際網路風波。

Array state will be cached in iOS 12 Safari, is bug or feature? -- stackoverflow

iOS 12 JS陣列Bug,可能帶來網際網路風波,附解決方案

iOS 12 的 safari 有哪些變化嗎?今天發現了一個 javascript 的問題 - V2EX

iOS 12 JS陣列Bug,可能帶來網際網路風波,附解決方案

先來使用 IOS 12 體驗一下:

這是原網頁

iOS 12 JS陣列Bug,可能帶來網際網路風波,附解決方案

這是修復後的

iOS 12 JS陣列Bug,可能帶來網際網路風波,附解決方案

點選網頁上方的 Click Refresh,可以看到,網頁重新整理後,原網頁中,陣列的順序在第二次訪問網頁的時候,變成了倒序,即便是關閉網頁重新進來,也會是倒序的。如果反覆重新整理幾次,陣列將會反覆倒序。看起來是 Webview 將這個陣列快取了。

通過測試,Array的其他API並沒有這種問題,包括手動改變陣列中的元素順序,都不會出現這種問題,目前只發現了使用 reverse 出現這種問題。

當我們使用 reverse 去改變陣列順序的時候,那麼陣列的順序一定對我們來說特別重要,如果第二次進來還是最後的順序,這將對我們的應用產生非常大的影響!

緊急寫了一個檔案來應對這個問題,如果有必要,大家可以使用,如果有問題歡迎大家PR。 array-reverse-ios12

不知蘋果是否可以通過 HotPatch 來修復這個問題,如果不能那可能只能下次版本升級了。以蘋果的量級,這個版本可能會有影響很多使用者。

相關文章