为什么不推荐使用 window.showModalDialog?
来自http://tjvantoll.com/2012/05/02/showmodaldialog-what-it-is-and-why-you-should-never-use-it/,
总的来说,将原生对话框实现放入浏览器的想法是一个非常好的想法,但这window.showModalDialog
是一个糟糕的实现,它充满了问题和糟糕的浏览器支持。(...)
请注意, (...) [使用showModalDialog
] 的模式对话框是完整的 HTML 文档,而不是注入的片段。这是window.showModalDialog
. 它实际上只是两个完全独立的窗口相互通信。你有两个独立的窗口和 DOM 的事实意味着你不必担心 JS 和 DOM 冲突,如果你有很多糟糕的 JavaScript 和混乱的全局范围,这很有吸引力。但大多数情况下,这只会增加不必要的复杂性,使浏览器实现复杂化,并导致许多错误。(...)
虽然模态对话框阻止用户与原始窗口交互很重要,但没有理由不允许用户与其他选项卡或本机浏览器控件(后退/前进、收藏夹、地址栏等)进行交互。(...) 这对最终用户来说实际上是一个很大的烦恼。(...)
的调试体验window.showModalDialog
很糟糕。(...)你基本上被迫像 1999 年一样警觉,以确定发生了什么。(...)
目前没有主要的移动浏览器支持window.showModalDialog
,所以如果你正在寻找任何类型的平板电脑/移动支持,你需要远离。
改用什么?
HTML5 引入了新<dialog>
元素,可用于显示对话框,包括模态对话框。
例如:
<dialog id="myDialog">
Foo bar
<button id="hide">Close</button>
</dialog>
<button id="show">Show Dialog</button>
var dialog = document.getElementById('myDialog');
document.getElementById('show').onclick = function() { dialog.showModal(); };
document.getElementById('hide').onclick = function() { dialog.close(); };
演示
问题是: