Control de VentanasControla las ventanas del navegador.
Fecha: 23/Dic/2005 (22-12-05)
|
Diseñando un sistema de foros con la versión beta de Visual Studio 2005, tuve la necesidad de abrir partes del aplicativo en PopUps, lo cual me planteaba una serie de problemas, el primero era que una vez terminada la acción que tenia que realizar, básicamente insertar datos en la base de datos, la ventana quedaba abierta.
Mi intención como programador es facilitar las cosas al usuario final y me tuve que ingeniar un método para cerrar la ventana una vez esta había hecho su función.
El segundo problema era que cuando un usuario insertaba un mensaje, el programa para insertar registros se abría en un PopUp, pero al cerrar el PopUp, la página de mensajes seguía como antes, sin mostrar el mensaje.
Para ello necesitaba actualizar la ventana digamos le Padre una vez se cerrara la ventana digamos le Hija. Buscando información sobre el tema me encontré este articulo en msdn.
http://www.microsoft.com/spanish/msdn/articulos/archivo/160301/voices/webteam12042000.asp#windows
El problema es que actualizando me salía un mensaje de que estaba intentando actualizar la página , que lo solvente en vez de actualizando, redirigiéndolo.
Para Empezar cree una clase nueva a la que llame Control_Ventanas
Imports Microsoft.VisualBasic Public Class Control_Ventanas '****************************************************************************************************** '****************************************************************************************************** ' ' INICIO DE LA FUNCIÓN DE ' ACTUALIZAR VENTANA PADRE AL CERRAR VENTANA HIJA ' ' ' Está Función se aplica a la ventana padre. ' Esta función se encarga de abrir una ventana hija ' Está función se llama desde JavaScript de la siguiente forma: ' ' -->>Dim url As String = "NuevoMensaje.aspx?Categoria=" & Categoria ' Dim wh As String = "width=600,height=400" ' Ejecutar la funcion JavaScript de Abrir Ventana Hija ' Dim strScript As String = "" ' strScript &= "<script language=JavaScript>" & vbCrLf ' strScript &= "openChild('" & url & "','" & wh & "')" ' strScript &= "</script>" & vbCrLf ' Me.Page.ClientScript.RegisterClientScriptBlock(Me.Page.GetType(), "EjecutarAbrirPopUp", strScript) ' Public Sub Abrir_VentanaHija(ByVal pag As Page) Dim strScript As String = "" strScript &= "<script language=""jscript"">" & vbCrLf strScript &= "function openChild(URL,wh)" & vbCrLf strScript &= "{" & vbCrLf strScript &= "var winName='child'" & vbCrLf strScript &= "var winAtts=""toolbar=no,directories=no,top=0"";" & vbCrLf strScript &= "myChild = window.open(URL,winName,wh,winAtts);" & vbCrLf strScript &= "}" & vbCrLf strScript &= "</script>" & vbCrLf pag.ClientScript.RegisterClientScriptBlock(pag.GetType(), "VentanaPadre", strScript) End Sub ' Está función se aplica a la ventana Hija ' Esta función se encarga de Redireccionar en la ventana Padre cuando se cierra la ventana Hija. ' En el Html de la página Hija debe incluir * <body onload="setParent()" onunload="reloadParent()"> * ' ' -->> Como entrada recibe la página a la que aplicar el script, la Url de la página Padre, ' -->> De forma opcional recibe la categoria. Public Sub ActualizarVentanaPadre_AlCerrar(ByVal pag As Page, ByVal url As String, Optional ByVal Categoria As String = "") Dim strScript As String = "" strScript &= "<script language=""jscript"">" & vbCrLf strScript &= "var pWin" & vbCrLf strScript &= "function setParent(){" & vbCrLf strScript &= "pWin = top.window.opener" & vbCrLf strScript &= "}" & vbCrLf strScript &= "function reloadParent(){" & vbCrLf 'strScript &= "pWin.location.reload(true)" & vbCrLf If Categoria <> "" Then url &= "Categoria=" & Categoria End If strScript &= "pWin.location.href='" & url & "'" & vbCrLf strScript &= "}" & vbCrLf strScript &= "</script>" & vbCrLf pag.ClientScript.RegisterClientScriptBlock(pag.GetType(), "VentanaHija", strScript) End Sub ' ' FIN DEL SISTEMA DE REDIRECCIÓN AL ' CERRAR VENTANA HIJA. ' '****************************************************************************************************** '****************************************************************************************************** ' Función para cerrar la ventana del navegador transcurrido un determinado tiempo. ' ' -->> Como entrada recibe la página a la que aplicar la función y el número de segundos ' tras los cuales se cerrará la ventana del navegador. ' Public Sub CerrarPantalla_TimeOut(ByVal pag As Page, ByVal Segundos As Integer) Dim strScript As String Segundos = Segundos * 1000 strScript = "<script type=""text/javascript"">" & vbCrLf strScript &= "function cerrar() " & vbCrLf strScript &= "{" & vbCrLf strScript &= "var ventana = window.self" & vbCrLf strScript &= "ventana.opener = window.self" & vbCrLf strScript &= "ventana.close()" & vbCrLf strScript &= "}" & vbCrLf strScript &= "setTimeout(""cerrar()"", " & Segundos & ")" & vbCrLf strScript &= "</script>" & vbCrLf pag.ClientScript.RegisterStartupScript(pag.GetType(), "CerrarVentanaTimeOut", strScript) End Sub ' Función que Deshabilita el Click derecho del ratón en una página. ' ' --> Como entrada recibe la página a la que aplicar la función. Public Sub Deshabilitar_ClickDerecho(ByVal pagina As Page) Dim strScript As String = "" strScript &= "<script language=JavaScript>" & vbCrLf strScript &= "var message="""";" & vbCrLf strScript &= "function clickIE() {if (document.all) {(message);return false;}}" & vbCrLf strScript &= "function clickNS(e) {if " & vbCrLf strScript &= "(document.layers||(document.getElementById&&!document.all)) {" & vbCrLf strScript &= "if (e.which==2||e.which==3) {(message);return false;}}}" & vbCrLf strScript &= "if (document.layers)" & vbCrLf strScript &= "{document.captureEvents(Event.MOUSEDOWN);document.onmousedown=clickNS;}" & vbCrLf strScript &= "else{document.onmouseup=clickNS;document.oncontextmenu=clickIE;}" & vbCrLf strScript &= "document.oncontextmenu=new Function(""return false"")" & vbCrLf strScript &= "</script>" & vbCrLf pagina.ClientScript.RegisterClientScriptBlock(pagina.GetType(), "noClickDerecho", strScript) End Sub ' Función que maximiza el tamaño de la ventana del navegador hasta la resolución ' que tenga el cliente establecida. ' ' --> Como entrada recibe la página a la que aplicar el script. Public Sub MaximizarVentana_TamañoPantalla(ByVal pagina As Page) Dim strScript As String = "" strScript &= "<script language=""JavaScript1.2"">" & vbCrLf strScript &= "window.moveTo(0,0);" & vbCrLf strScript &= "if (document.all) {" & vbCrLf strScript &= "top.window.resizeTo(screen.availWidth,screen.availHeight);" & vbCrLf strScript &= "}" & vbCrLf strScript &= "else if (document.layers||document.getElementById) {" & vbCrLf strScript &= "if (top.window.outerHeight<screen.availHeight||top.window.outerWidth<screen.availWidth){" & vbCrLf strScript &= "top.window.outerHeight = screen.availHeight;" & vbCrLf strScript &= "top.window.outerWidth = screen.availWidth;" & vbCrLf strScript &= "}" & vbCrLf strScript &= "}" & vbCrLf strScript &= "</script>" & vbCrLf pagina.ClientScript.RegisterClientScriptBlock(pagina.GetType(), "MaximizarPantalla", strScript) End Sub End ClassLa ventana Padre contiene un LinkButton y un Label
La forma de usar esta classe es creando una instancia de la clase en donde sea preciso.Partial Class VentanaPadre_aspx Inherits System.Web.UI.Page ' Incializar la página Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim texto As String = Request.QueryString("texto") Dim ControlVentanas As New Control_Ventanas ControlVentanas.Abrir_VentanaHija(Me.Page) ControlVentanas.Deshabilitar_ClickDerecho(Me.Page) ControlVentanas.MaximizarVentana_TamañoPantalla(Me.Page) Me.Label1.Text = texto End Sub Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LinkButton1.Click Dim url As String = "VentanaHija.aspx" Dim wh As String = "width=600,height=400" 'Ejecutar la funcion JavaScript de Abrir Ventana Hija Dim strScript As String = "" strScript &= "<script language=JavaScript>" & vbCrLf strScript &= "openChild('" & url & "','" & wh & "')" strScript &= "</script>" & vbCrLf Me.Page.ClientScript.RegisterClientScriptBlock(Me.Page.GetType(), "EjecutarAbrirPopUp", strScript) End Sub End ClassLa ventana Hija contiene un TextBox y un Button
No olvidéis de poner el la etiqueta body de la página que será la Hija los eventos:<body onload="setParent()" onunload="reloadParent()">
Partial Class VentanaHija_aspx Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load '==================================================================================================== ' ' Función para actualizar la ventana Padre al cerrar la Hija (o sea está) ' En el Html de la página Hija (o sea está) debe incluir: ' ' * <body onload="setParent()" onunload="reloadParent()"> * ' Dim url As String = "VentanaPadre.aspx?texto=" & Me.TextBox1.Text.Trim Dim ControlVentanas As New Control_Ventanas ControlVentanas.ActualizarVentanaPadre_AlCerrar(Me.Page, url.Trim) End Sub Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click If Me.TextBox1.Text = "" Then Me.TextBox1.Text = "Escriba algo aquí" Else ' si ha escrito algo ejecutar la función de cerrar ventana, que activará el evento Dim ControlVentanas As New Control_Ventanas ControlVentanas.CerrarPantalla_TimeOut(Me.Page, 1) End If End Sub End Class
En fin espero que os sea de utilidad.
Fichero con el código de ejemplo: mcanal_ControlVentanas.zip - (5) KB