web-dev-qa-db-fra.com

Fenêtre contextuelle accédant au dom parent

J'ai une fenêtre popup qui doit accéder au dom parent pour générer une page d'impression. La structure de la page d'impression est sensiblement différente de celle du parent, de sorte qu'un css d'impression ne résoudrait pas le problème. En gros, je souhaite ouvrir une fenêtre puis laisser cette fenêtre récupérer des données du parent ou même accéder au domaine depuis le popup et générer la page d'impression sans avoir à retourner au serveur. Des idées comment je peux réaliser ceci?

J'utilise la norme

window.open()

faire apparaître une fenêtre. J'ai besoin de cette solution pour ne pas être un hack et être compatible avec tous les principaux navigateurs.

Merci d'avance!

17
Scoota P

La réponse de Sajjan est un début, mais assurez-vous que vos objets sont disponibles avant d'essayer d'y accéder:

var opener = window.opener;
if(opener) {
    var oDom = opener.document;
    var elem = oDom.getElementById("your element");
    if (elem) {
        var val = elem.value;
    }
}

Sinon, vous risquez que l'ouvre-porte ne réponde pas à votre appel initial et que vous ne puissiez pas en extraire l'élément.

En tant que jQuery, je pense (basé sur une réponse, ici: comment accéder à l’objet fenêtre parent à l’aide de jquery? ):

var opener = window.opener;
if(opener) {
    var elem = opener.$("#elementId");
    if (elem) {
        var val = elem.val(); // I forgot we're dealing with a jQuery obj at this point
    }
}
24

window.opener.document.getElementById ("votre élément"). value 

4
Sajjan Sarkar

Selon MDN , window.open() vous renverra un handle vers la nouvelle fenêtre.

var popUpHandle = window.open();

Avec cette poignée, vous devriez pouvoir accéder au DOM de PopUp. Il est possible inversement d'utiliser le window.opener déjà mentionné. Reportez-vous à nouveau à MDN :

var originalWindow = window.opener;

Néanmoins, votre moteur de recherche préféré vous fournira plus de détails, car ce sujet est assez ancien et que votre approche a déjà été mise au point un million de fois ou plus.

0
cimnine

parent.document aidé dans mon cas.

var elem = parent.document.getElementById("overlay_modal");
if (elem) {
alert('setting attribute');
elem.setAttribute("onclick", "Windows.close('2', event);");
}
0
subho