2009-08-11 6 views
16

j'ouvrir une nouvelle fenêtre en utilisant le code suivant:Comment puis-je accéder à l'arbre dom de la fenêtre enfant?

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

Je veux accéder à l'arbre dom du purchaseWin, par exemple

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

Cela ne fonctionne pas. Je ne peux le faire:

purchaseWin.document.write("abc"); 

J'essaie aussi cela et il ne fonctionne pas trop:

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

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

    }); 

Que dois-je faire?

Répondre

14

Avec jQuery, vous devez accéder au contents du document de la fenêtre de votre enfant:

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

Sans bibliothèques, avec JavaScript plaine, vous pouvez le faire de cette façon:

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

I pense que le problème était que vous essayiez de récupérer l'élément DOM avant que la fenêtre enfant ne soit chargée.

+1

La version Javascript fonctionne. Mais la version de jQuery échoue. J'ai besoin d'exécuter le code jQuery manuellement dans la fenêtre parent pour travailler. – Billy

+3

Fonctionne dans IE (pas firefox): $ (purchaseWin.document) .ready (function() {$ (purchaseWin.document) .contents(). Find ('# tdProduct'). Html ('2');}) Fonctionne dans FF (pas IE): purchaseWin.onload = function() {$ (purchaseWin.document) .contents(). Find ('# tdProduct'). Html ('2');}; – Billy

+1

La réponse de Gunni, en utilisant $ (purchaseWin) .load pour l'option jQuery fonctionne alors que l'événement document ready ne fonctionne pas. – Luke

9

Peut-être l'événement de chargement de jQuery fonctionne pour vous que cela a fonctionné pour moi dans un problème similaire, alors que l'événement prêt n'a pas fonctionné:

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

Je ne vois pas quel est le nouveau respect de la réponse acceptée? –

+0

Nouveauté, j'utilise l'événement .load alors que la réponse acceptée utilise l'événement .ready. Pour moi, cela a fait une différence. – Gunni

+1

C'est la seule réponse qui m'a donné accès à la dom de l'enfant. – thatmiddleway

7

Vous ne pouvez pas accéder au document d'une fenêtre enfant si vous chargez une page qui n'appartient pas au domaine de la fenêtre parent. Cela est dû à la sécurité inter-domaines intégrée à 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; 
    }; 
    }; 
})(); 
Questions connexes