2013-10-08 11 views
6

Mi sono imbattuto in un problema che mi ha reso confuso. Sappiamo tutti che un paio di finestre di browser (schede) che hanno la stessa origine possono condividere risorse JavaScript.JavaScript: si verifica un'eccezione generata nella finestra padre nella finestra secondaria

Così, ho fatto una finestra genitore aprire una finestra secondaria tramite window.open. La finestra secondaria chiama una funzione globale nella finestra padre tramite window.opener.functionName. Date un'occhiata a due frammenti di seguito:

Parent.html

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
    <h1>Parent</h1> 
</body> 
<script type="text/javascript"> 

function sayHi(child) { 
    console.log("Before throwing an error.."); 
    throw new Error('Some error'); 
} 

window.open('child.html') 

</script> 
</html> 

child.html

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
    <h1>Child</h1> 
</body> 
<script type="text/javascript"> 

window.opener.sayHi(window); 

</script> 
</html> 

Il problema è: è possibile trovare il risultato console.log in parent.html finestra, ma quell'eccezione generata nella finestra del genitore si presenterà stranamente nella finestra child.html. Mi fa confondere, ho bisogno di quell'eccezione nella finestra genitore a causa del test BDD. Come posso farlo accadere?

Scusate il mio scarso inglese, sentitevi liberi di correggere i miei errori grammaticali.

Aggiornamento ======================== ===================== =

Ho trovato una soluzione a questa domanda, utilizzando la funzione HTML5 postMessage. Ma sono ancora curioso di sapere perché succede. Che cosa fa sfuggire l'eccezione dalla finestra padre alla finestra figlio? Ogni ispirazione è apprezzata.

risposta

1

Ho trovato la soluzione da solo. La soluzione è semplice: nella finestra secondaria, informa la finestra padre per chiamare la funzione tramite postMessage. Funziona come voglio io. Ho rilevato l'eccezione nella finestra principale.

Problemi correlati