ventana - propiedades popup javascript
¿Cómo puede una ventana padre de Javascript enviar datos a la ventana emergente? (4)
He estado escribiendo una aplicación basada en navegador (o mejor dicho, creación rápida de prototipos de una aplicación) usando HTML y Javascript. Me gustaría que la ventana principal pueda mostrar ventanas emergentes con datos dinámicos. Sin embargo, no puedo descifrar cómo enviar datos desde una ventana principal a una ventana emergente en Javascript. Tenga en cuenta que estoy trabajando con la suposición de que la aplicación se puede usar en escenarios "fuera de línea", por lo que todos los datos dinámicos deberían provenir de la ventana principal.
Idealmente, me gustaría escribir
var popup = window.open("popup.html", someidentifier, "");
popup.document.getElementById("SomeIdInPopupHtml").innerHTML = "1,2,3,4";
Sin embargo, la función getElementById devuelve NULL. ¿Cómo puedo enviar datos a ventanas emergentes desde una ventana principal?
Sin embargo, la función getElementById devuelve NULL.
Porque popup.html
aún no se ha cargado. Si desea interactuar con el contenido del documento, tendrá que volver a llamar más tarde cuando haya terminado de cargarse.
Para ventanas emergentes completamente dinámicas, popupwindow.document.write
con una URL en blanco y popupwindow.document.write
su contenido en ellas. Para las ventanas emergentes de scripting cooperativo cargadas desde un documento separado, haga que el documento secundario llame a su elemento primario cuando esté listo para acceder. O simplemente use los elementos emergentes en la página que normalmente son menos molestos, tanto para usted como programador y para el usuario final.
¿La ventana emergente sirve contenido de un dominio diferente al padre? Si es así, la respuesta corta es que no puedes.
La respuesta larga es que puede enviar el fragmento href de la ventana emergente (es decir, la parte posterior al # en protocolo: // servidor / ruta? Consulta # fragmento). Si el contenido de la ventana emergente sabe que debe verificar los cambios en su fragmento, puede pasarle datos.
Si proviene del mismo dominio, entonces su código debería funcionar, siempre que exista un elemento con esa identificación.
Cuando el usuario hace clic en su enlace para abrir la ventana emergente le pasa una cadena de consulta y luego reacciona a ese valor con su código del lado del servidor.
Permítanme comenzar presentando una posible solución con la que acabo de experimentar. Sin embargo, me gustaría alentar los comentarios y mejores soluciones ...
No es muy claro, pero puedo agregar los parámetros de consulta estilo GET a la URL de origen de la ventana emergente:
var popup = window.open("popup.html?" + identifier, somename, "");
Ahora, en mi situación particular, la ventana emergente es una vista de algún modelo identificado por una ID única, por lo que la ventana emergente puede solicitar la ventana principal para los datos relacionados con esa ID:
var model = window.opener.getModel(document.location.href.split("?")[1]);
do_something_with_model(model);
Esta estrategia no funcionará en todos los casos, especialmente cuando los datos no se getModel()
fácilmente en la implementación de getModel()
. Sin embargo, en mi caso, creo que este enfoque puede funcionar.
Agradecería los comentarios sobre esta estrategia. ¡Gracias!