私は混乱させた問題に遭遇しました。同じ起源を持つ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
を使用してこの問題の解決策を見つけました。しかし、私はまだそれがなぜ起こるのか不思議です。例外が親ウィンドウから子ウィンドウにエスケープされるのは何ですか?どんなインスピレーションにも感謝します。