Ejecutando Javascript en una nueva ventana.open

Estoy ejecutando esta función para abrir una nueva ventana.

function htmlNewWindow(id) { var html = $(id).html(); var newWindow = window.open(''); newWindow.document.body.innerHTML = 'Hi  ' + html; } 

Esto crea exitosamente una nueva ventana con el HTML en ella. Tengo un montón de tags HTML que al hacer clic ejecutan una función llamada Foo1. Intenté imprimir toda la función de Foo1 en el nuevo documento HTML, e intenté poner Foo1 dentro de myScript.js. Veo a ambos Foo1 dentro de una etiqueta de script en la nueva ventana, pero ninguno de los dos se carga, ya que solo se escriben en la nueva página como HTML.

Los scripts agregados con .innerHTML no se ejecutan. Necesita crear un nodo de script y anexarlo al DOM de la ventana.

 $("#button").click(newWindow); function newWindow(id) { var html = $(id).html(); var win = window.open(''); win.document.head.innerHTML = 'Hi'; win.document.body.innerHTML = '' + html + ''; var script = document.createElement('script'); script.src = 'js/myScript.js'; win.document.head.appendChild(script); } 
   

Prueba esto:

 var newWindow = window.open(''); newWindow.document.createElement('script'); script.src = 'js/myScript.js'; newWindow.document.head.appendChild(script); 

Así es como se crea, y luego se agrega un archivo de script dentro de una nueva ventana:

  var fileref=document.createElement('script'); //creates script in current document fileref.setAttribute("type","text/javascript") //set it to JS by "type" fileref.setAttribute("src", filename) //set your "src=yourFile_href_Here.js" //Then create your newWindow as you did above, but slightly updated //Create your function which will consume the "fileref" argument function htmlNewWindow(fileref) { var newWindow = window.open(''); newWindow.document.getElementsByTagName("head")[0].appendChild(fileref); }; //right now the function is made but you still have to execute it //Execute your function, and pass it the variable "fileref" that you set above. htmlNewWindow(fileref); //Within this edit you will append the head element //with your newly created script(or any other parameterized argument) /* Replace your filename to pass any other script */ 

NOTA – Al abrir una página que reside en un dominio diferente, si no se permite específicamente, se rechazarán instancias de esto debido a CORS ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS )

No es una práctica segura enviar sus secuencias de comandos a páginas de otras personas o permitirlas en su propia página si su dominio no las ha enviado. Además, dependiendo de la stack de tu servidor / tecnología, es posible que debas configurar los ajustes de *origin dentro de la stack back-end. Vea aquí: ( https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy )