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/.

Ответ 4

Обратите внимание, что в Chrome 2 есть ошибка, которая предотвращает правильную загрузку showModalDialog(). Появится всплывающее окно, но контент никогда не загружается.

Еще одна причина избежать использования showModalDialog().

Ответ 5

showModalDialog() хорошо работает в Internet Explorer, Firefox (3 и выше) Работает в Chrome, но всплывающее окно не является моделью (вы можете перейти в родительское окно)

Ответ 6

Обратите внимание, что пока вы можете показать модальное из любого всплывающего окна, вы не можете использовать window.open из диалогового окна модели в некоторых браузерах (IE, Safari).