为什么不推荐使用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冲突,如果你有很多糟糕的JavaScript 与混乱的全局范围,这是吸引人的。但大多数情况下,这只是增加了不必要的复杂性,使浏览器实现复杂化,并且造成了一些bug。 (...)
虽然是很重要的模态对话框防止用户 与原窗口进行交互,我们没有理由对用户 不应该被允许与其他标签或浏览器原生 控件交互(前进/后退,收藏夹,地址栏等)。 (...)这是 实际上是一个很大的烦恼,最终用户。 (...)
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(); };
Demo
的问题是:
阅读:[window.showModalDialog:它是什么,为什么你不应该使用它(http://tjvantoll.com/2012/05/02/showmodaldialog-what-it-is-and-why-你应该永远不会使用它/),[dev.opera:从Web平台删除showModalDialog](http://dev.opera.com/blog/showmodaldialog/) – Bergi
“我需要一个真正的模式,暂停JavaScript执行。” Window.showModalDialog()会因其暂停JavaScript执行而精确折旧。暂停javascript执行很难安全地实现,并以某种方式提供响应式浏览器。这与为什么同步XMLHttpRequest也被折旧相似。 –