Ver Mensaje Individual
  #10 (permalink)  
Antiguo 22/01/2007, 15:24
Valadir
 
Fecha de Ingreso: enero-2007
Mensajes: 1
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Ventana Modal

Una mejora al codigo inicial.

Es basicamente el mismo codigo pero utilizo algunos truquillos que te quitan el tener que saberte el nombre de la ventana padre mas una validacion de los parametros de la ventana modal con Expresiones regulares.

Codigo js que llama a la ventana modal:

<script language="javascript" type="text/javascript">
<!--

var miVentana;

window.name = 'padre';

function foco() {
if (miVentana != null){
miVentana.focus();
}
}

function cerrar(){
miVentana = null;
}

function lanzaVentana(url,title,value,width,height,top,left ) {
var settings;

//valida valores de value
var regExpVal = /^yes|no|0|1$/;
if(!regExpVal.test(value)){
value = 'yes';
}

//valida valores numericos
var regExpNum = /^\d+$/
if(!regExpNum.test(top)){
top = 100;
}

if(!regExpNum.test(left)){
left = 100;
}

if(!regExpNum.test(width)){
width = 300;
}

if(!regExpNum.test(height)){
height = 300;
}

settings = "";
settings += "toolbar=" + value + ",";
settings += "scrollbars=" + value + ",";
settings += "location=" + value + ",";
settings += "status=" + value + ",";
settings += "menubar=" + value + ",";
settings += "resizeable=" + value + ",";
settings += "width=" + width + ",";
settings += "height=" + height;
miVentana = window.open(url,title,settings);
miVentana.moveTo(left,top);
}
//-->
</script>


En el body se mantiene el foco.

<body onfocus="javascript:foco();">

En la ventana hija se varia un pelin el codigo:

<script language="javascript" type="text/javascript">
<!--
var padre = window.opener;
alert(padre.name);
function cerrarPop() {
padre.cerrar();
window.close();
}
//-->
</script>


El body de la ventana se mantiene casi igual

<body onunload="javascript:padre.cerrar();">

Como se daran cuenta es en si el mismo codigo solo que se esta usando el metodo window.opener, que nos ayuda a identificar cual es la ventana que la llamo y asi solamente hacer copy y paste sin necesidad de estar modificando el script. (Con unos cuantos cambios y todo este codigo podra ser simplemente enpaquetado en un par de archivo js)

Ojo no es necesario poner nombre a la ventana padre pero si quieren tener orden mejor.

Si lo ejecutan en firefox deben estar seguros que en las pociones avanzadas de contenido este todas las funciones marcadas.

Tambien pueden averiguarse sobre opendialog que hace exactamente lo mismo pero con menos codigo. Aunque aun tengo que evaluar si es factible su utilizacion y si no trae complicaciones como showModalDialog de IE