2012-05-14 24 views
13

Sto provando a chiamare una funzione javascript definita in un genitore da una finestra secondaria. Ho due file come questo:JavaScript window.opener chiamata genitore funzione

Parent:

<html> 
<head> 
<title>Test</title> 
<script type="text/javascript"> 
function foo() { 
alert ("Hello from parent!"); 
} 
function doStuff() { 
var w = window.open("testa.html"); 
} 
</script> 
</head> 
<body> 
<input type="button" value="open" onClick="doStuff();" /> 
</body> 
</html> 

E bambino:

<html> 
<head> 
<title>Test A</title> 
<script type="text/javascript"> 
function get() { 
window.opener.foo(); 
} 
</script> 
</head> 
<body> 
<input type="button" value="Call Parent" onClick="get();" /> 
</body> 
</html> 

non posso, per la vita di me, chiamare la funzione foo dal processo figlio. Ho pensato che questo dovrebbe essere possibile con l'oggetto window.opener, ma non riesco a farlo funzionare. Eventuali suggerimenti?

+4

Accedete a queste pagine tramite 'http: //' o 'file: ///'? Il protocollo 'file' non ha un'origine, quindi fallirai sempre con [SOP] (http://en.wikipedia.org/wiki/Same_origin_policy), rendendo inaccessibile l'opzione' opener'. –

+0

Risulta che era questo il problema: stavo semplicemente accedendoli su file: //. Quando li butto nella directory http: //, funziona perfettamente. – RPIBuckHunter

+0

Che cos'è http: // e file: ///? come cambiarlo dall'uno all'altro. Ho lo stesso problema? Per favore aiuto. –

risposta

16

Assicurarsi di accedere a questo tramite http: // in modo che la stessa politica di origine passi e che sia possibile accedere al dispositivo di apertura dal figlio. Non funzionerà se stai usando solo file: //.

+0

Funzionerà per https: //? – Muthu

1

rispondendo alla domanda di Rahul:

Ogni browser può caricare le pagine dal server o dal file system locale. Per caricare il file dal filesystem locale devi inserire nel browser l'indirizzo come questo file://[path], dove [percorso] è il percorso assoluto del file nel filesystem (compresa la lettera di unità su Windows, vedi http://blogs.msdn.com/b/ie/archive/2006/12/06/file-uris-in-windows.aspx per i dettagli).

Per caricare il file dal server HTTP locale (se ne avete uno), è necessario inserire un indirizzo come questo http://localhost:[port]/[path], dove [porta] è la porta su cui è in esecuzione il server (l'impostazione predefinita è 80) e [percorso] è il percorso del file relativo alla cartella radice del documento del server. La cartella radice del documento dipende dalla configurazione del server.

Quindi, come vedete, lo stesso file locale può essere caricato nel browser in due modi. C'è comunque una grande differenza tra questi due modi. Nel primo caso il browser non usa il protocollo HTTP per caricare il file e quindi mancano molte cose necessarie affinché i diversi meccanismi funzionino correttamente. Ad esempio, AJAX non funziona con i file locali, poiché lo stato di risposta HTTP non è 200, ecc.

In questo particolare esempio il meccanismo di sicurezza del browser non ha ottenuto le informazioni di origine e impediva l'accesso alla finestra padre.

Problemi correlati