2012-05-06 15 views
38

No sé cómo resolver este problema, he intentado leer muchas publicaciones pero ninguna respuesta.Agregar contenido a una nueva ventana abierta

Necesito abrir una nueva ventana con una página ya codificada (dentro del mismo dominio) y agregar algo de contenido.

El problema es que si uso OpenWindow.write() la página no está cargada aún o lo reemplaza todo y solo aparece el código agregado mediante escritura.

var OpenWindow = window.open('mypage.html','_blank','width=335,height=330,resizable=1'); 
OpenWindow.document.write(output); 

output es el código que necesito para anexar.

Necesito que funcione al menos en Firefox, IE y GC.

Gracias de antemano. No es un problema si necesito usar JQuery.

+1

Había intentado así: \t \t \t \t \t \t \t \t OpenWindow.addEventListener ("onload", la función() { \t \t \t \t \t \t \t \t OpenWindow.content.body.innerHTML = "

hello world
"; \t \t \t \t \t \t \t \t}, cierto); –

+1

Cuando llama a la función en la ventana secundaria, no puede pasar nada en los argumentos de la función. Solo debe llamar a childWin.function_name(). Si llama a childWin.function_name (output), no funcionará. Para pasar datos de padres a hijos, consulte http://stackoverflow.com/questions/2678133/pass-a-value-from-parent-to-child-open-window –

Respuesta

25

en parent.html:

<script type="text/javascript"> 
    $(document).ready(function() { 
     var output = "data"; 
     var OpenWindow = window.open("child.html", "mywin", ''); 
     OpenWindow.dataFromParent = output; // dataFromParent is a variable in child.html 
     OpenWindow.init(); 
    }); 
</script> 

en child.html:

<script type="text/javascript"> 
    var dataFromParent;  
    function init() { 
     document.write(dataFromParent); 
    } 
</script> 
+1

Cómo pasar jquery variable/elemnts a la página secundaria del padre? @ Ray-cheng – azad

+0

¿Qué tan seguro es esto? No está pasando los datos a través de la URL, pero ¿podría haber una interceptación en alguna parte? –

7

Aquí es lo que usted puede intentar

  • escribir una función dicen init() dentro mipagina.html que hacer lo html (anexar o lo que sea)
  • en lugar de OpenWindow.document.write(output); llamada OpenWindow.init() cuando el DOM es listos

Así la ventana padre tendrá

OpenWindow.onload = function(){ 
     OpenWindow.init('test'); 
    } 

y en el niño

function init(txt){ 
     $('#test').text(txt); 
    } 
+0

Me aparece "OpenWindow.init no es una función" error y yo habíamos definido la función:

+1

Revise mi código actualizado – Sethunath

+0

OpenWindow.init(); Nunca se ejecuta :(Gracias de todos modos –

3

Cuando se llama a document.write después de una página se ha cargado se encargará de eliminar todo el contenido y reemplazarlo con el parámetro que proporcione. En lugar de utilizar métodos DOM para agregar contenido, por ejemplo:

var OpenWindow = window.open('mypage.html','_blank','width=335,height=330,resizable=1'); 
var text = document.createTextNode('hi'); 
OpenWindow.document.body.appendChild(text); 

Si desea utilizar jQuery usted consigue un poco mejores APIs para hacer frente a. Por ejemplo:

var OpenWindow = window.open('mypage.html','_blank','width=335,height=330,resizable=1'); 
$(OpenWindow.document.body).append('<p>hi</p>'); 

Si necesita el código para ejecutar después de DOM de la nueva ventana de oportunidad es listo:

var OpenWindow = window.open('mypage.html','_blank','width=335,height=330,resizable=1'); 
$(OpenWindow.document.body).ready(function() { 
    $(OpenWindow.document.body).append('<p>hi</p>'); 
}); 
+0

No funciona, si lo hago durante la depuración, la nueva ventana tiene tiempo para cargar y se agrega el "hi", todo funciona bien, pero en una situación normal, "hola" aparece primero, luego la página se carga anulando todo: S Gracias por la ayuda –

+0

Edité mi respuesta para ajustar el código en un bloque $ (documento) .ready. Inténtalo. –

+0

Esto no funcionó para mí, lo que funcionó fue- $ (printWindow) .on ('load', function() {$ (printWindow.document.body) .find ('# page-content'). html (printContent);}); – pwdst

47

cuando se quiere abrir una nueva pestaña/ventana (depende de su configuración por defecto del navegador):

output = 'Hello, World!'; 
window.open().document.write(output); 

Cuando la salida es una Object y Desea obtener JSON, por ejemplo (también puede generar cualquier tipo de documento, incluso la imagen codificada en Base64)

output = ({a:1,b:'2'}); 
window.open('data:application/json;' + (window.btoa?'base64,'+btoa(JSON.stringify(output)):JSON.stringify(output))); 

actualización

Google Chrome (60.0.3112.90) bloquean este código:

Not allowed to navigate top frame to data URL: data:application/json;base64,eyJhIjoxLCJiIjoiMiJ9

cuando se desea agregar algunos datos a la página existente

output = '<h1>Hello, World!</h1>'; 
window.open('output.html').document.body.innerHTML += output; 

output = 'Hello, World!'; 
window.open('about:blank').document.body.innerText += output; 
+1

Mi ventana emergente fue bloqueada por Chrome, y luego 'document' no funcionó porque' window.open' no estaba definido. Por lo tanto, asegúrese de que su ventana emergente sea un resultado directo de una acción del usuario. Para obtener más información, lee aquí: https://stackoverflow.com/questions/4602964/how-do-i-prevent-google-chrome-from-blocking-my-popup – Kayvar

2

Si desea abrir una página o ventana con el envío de los datos de POST o GET método que puede utilizar un código como este:

$.ajax({ 
    type: "get", // or post method, your choice 
    url: yourFileForInclude.php, // any url in same origin 
    data: data, // data if you need send some data to page 
    success: function(msg){ 
       console.log(msg); // for checking 
       window.open('about:blank').document.body.innerHTML = msg; 
       } 
}); 
Cuestiones relacionadas