【问题标题】:Getting Javascript Errors From Another Window从另一个窗口获取 Javascript 错误
【发布时间】:2013-06-28 16:22:42
【问题描述】:

我创建了一些测试代码来打开一个新窗口,并尝试从父窗口捕获新窗口中的 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 不能捕获它?

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

编辑: 我还尝试在 onerror 代码后添加w.location.href,因为我认为可能是 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>

【问题讨论】:

    标签: javascript


    【解决方案1】:

    我搜了一下,Chrome和IE的window.open()的返回值好像不是正常的/原来的window

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

    window.open returns undefined in chrome extension

    【讨论】:

    • 谢谢,确实有帮助。我想知道是否有另一种方法。我尝试以与该帖子相同的方式注入 javascript,但它不起作用。
    • 我决定打印出我的w 变量。在 Chrome 中它说[object Window]' and IE says [object]`。所以看起来至少在 Chrome 中它是一个普通的窗口,也许吧?
    • 我认为这是一个真实的[object Window],但它不能正常工作window 可能是因为安全问题或实施问题。我不确定,但我认为您应该找到一些解决方法。
    【解决方案2】:

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

    catch ... {
        window.opener.console.log(message);    
    }
    

    【讨论】:

    • 我在window.open 语句中添加了一个try/catch 块,并且没有抛出任何错误。
    • 抱歉回答不正确。我已经修改了我的答案,让我知道这是否适合你。
    【解决方案3】:

    尝试添加一些超时

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

    【讨论】:

    • 我已经尝试过了,但它并没有改变我的结果。感谢您的建议。
    猜你喜欢
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多