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
。実際には、互いに通信する 2 つの完全に独立したウィンドウにすぎません。2 つの別個のウィンドウと DOM があるという事実は、JS と DOM の競合を心配する必要がないことを意味します。これは、雑然としたグローバル スコープを持つ悪い JavaScript がたくさんある場合に魅力的です。しかし、ほとんどの場合、これは不要な複雑さを追加し、ブラウザーの実装を複雑にし、多くのバグの原因となります。(...)
モーダル ダイアログによってユーザーが元のウィンドウを操作できないようにすることは重要ですが、ユーザーが他のタブやネイティブ ブラウザー コントロール (戻る/進む、お気に入り、アドレス バーなど) を操作できないようにする理由はありません。(...) これは、実際にはエンド ユーザーにとって大きな迷惑です。(...)
のデバッグ体験window.showModalDialog
はひどいものです。(...) 何が起こっているのかを判断するために、基本的には 1999 年のように警告する必要があります。(...)
現在、主要なモバイル ブラウザはサポートwindow.showModalDialog
されていないため、何らかの種類のタブレット/モバイル サポートを探している場合は、近づかないようにする必要があります。
代わりに何を使用しますか?
<dialog>
HTML5 では、モーダル ダイアログを含むダイアログを表示するために使用できる新しい要素が導入されています。
例えば:
<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(); };
デモ
問題は次のとおりです。
- ブラウザのサポートは現在のところごくわずかですが、ポリフィルがあります。
- JS の実行を一時停止しません。