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.