Ответ 1
Почему 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(); };
Проблемы: