2

我创建了一些测试代码来打开一个新窗口并尝试从父窗口中捕获新窗口中的 javascript 错误。问题是它只适用于 Firefox:

...
<body>
<script>

    //open new window and keep a reference to it
    var w = window.open('test.html', '_blank'); //test.html has an error

    //add the error listener
    w.onerror = function(msg, file, line) { alert('error'); };

</script>
</body>
...

所有test.html代码:

<script>
alert('test');s //error on the s
</script>

Forefox 会捕捉到这一点,但 Chrome 和 IE 不会。所有 3 个浏览器都将打开新窗口,但错误警报仅在 Firefox 中显示。每个浏览器的控制台也显示错误。

为什么 Chrome 和 IE 不能捕获它?

还有其他方法可以使这两个浏览器捕获错误吗?

编辑: 我也尝试w.location.href在 onerror 代码之后添加,因为我认为可能 onerror 代码执行得太晚了。这并没有影响我的结果。Firefox 仍然是唯一一个发现该错误的人。

<script>
    var w = window.open('test2.html', '_blank'); // test 2 is a page with no errors
    w.onerror = function(msg, file, line) { alert('error'); };
    w.location.href = 'test.html'; // the page with the error
</script>
4

3 回答 3

1

我做了一点搜索,Chrome 和 IE 的返回值似乎window.open()不像 normal/original window

似乎原因是关于安全性,以下帖子是关于 chrome 扩展的,但它可能会有所帮助:

window.open 在 chrome 扩展中返回 undefined

于 2013-06-28T17:16:38.480 回答
0

您最好的选择是将新窗口中的任何代码包装在 try/catch 块中。捕获错误,然后将它们发送回来:

catch ... {
    window.opener.console.log(message);    
}
于 2013-06-28T16:32:02.560 回答
0

尝试添加一些超时

setTimeout(function(){w.onerror = function(msg, file, line) { alert('error'); };}, 3000)

于 2013-07-02T09:37:55.510 回答