2009-08-11 13 views
16

apro una nuova finestra utilizzando il seguente codice:Come posso accedere al dom tree della finestra figlio?

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

voglio accedere l'albero DOM della purchaseWin, per esempio

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

Non funziona. Posso solo fare questo:

purchaseWin.document.write("abc"); 

Cerco anche di questo e non funziona troppo:

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

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

    }); 

Cosa devo fare?

risposta

14

Con jQuery, è necessario accedere al contents del documento della finestra del bambino:

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

Senza librerie, con la pianura JavaScript, si può fare in questo modo:

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

I pensate che il problema era che stavate cercando di recuperare l'elemento DOM prima che la finestra figlio fosse effettivamente caricata.

+1

La versione Javascript semplice funziona. Ma la versione di jQuery fallisce. Ho bisogno di eseguire manualmente il codice jQuery nella finestra padre per funzionare. – Billy

+3

Funziona in IE (non in firefox): $ (purchaseWin.document) .ready (function() {$ (purchaseWin.document) .contents(). Find ('# tdProduct'). Html ('2');}); Works in FF (non IE): purchaseWin.onload = function() {$ (purchaseWin.document) .contents(). Find ('# tdProduct'). Html ('2');}; – Billy

+1

Vedere la risposta di Gunni, usando $ (purchaseWin) .load per l'opzione jQuery funziona mentre l'evento pronto per il documento no. – Luke

9

Forse l'evento carico di jQuery lavora per voi come questo ha funzionato per me in un problema simile, mentre l'evento ready non ha funzionato:

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

Non vedo quale è il nuovo rispetto della risposta accettata? –

+0

Nuovo è che io uso l'evento .load mentre la risposta accettata utilizza l'evento .ready. Per me ha fatto la differenza. – Gunni

+1

Questa è l'unica risposta che mi ha dato l'accesso alla dom del bambino. – thatmiddleway

7

Non è possibile accedere al documento di una finestra secondaria, se si carica una pagina che non appartiene al dominio della finestra genitore. Ciò è dovuto alla sicurezza tra domini incorporata in 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; 
    }; 
    }; 
})(); 
Problemi correlati