Window.showModalDialog vs. window.open
Какова ситуация, когда вы хотите использовать функцию window.showModalDialog? Это означает, что вы можете сделать то же самое с функцией window.open и несколькими параметрами, которые удаляют некоторые из хром (навигация, адресная панель и т.д.)
Когда вы хотите использовать window.showModalDialog и window.open?
Ответы
Ответ 1
Модальные диалоги - это диалоговые окна, которые когда-то открываются родителем, не позволяют вам сосредоточиться на родительском до тех пор, пока диалог не будет закрыт.
Можно использовать модальный диалог для формы входа, формы редактирования и т.д., где вы хотите иметь всплывающее окно для взаимодействия с пользователем, но не позволяете пользователю вернуться в окно, открывающее всплывающее окно.
Как замечание, я полагаю, что только Internet Explorer реализует window.showModalDialog
, поэтому это ограничивает его использование.
Ответ 2
Прошло несколько лет с тех пор, как этот вопрос изначально был задан, и с тех пор ситуация немного изменилась. window.showModalDialog
теперь официально стандартизирован как часть HTML5 и поддерживается в IE, Firefox 3+, Chrome (хотя и багги) и Safari 5.1+.
К сожалению, window.showModalDialog
по-прежнему страдает от ряда проблем.
- Модальные диалоги блокируются как всплывающие окна по умолчанию в Firefox, Chrome и Safari.
- Модальные диалоги в Chrome являются ошибочными и не являются действительно модальными - см. http://code.google.com/p/chromium/issues/detail?id=16045 и http://code.google.com/p/chromium/issues/detail?id=42939.
- Все браузеры, кроме Chrome, блокируют взаимодействие пользователя со всем окном (избранное, элементы управления браузером, другие вкладки и т.д.), когда модальный диалог завершен.
- Они отвратительны, потому что они останавливают выполнение JavaScript в родительском окне, ожидая завершения модального диалога.
- Поддержка мобильных браузеров
window.showModalDialog
.
Поэтому по-прежнему не рекомендуется использовать window.showModalDialog
. Если вам нужно, чтобы открытое окно было модальным (то есть пользователь не может взаимодействовать с остальной частью страницы, пока не справится с этим диалогом), я бы предложил использовать диалоговое окно jQuery UI плагин.
window.open
будет работать для не модальных окон, но я бы придерживался диалогового окна JQuery UI, потому что открытие новых окон вызывает раздражение пользователей.
Если вам интересно, я пишу об этом более подробно в своем блоге - http://tjvantoll.com/2012/05/02/showmodaldialog-what-it-is-and-why-you-should-never-use-it/.
Ответ 3
showModalDialog()
в настоящее время стандартизируется как часть HTML5. Третий аргумент (для дополнительных опций) отсутствует в версии HTML5 и (безопасно) игнорируется Safari и Chrome.
http://dev.w3.org/html5/spec//user-prompts.html#dialogs-implemented-using-separate-documents
Ответ 4
Обратите внимание, что в Chrome 2 есть ошибка, которая предотвращает правильную загрузку showModalDialog(). Появится всплывающее окно, но контент никогда не загружается.
Еще одна причина избежать использования showModalDialog().
Ответ 5
showModalDialog()
хорошо работает в Internet Explorer, Firefox (3 и выше)
Работает в Chrome, но всплывающее окно не является моделью (вы можете перейти в родительское окно)
Ответ 6
Обратите внимание, что пока вы можете показать модальное из любого всплывающего окна, вы не можете использовать window.open из диалогового окна модели в некоторых браузерах (IE, Safari).