我遇到了一个让我困惑的问题。我们都知道,同源的几个浏览器窗口(标签)可以共享 JavaScript 资源。
所以,我让一个父窗口通过window.open
. 子窗口通过调用父窗口中的全局函数window.opener.functionName
。看看下面的两个片段:
父.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>
问题是:你可以console.log
在窗口中找到结果parent.html
,但是在父窗口中抛出的异常会奇怪地发生在child.html
窗口中。这让我很困惑,由于 BDD 测试,我需要父窗口中的异常。我怎样才能让它发生?
对不起我的英语不好,请随时纠正我的语法错误。
=========================更新======================
我找到了解决这个问题的方法,使用 HTML5 功能postMessage
。但我仍然很好奇为什么会这样。是什么让异常从父窗口逃逸到子窗口?任何灵感都值得赞赏。