JavaScript:父窗口中抛出的异常发生在子窗口中

时间:2013-10-08 12:22:57

标签: javascript html iframe

我遇到了让我感到困惑的问题。我们都知道,具有相同来源的几个浏览器窗口(选项卡)可以共享JavaScript资源。

因此,我通过window.open创建了一个父窗口打开一个子窗口。子窗口通过window.opener.functionName在父窗口中调用全局函数。看看下面的两个片段:

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>

问题是:您可以在console.log窗口中找到parent.html结果,但父窗口中抛出的异常将在child.html窗口中奇怪地出现。这让我感到困惑,因为BDD测试,我在父窗口中需要该异常。我怎样才能实现呢?

抱歉我的英语不好,随时纠正我的语法错误。

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

我使用HTML5功能postMessage找到了这个问题的解决方案。但我仍然好奇为什么会这样。什么使异常从父窗口转移到子窗口?任何灵感都表示赞赏。

1 个答案:

答案 0 :(得分:1)

我自己已经找到了解决方案。解决方案很简单:在子窗口中,通知父窗口通过postMessage调用该函数。它按我想要的方式工作。我在父窗口中捕获了异常。