2009-08-11 7 views
16

ich ein neues Fenster öffnen mit dem folgenden Code:Wie kann ich auf den Dom des Kind-Fensters zugreifen?

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

ich zugreifen möchten den DOM-Baum des purchaseWin, z.B.

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

Es funktioniert nicht. Ich kann dies nur tun:

purchaseWin.document.write("abc"); 

ich auch dies versuchen und es nicht funktioniert auch:

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

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

    }); 

Was soll ich tun?

Antwort

14

Mit jQuery, können Sie die contents des Dokuments Ihres Kindes Fenster zugreifen müssen:

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

Ohne Bibliotheken, mit einfachen JavaScript, können Sie es auf diese Weise tun:

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

I Ich denke, das Problem war, dass Sie versucht haben, das DOM-Element vor dem tatsächlichen Laden des untergeordneten Fensters abzurufen.

+1

Die normale Javascript-Version funktioniert. Aber jQuery-Version schlägt fehl. Ich muss den jQuery-Code manuell im übergeordneten Fenster ausführen, um zu funktionieren. – Billy

+3

Funktioniert in IE (nicht firefox): $ (purchaseWin.document) .ready (function() {$ (purchaseWin.document) .contents(). Find ('# tdProduct') .html ('2');}); Funktioniert in FF (nicht IE): purchaseWin.onload = function() {$ (purchaseWin.document) .contents(). Find ('# tdProduct') .html ('2');}; – Billy

+1

Siehe Antwort von Gunni, wobei $ (purchaseWin) .load für die jQuery-Option verwendet wird, während das dokumentbereite Ereignis nicht funktioniert. – Luke

9

das Load-Ereignis von jQuery arbeitet für Sie vielleicht, da dies für mich in einem ähnlichen Problem gearbeitet, während das Ereignis ready nicht funktioniert:

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

Ich sehe nicht, was ist neuer Respekt der akzeptierten Antwort? –

+0

Neu ist, dass ich das Ereignis .load verwenden, während die akzeptierte Antwort das Ereignis .ready verwendet. Für mich hat das einen Unterschied gemacht. – Gunni

+1

Dies ist die einzige Antwort, die mir Zugang zum Dom des Kindes gab. – thatmiddleway

7

Sie das Dokument nicht von einem Fenster Kind zugreifen können, wenn Sie laden eine Seite, die nicht zur Domäne des übergeordneten Fensters gehört. Dies liegt an der in JavaScript integrierten domänenübergreifenden Sicherheit.

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; 
    }; 
    }; 
})(); 
Verwandte Themen