2011-11-16 2 views
0

J'ai deux fenêtres: parent et popup. Évidemment parent a une référence à popup. Maintenant, dans popup J'ai une fonction direexécuter la fonction à partir de la fenêtre enfant dans la fenêtre parente

function test() { alert('test'); } 

et je veux appeler cette fonction dans parent, quelque chose comme popup.test();. Y-a-t-il un moyen de faire ça? Je sais comment faire cela dans l'autre sens. Il suffit de déclarer

window.test = function() { alert('test'); } 

et appelant window.opener.test(); en pop-up fonctionne très bien. Cependant cela ne fonctionne pas dans mon cas (je pense que l'objet window.opener est une référence, mais window.open et window dans popup ne sont pas vraiment liés). Des idées?

Répondre

1

Cela dépend vraiment du contexte dans lequel vous avez défini la fonction de la fenêtre contextuelle. En supposant que vous trouverez ci-joint les fonctions/données relatives à l'objet window de la fenêtre pop-up, vous pouvez y accéder depuis la fenêtre retourné par window.open (la poignée de fenêtre est l'objet window pour le menu contextuel):

var w = window.open(somelocation,''); //has a function on `window` called "test" 
w.test(); 

Je vais supposer que vous comprenez comment fonctionnent sandbox de sécurité pour les fenêtres pop-up

+0

En fait, la fonction est définie dans 'popup'. J'ai besoin d'avoir accès au html de popup. – freakish

+0

Eh bien, je suppose que je peux refactoriser mon code pour que cette solution soit assez bonne. :) Je vais marquer votre réponse, merci! – freakish

+0

une fois que vous avez accès à la poignée de la fenêtre, vous pouvez accéder au document de la fenêtre à 'w.document' qui vous permettra d'appeler' w.document.getElementById' ou toute autre fonction dont vous avez besoin. Faites attention à transmettre des données entre les fenêtres. Un objet dans une fenêtre peut agir bizarrement dans une autre en fonction du contexte dans lequel il est appelé. – zzzzBov

0

Déclare test() dans votre pop-up comme suit:

window["test"] = function() 
{ 
    alert("It works!"); 
} 

Ensuite, ouvrez votre pop-up de votre fenêtre principale:

var popup = window.open("popup.html", "The popup"); 

Et appelez votre fonction: (! Ne fonctionnera pas sans /show à cause de la restriction croisée de domaine)

popup.window.test(); 

jsFiddle : http://jsfiddle.net/szK3F/show/

+0

J'ai essayé cela et ça ne marche pas. :(Merci quand même! – freakish

+0

Est-ce que vos URL sont sur le même domaine? – ComFreek

+0

Oui, ils sont. J'utilise Chrome.En fait, le 'popup' n'a pas d'URL du tout.Il est vide et le contenu est inséré via' popup.document .write'. – freakish

Questions connexes