2009-04-08 19 views
11

¿En qué situación se desea usar la función window.showModalDialog? Parece que puede hacer exactamente lo mismo con la función window.open y algunos parámetros que eliminan parte del cromo (navegación, barra de direcciones, etc.)window.showModalDialog vs. window.open

¿Cuándo le gustaría usar window.showModalDialog y window.open? ?

Respuesta

10

Los diálogos modales son diálogos que una vez abiertos por el padre, no le permiten centrarse en el elemento principal hasta que se cierre el cuadro de diálogo.

Se podría utilizar un cuadro de diálogo modal para un formulario de inicio de sesión, formulario de edición, etc. en el que desea tener una ventana emergente para la interacción del usuario pero no permitir al usuario volver a la ventana que abrió la ventana emergente.

Como nota al margen, creo que solo Internet Explorer implementa window.showModalDialog, por lo que ese tipo de limitaciones limita su uso de la misma.

+0

FF3 finalmente lo tiene. Chrome también lo hace, pero no creo que sea realmente modal allí (puede hacer clic detrás de él). –

+0

un parámetro para window.open puede hacerlo modal – geowa4

+1

Según https://developer.mozilla.org/en/window.open: modal: Comenzando con Mozilla 1.2.1, esta característica requiere el privilegio UniversalBrowserWrite. Sin este privilegio, es ignorado. –

3

Tenga en cuenta que hay un error en Chrome 2 que impide que showModalDialog() se cargue correctamente. Aparece la ventana emergente, pero el contenido nunca se carga.

Una razón más para evitar el uso de showModalDialog().

0

showModalDialog() funciona bien en Internet Explorer, Firefox (3 o más) Obras en Chrome, pero emergente no es el modelo (se puede ir a la ventana padre)

17

Ha sido un par de años desde que esta pregunta se formuló originalmente y las cosas han cambiado un poco desde entonces. window.showModalDialog ahora es oficialmente standardized as part of HTML5 y es compatible con IE, Firefox 3+, Chrome (albeit buggy) y Safari 5.1+.

Desafortunadamente window.showModalDialog todavía está plagado de una serie de problemas.

  • Los diálogos modales están bloqueados como ventanas emergentes de manera predeterminada en Firefox, Chrome y Safari.
  • Los cuadros de diálogo modales en Chrome son defectuosos y no son realmente modales: consulte http://code.google.com/p/chromium/issues/detail?id=16045 & http://code.google.com/p/chromium/issues/detail?id=42939.
  • Todos los navegadores, excepto Chrome, bloquean al usuario para que no interactúe con toda la ventana (favoritos, controles del navegador, otras pestañas, etc.) cuando se abre un cuadro de diálogo modal.
  • Son difíciles de depurar porque detienen la ejecución de JavaScript en la ventana principal mientras se espera que se complete el diálogo modal.
  • No hay navegadores para dispositivos móviles compatibles con window.showModalDialog.

Por lo tanto, todavía no es una buena idea usar window.showModalDialog. Si necesita que la ventana abierta sea modal (es decir, el usuario no puede interactuar con el resto de la página hasta que se ocupe del diálogo), le sugiero que use jQuery UI's dialog plugin.

window.open funcionarán para ventanas no modales pero me quedaré con el diálogo de la interfaz de usuario de jQuery porque la apertura de nuevas ventanas tiende a molestar a los usuarios.

Si te interesa escribo sobre esto con más detalle en mi blog - http://tjvantoll.com/2012/05/02/showmodaldialog-what-it-is-and-why-you-should-never-use-it/.

0

Tenga en cuenta que aunque puede mostrar modal desde cualquier ventana emergente, no puede usar window.open desde un diálogo de modelo en algunos navegadores (IE, Safari).

Cuestiones relacionadas