我遇到了让我感到困惑的问题。我们都知道,具有相同来源的几个浏览器窗口(选项卡)可以共享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
找到了这个问题的解决方案。但我仍然好奇为什么会这样。什么使异常从父窗口转移到子窗口?任何灵感都表示赞赏。
答案 0 :(得分:1)
我自己已经找到了解决方案。解决方案很简单:在子窗口中,通知父窗口通过postMessage
调用该函数。它按我想要的方式工作。我在父窗口中捕获了异常。