2009-08-11 24 views
16

que abrir una nueva ventana con el siguiente código:¿Cómo puedo acceder al árbol dom de la ventana secundaria?

purchaseWin = window.open("Purchase.aspx","purchaseWin2", "location=0,status=0,scrollbars=0,width=700,height=400"); 

Quiero acceder al árbol DOM de la purchaseWin, por ejemplo,

purchaseWin.document.getElementById("tdProduct").innerHTML = "2"; 

No funciona. Sólo puedo hacer esto:

purchaseWin.document.write("abc"); 

También trato de esto y no funciona demasiado:

$(purchaseWin.document).ready(function(){ 

    purchaseWin.$("#tdProduct").html("2"); 

    }); 

¿Qué debo hacer?

Respuesta

14

con jQuery, hay que acceder a la contents del documento de la ventana del niño:

$(purchaseWin.document).ready(function() { 
    $(purchaseWin.document).contents().find('#tdProduct').html('2'); 
}); 

Sin bibliotecas, la llanura de JavaScript, puede hacerlo de esta manera:

purchaseWin.onload = function() { 
    purchaseWin.document.getElementById('tdProduct').innerHTML = '2'; 
}; 

I cree que el problema fue que estaba tratando de recuperar el elemento DOM antes de que la ventana hija realmente se cargara.

+1

La versión simple de Javascript funciona. Pero la versión de jQuery falla. Necesito ejecutar el código jQuery manualmente en la ventana principal para trabajar. – Billy

+3

Obras en IE (no Firefox): $ (purchaseWin.document) (function() {ready. $ (PurchaseWin.document) .Contenido find() ('# tdProduct') html ('2');}.); Funciona en FF (no en IE): purchaseWin.onload = function() {$ (purchaseWin.document) .contents(). Find ('# tdProduct'). Html ('2');}; – Billy

+1

Véase la respuesta de Gunni, utilizando $ (purchaseWin) .load para la opción de jQuery funciona mientras que el evento ready documento no lo hizo. – Luke

9

Tal vez el evento de carga de jQuery funciona para usted, ya que trabajó para mí en un problema similar, mientras que el evento ready no funcionó:

$(purchaseWin).load(function(){ 
    purchaseWin.$("#tdProduct").html("2"); 
}); 
+0

¿No veo qué hay de nuevo respecto de la respuesta aceptada? Nueva –

+0

es que yo uso el evento .load mientras que la respuesta aceptada utiliza el evento ready. Para mí eso hizo la diferencia. – Gunni

+1

Esta es la única respuesta que me dio acceso a la dom del niño. – thatmiddleway

7

No se puede acceder al documento de una ventana secundaria si carga una página que no pertenece al dominio de la ventana principal. Esto se debe a la seguridad entre dominios incorporada en Javascript.

0
(function() { 

    document.getElementById("theButton").onclick = function() { 

    var novoForm = window.open("http://jsbin.com/ugucot/1", "wFormx", "width=800,height=600,location=no,menubar=no,status=no,titilebar=no,resizable=no,"); 
    novoForm.onload = function() { 
     var w = novoForm.innerWidth; 
     var h = novoForm.innerHeight; 
     novoForm.document.getElementById("monitor").innerHTML = 'Janela: '+w+' x '+h; 
    }; 
    }; 
})(); 
Cuestiones relacionadas