2013-10-08 16 views
6

私は混乱させた問題に遭遇しました。同じ起源を持つ2つのブラウザウィンドウ(タブ)がJavaScriptリソースを共有できることは、皆、知っています。JavaScript:親ウィンドウでスローされた例外は、子ウィンドウで発生します

だから、私は親ウィンドウがwindow.openを経由して子ウィンドウを開きました。子ウィンドウは親ウィンドウ内のグローバル関数をwindow.opener.functionName経由で呼び出します。下の2つのスニペットを見てみましょう:

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> 

問題がある:あなたがparent.htmlウィンドウでconsole.log結果を見つけることができ、親ウィンドウにスローされたその例外は、child.htmlウィンドウで奇妙に発生します。それは私を混乱させる、私はBDDテストのために親ウィンドウでその例外が必要です。どうすればそれを実現できますか?

私の下手な英語のため申し訳ありませんが、私の文法の間違いを訂正して自由に感じます。

========================更新===================== =

私はHTML5の機能postMessageを使用してこの問題の解決策を見つけました。しかし、私はまだそれがなぜ起こるのか不思議です。例外が親ウィンドウから子ウィンドウにエスケープされるのは何ですか?どんなインスピレーションにも感謝します。

答えて

1

私は自分で解決策を見つけました。解決策は簡単です:子ウィンドウで親ウィンドウにpostMessage経由で関数を呼び出すよう通知します。それは私が望むように動作します。私は親ウィンドウで例外をキャッチしました。

関連する問題