6

我遇到了一个让我困惑的问题。我们都知道,同源的几个浏览器窗口(标签)可以共享 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。但我仍然很好奇为什么会这样。是什么让异常从父窗口逃逸到子窗口?任何灵感都值得赞赏。

4

1 回答 1

1

我自己想出了解决方案。解决方法很简单:在子窗口中,通知父窗口调用函数postMessage。它按我的意愿工作。我在父窗口中发现了异常。

于 2013-10-08T13:30:16.857 回答