爲什麼不推薦使用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也被折舊相似。 –