原文做者:Chromium team
編譯:鬍子大哈 javascript翻譯原文:huziketang.com/blog/posts/…
英文鏈接:Chromium policy on JavaScript dialogsjava
轉載請註明出處,保留原文連接以及做者信息react
JavaScript 誕生於 1995 年。第一個版本的 JavaScript 中窗口對象的幾個方法是:alert(),confirm(),和 prompt()。android
這在當時的環境是很合適的,可是隨着時間的推移,同期的 API 對於現代瀏覽器來說存在不少問題。由於這種 JavaScript 對話框模式是 app 模式,即此時 JavaScript 引擎是暫停狀態,直到獲得用戶反饋。也正是由於這種 app 模式,在瀏覽器中很傷用戶體驗。git
正因如此,Chromium 團隊強烈建議不要使用 JavaScript 對話框。github
有不少替代對話框的方案。web
對於替換 alert()/confirm()/prompt()
,有不少可選方法。須要提醒用戶(如日曆網站),那麼可使用 Notifications API。須要獲取用戶輸入,可使用 HTML
。須要 XSS 概念驗證,可使用開發工具的 console.log(document.origin)
。chrome
至於 onbeforeunload
,須要注意的是它已經不可靠了。正如 Ilya Grigorik 所指出的:「在移動平臺上,你不能依賴於 pagehide
,beforeunload
和 unload
事件」。若是你想保存狀態,應該使用 Page Visibility API。瀏覽器
網頁中指定 onbeforeunload
字符串的功能在 Chrome 51 中就刪除了(從 Safari 9.1 和 Firefox 4 版本之後它們也刪除了)。app
alert()/confirm()/prompt()
對話框也正在修改,不一樣於 app 模式,當瀏覽器 tab 發生切換時,它們會自動消失(Safari 9.1 已經這麼作了)。這一功能在金絲雀版和開發者版已經徹底支持了,在 beta 和 穩定版中部分支持。可是能夠確定的是未來必定會支持的更多。
對於 beforeload
對話框目前的計劃是須要用戶的許可才能顯示(這將會改變 beforeload
的調用方法)。在這一點上 Chromium 和 Firefox 達成了一致,在 Firefox 44 中將會應用這一變化)。
正是由於發生了這些變化,若是你的網站使用了對話框(dialog),強烈建議你使用前面所提到的那些替代方案,以防對你產生影響。
Chromium 此文一出,引發衆開發者的熱議。這裏挑出一些典型的評論和觀點。
顯然,網友們反對聲音大於支持的聲音。不知道你是怎麼看呢?歡迎你們一塊兒討論。
我最近正在寫一本《React.js 小書》,對 React.js 感興趣的童鞋,歡迎指點。