Tengo una variable que creo que es global, por lo que todas mis funciones secundarias deben poder obtener esa variable, pero recibo un error de referencia, variable no declarada. Aquí está el código a continuación. Por favor, ayuda si estoy haciendo algo mal. Gracias.
<!DOCTYPE html> <html> <head> <script> var Test1Object = 'Testing'; // This is my variable </script> <script src = 'ch.js'> </script> </head> <body> <button onclick="openwindow()">Create window</button> </body> </html>Mi Ch.js
(function(){ alert(Test1Object) // Here i am getting this object this.openwindow = function() { w =window.open("untitled.html",'TheNewpop','height=315,width=625'); w.document.write( "<body>"+ "<\/body>" + "<script src = \"windowpo.js\"><\/script>" // THis is where i reference my windowpo.js ) w.document.close(); w.focus(); } })()Mi ventanapo.js
(function(){ alert(Test1Object) // Here there is not Test1Object (Reference error) })();Mi problema es que en mi windowp.js, ¿cómo puedo obtener mi variable Test1Object...
Fácil de hacer simplemente accediendo a su referencia dentro de la ventana usando window.opener como en esta demostración ejecutable plnkr . Dentro de su aplicación de ventana, puede acceder a ella a través de window.opener.Test1Object , donde window.opener contiene una referencia de la instancia de JavaScript donde se abrió. De esa manera, puede acceder a todas las cosas que configuró en su aplicación principal:
<!DOCTYPE html> <html ng-app="myApp"> <head lang="en"> <meta charset="utf-8" /> <title>Custom Plunker</title> <script type="text/javascript"> var Test1Object = 'Testing'; </script> <script src="main.js"></script> </head> <body> <a onclick="openwindow()">Open Window</a> </body> </html> this.openwindow = function() { w = window.open(location.href+"untitled.html",'TheNewpop','height=315,width=625'); w.document.close(); w.focus(); } Some Test <script src="windowpo.js"></script> alert(window.opener.Test1Object);Como la mayoría de las otras respuestas ni siquiera parecen leer la pregunta correctamente, también agregaré mis 2 centavos como respuesta:
El principal problema en su código es que tiene contextos de ejecución JS aquí: uno para la página original (el código HTML que muestra) y otro para la ventana emergente que abre en Ch.js En general ambos no comparten ningún dato, variable o lo que sea.
Sin embargo, tiene una referencia de objeto de ventana en su variable w después de llamar a window.open() . Ya usa esto para inyectar código HTML en la ventana emergente.
Si ahora desea tener variables JS disponibles en el contexto JS emergente, puede inyectar etiquetas <script> adicionales en el código HTML emergente y establecer las variables allí (mala elección, en mi humilde opinión) o usar postMessage() para enviar datos. Doy un código de muestra para la variante postMessage() a continuación:
Ch.js
this.openwindow = function() { w = window.open("untitled.html",'TheNewpop','height=315,width=625'); w.document.write( "<body>"+ "<\/body>" + "<script src = \"windowpo.js\"><\/script>" // THis is where i reference my windowpo.js ); w.document.close(); w.focus(); // wait for pupup to be ready window.addEventListener( 'message', function( e ){ // send the variable if( e.data == 'inited' ) { w.postMessage( Test1Object, '*' ); } }) }ventanapo.js
// wait for messages from opener window.addEventListener( 'message', function( e ) { alert( e.data ); }); // tell the opener we are waiting window.opener.postMessage( 'inited', '*' ); Para obtener más información, consulte el artículo respectivo de MDN en Window.postMessage() .
Debe declarar la variable antes de incluirla en cualquier archivo. Simplemente cree una etiqueta de secuencia de comandos sobre los archivos incluidos, defínala allí.
<script type='text/javascript' > var Test1Object = 'Testing'; </script> <script type='text/javascript' src='js/Ch.js'></script> <script type='text/javascript' src='js/windowpo.js'></script>de esta manera deberías poder usar dentro de todos los archivos