English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Problemas de ventana modal en js![window.dialogArguments]

Hace unos días, me encontré con un problema de compatibilidad del navegador mientras trabajaba en un proyecto. Después de resolverlo, lo registro aquí y también publico información sobre modalidades!

Descripción detallada del problema:

Al abrir una ventana emergente en el navegador Firefox, la página secundaria contiene una paginación. Al hacer clic en la página siguiente, la página secundaria se actualiza y luego el objeto window.dialogArguments se pierde, alert muestra undefined [Solución en el tercer punto]

Mientras trabajaba en un sitio web últimamente, necesité funcionalidades de ventanas modalizadas y también me encontré con algunos problemas, por lo que busqué información para resolverlos

1Métodos varios para abrir ventanas emergentes:

a.window.open(pageURL,name,parameters);
El método b.window.showModalDialog() se utiliza para crear un cuadro de diálogo modal que muestra contenido HTML (IE 4+es compatible)
El método c.window.showModelessDialog() se utiliza para crear un cuadro de diálogo no modal que muestra contenido HTML (IE 5+es compatible)

2.Problema de estilo de visualización: lo utilizado es window.showModalDialog(), la ventana emergente lanzada por este método en IE6mostrar más que IE7 ,IE8 La altura inferior debe ser un poco menor, por lo que puedes escribir un js para resolver este problema (IE6La altura inferior necesita+35PX a izquierda y derecha, el atributo izquierdaDeDiálogo se puede ajustar según el ancho de la pantalla)
Fragmento de código como sigue:

 var swidth=window.screen.width;
 if(parseInt(width)>swidth)
 swidth=100;
 else
 swidth=(swidth-parseInt(width))/2;
varwindowStatus="anchoDeDiálogo:"+width+"px;altoDeDiálogo:+height+"px;arribaDeDiálogo:80px;izquierdaDeDiálogo:"+swidth+"px;centro:1;estado:no;desplazamiento:no;redimensionable:no;ayuda:no;";
//método emergente
 if(url.indexOf("?")<0){window.showModalDialog(url+'?setTime='+newDate().getTime(),obj,windowStatus);}
 else{window.showModalDialog(url+'&setTime='+newDate().getTime(),obj,windowStatus);}

3.El problema de pérdida del objeto dialogArguments en el navegador FF: Al mostrar datos de división de página en la ventana showModalDialog emergente, al hacer clic en la información de la página, obtener el ID de los datos de división, y entregarlo a la ventana emergente del padre. Funciona bien en IE, pero en Firefox 3.0 en tiempo de ejecución, si la página no salta, se puede llamar normalmente a window.dialogArguments, si la página salta, se perderá la referencia a window.dialogArguments

Ahora se proporciona2Una solución es:

a. Coloca la página de la ventana showModalDialog dentro de frameset o iframe, y realiza un empaquetado.
Ejemplo:
window.showModalDialog("test.aspx");

contenido de la página test.aspx

<frameset cols="0,*>
<frame src=""/>
<frame src="página de visualización de datos de la página de división"/>
</frameset> 

El método de retorno de la página se convierte en

function returnValue(flag)
{
 var myObj = window.parent.dialogArguments;
 myObj.value = flag;
 window.parent.close();
}

así es como puedes obtener el valor devuelto

b. Si no deseas crear una nueva página, puedes usar el siguiente método, que utiliza el objeto window.opener.document, que en IE7, IE8Parece que no son compatibles (he probado, no sé cómo se comportan en tu máquina), determina qué navegador es, luego asigna valores al campo oculto de la página principal y luego la página principal procesa

El código es el siguiente:

function returnValue(flag)
 {
 document.getElementById("rValue").value=flag;
 if (window.ActiveXObject) //Navegador IE 
 {
 var myObj = window.dialogArguments;
 //alert(myObj);
 myObj.value = flag;
 window.close();
 }
 else{
 window.opener.document.getElementById("hid_oilid").value=flag;
 window.opener.document.getElementById("txt_oil").value=flag;+"";
 //self.close();
 window.close();
 } 
 }

Todos los problemas básicos ya han sido resueltos, se puede consultar más información sobre la transmisión de valores entre la página principal y la página secundaria

Te gustará