Vue單頁面在ios10系統上出現白屏的bug

一個bug
你用Vue做了一個單頁面應用,它在一切設備上都工作正常,但是突然有一天,你的測試和你說,這個網站在iOS 10上跑不起來,怎么辦?于是你打開你電腦上的Chrome瀏覽器,工作正常;打開Safari瀏覽器,工作正常;打開iOS 11手機,工作正常;打開各種安卓手機,工作正常。但是在iOS 10的手機上,不論是微信瀏覽器,還是Safari瀏覽器,都只能看見一個白白的屏幕。于是你把手機連上電腦,在電腦端的Safari里,看到了如下的錯誤:SyntaxError: Cannot declare a let variable twice: 'e'.
可是你沒有寫過這樣的代碼,你怎么可能把一個名為e的變量定義兩次?你打開代碼,看到了這樣美麗的代碼:let e = e => {console.log(e);for (let e of [1, 2, 3])console.log(e);
};
雖然這段代碼看上去比較奇怪,但是語法上有任何問題嗎?哥就愿意定義一個名為e的函數,而這個函數的唯一入參名稱也為e,并且哥的for循環體里還愿意再定義一個名稱為e的變量,es6的變量作用域允許我們這樣做,此e和彼e互不干擾,不對嗎?況且很顯然,這段代碼不是人寫的,而是我們在執行npm run build的時候編譯產生的。其實我們都沒有錯,我們也沒寫錯,uglify也沒搞錯,錯的是Safari本身。他們在第十七萬一千零四十一號bug中承認了自己的錯誤:We incorrectly throw a syntax error when declaring a top level for-loop iteration variable the same as a parameter
當你定義一個與參數同名的for循環迭代變量時,我們錯誤地認為這是一個語法錯誤。
看,多么謙遜的態度。所以你也不用太糾結于一個白屏幕,只要找到解決方法就好了。方法其實很簡單:進入build文件夾;
找到webpack.prod.conf.js文件;
在UglifyPlugin的定義里添加關于mangle的選項,使它變成下面這個樣子:new UglifyJsPlugin({uglifyOptions: {compress: {warnings: false},  mangle: { // 加入這玩意兒即可safari10: true}},sourceMap: config.build.productionSourceMap,parallel: true}),
然后這個世界就太平了。為了避免所有這些不必要的麻煩,我給vue-cli提的一個PR已被接受,在工具里缺省加入了這個選項,這樣大家以后就不會遇到這個問題了。關于這個bug的問題描述在這里,解決方案在這里,給vue-cli提的PR在這里,供深挖細掘的人參考。另一個bug
實際上,除此之外,還有另外一個bug也會影響到vue網頁在iOS 10上的展現,特別是當你用到廣為流傳的Swiper插件的時候。這是因為Swiper插件中用到了ES6的語法a = b ** c,a是b的c次方,而iOS 10的Safari里不認識這樣的語法,認為這是一個錯誤,所以你需要讓Swiper經過babel的包裝,而缺省狀態下babel是不對node_modules里的模塊進行編譯的。相關的issue見這里。解決方法是在項目根目錄下新建一個文件vue.config.js,在里面添加如下語句:module.exports = {chainWebpack: config => {config.rule('js').include.add(/node_modules\/(dom7|swiper)\/.*/)}
}
至止為止,通常情況下你的vue網頁已經可以完美地在iOS 10上的Safari里展現了。

?

轉載于:https://www.cnblogs.com/hjptopshow/p/9848908.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281810.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281810.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281810.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HTTP/2 規格制定完成

IETF HTTP工作者的負責人Mark Nottingham在其博客上宣布HTTP/2規格制定完成,接下來將是分配RFC編號和正式發表。HTTP是Web的核心技術之一,相比HTTP/1,HTTP/2的改進之處包括更快的頁面加載;更長久的連接;服務器推送&…

【習題 6-7 UVA - 804】Petri Net Simulation

【鏈接】 我是鏈接,點我呀:) 【題意】 在這里輸入題意 【題解】 模擬就好 【代碼】 /* 1.Shoud it use long long ? 2.Have you ever test several sample(at least therr) yourself? 3.Can you promise that the solution is right? At least,the main ideal 4.use the p…

easyui combobox java_Easyui的combobox實現動態數據級聯效果

實現從數據庫中動態獲取對應的list集合,并在easyui的combobox中顯示出來。實現的效果如下:1、數據庫的表設計如圖所示2、數據庫中填寫相關的數據,如圖所示。如圖所示【法律法規】是所屬欄目,因此他的字段parentid是0。【中國公民出…

為什么應該默認將 Class 設為密封類?

前言最近在 dotnet/sdk 上看到一個 Issue,它提出了一個有趣的要求:默認情況下將類設置為密封類(Sealed)?什么是密封類?默認情況下,類是開放的,這意味著它是可以被繼承的。例如:class BaseClass …

Spring工具類的使用

2019獨角獸企業重金招聘Python工程師標準>>> Spring-core中提供了大量的工具類,常用的有StringUtils、ObjectUtils、NumberUtils、Base64Utils等,Spring工具類在spring-core.jar中的org.springframework.util包下。 org.springframework.util…

python作業高級FTP(第八周)

作業需求: 1. 用戶加密認證 2. 多用戶同時登陸 3. 每個用戶有自己的家目錄且只能訪問自己的家目錄 4. 對用戶進行磁盤配額、不同用戶配額可不同 5. 用戶可以登陸server后,可切換目錄 6. 查看當前目錄下文件 7. 上傳下載文件,保證文件一致性 8…

java用log.i打印數組_java-使用JSCH將ssh日志打印到列表(android)

我一直試圖通過將包含我目錄名稱的log.i字符串值添加到數組中,然后使用數組適配器通過listView打印它們,來在listView中的目錄中打印項目.但是,當我嘗試運行該應用程序時,它將打印包含目錄名稱的日志,但不會在listView上打印任何內容.有什么幫助嗎?這是我的代碼&…

Edge 瀏覽器被爆存在 XSS 繞過漏洞

來自知名安全測試套件Burp Suite廠商PortSwigger的安全專家Gareth Heyes近日在微軟Edge瀏覽器的內置XSS過濾器存在繞過漏洞,這就意味著盡管微軟在Edge瀏覽器中進行了大量的安全策略部署,但用戶瀏覽網頁的時候依然有可能讓攻擊者通過這種方式在Edge瀏覽器…

來了!十大更新

面向 Windows 10 正式版用戶,微軟發布了 2022 年 10 月更新。Windows 10 版本 21H1 更新后操作系統內部版本升級至 Build 190432130/2132(帶外更新)。Windows 10 版本 21H2 更新后操作系統內部版本升級至 Build 19044.2130/2132(帶…

使用ansible 批量分發SSH Key

先確保你電腦有ansible,我是mac的用brew安裝,其他可用yum安裝brew search ansiblebrew install ansible我已經安裝好2.7了生成下自己的key,一路回車ssh-keygen -t rsa編輯host,添加需要增加ssh key的機器vi /etc/ansible/hosts【hostgroup】我…

使用Git簡單筆記

這里只是作為簡單的筆記整理,第一次使用的推薦先看一下廖大的教程,內容很多很細,可以邊看邊練、看不懂的地方先記著、爭取七七八八看下來。 心情不佳的分割線 廖雪峰的git教程: https://www.liaoxuefeng.com/wiki/001373951630592…

java中的path類_詳談java中File類getPath()、getAbsolutePath()、getCanonical的區別

簡單看一下描述,例子最重要。1、getPath():返回定義時的路徑,(就是你寫什么路徑,他就返回什么路徑)2、getAbsolutePath():返回絕對路徑,但不會處理“.”和“..”的情況3、getCanonicalPath():返…

部署站點支持Https訪問的方法

1、申請公鑰和私鑰,放到服務器 2、編輯default配置文件 改為 加上證書路徑 ps:泛域名支持admin.xxx.com、demo.xxx.com等等,而免費的Lets Encrypt僅支持www.xxx.com和xxx.com 整理自www.laravist.com轉載于:https://www.cnblogs.com/lamp01/p/6952464.ht…

.NET Core Onvif協議C#教程系列之XiaoFeng.Onvif組件庫

物聯網IOT大背景下音視頻領域的Onvif 協議在2008年成為全球性的開放接口標準。于是一批開發者涌入該技術領域使用各種編程語言對其改造升級封裝。因為是國際標準,所以規范內容比較多,物聯網領域涉及又廣,所以研究協議是一個很耗時間的一項工作…

php異常處理的深入

引出 如果你調一個類,調用時數據驗證時報了個錯,你會以什么方式返回 數組,布爾值? 數組這個可以帶錯誤原因回來,那布爾值呢? 返回了個 false, 報錯時把錯誤放在類變量里?還是專門用一個獲取錯誤…

C# 跨平臺的支付類庫ICanPay

隨著微軟的開源,越來越多的項目支持跨平臺,但是各種支付平臺提供的類庫,又老又不支持跨平臺,吐槽下,尤其是微信,還有好多坑,于是ICanPay誕生了,今天就來講ICanPay是什么,…

.NET CORE 下收發郵件之 MAILKIT

背景利用代碼發送郵件在工作中還是比較常見的,相信大家都用過SmtpClient來處理發送郵件的操作,不過這個類以及被標記已過時,所以介紹一個微軟推薦的庫MailKit來處理。MailKit開源地址:https://github.com/jstedfast/MailKit需要郵…

【20181026T2】**圖【最小瓶頸路+非旋Treap+啟發式合并】

題面 【錯解】 最大最小?最小生成樹嘛 蛤?還要求和? 點分治? 不可做啊 寫了個MST暴力LCA,30pts,140多行 事后發現30分是給dijkstra的 woc 【正解】 樹上計數問題:①并查集②啟發式合并③點分治 …

java實現關鍵詞云_Java synchronized 關鍵詞詳細說明

Java synchronized 關鍵詞詳細說明外置專業技能點系統進程和進程的定義進程建立方法進程的情況情況變換線程安全的定義synchronized 關鍵詞的幾類使用方法裝飾非靜態數據組員方式synchronized public void sync(){}裝飾靜態數據組員方式synchronized public static void sync()…

損失函數(Loss function) 和 代價函數(Cost function)

1損失函數和代價函數的區別: 損失函數(Loss function):指單個訓練樣本進行預測的結果與實際結果的誤差。 代價函數(Cost function):整個訓練集,所有樣本誤差總和(所有損失函數總和)的平均值。(這一步體現在propagate()…