“脚本错误。”仅限Safari中的window.onerror中的错误

时间:2017-08-23 16:03:41

标签: javascript html safari cors onerror

我收到了“脚本错误”。当在window.onerror中捕获错误时,即使在S3上正确(我认为)配置了CORS头文件。

CORS配置:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

HTML:

<script crossorigin src="https://s3.amazonaws.com/safari-script-error/foo.js" />

包含:

window.addEventListener("keydown", function(event) {
  if (event.keyCode === 69) { // "e" button
    throw new Error("Oh shoot");
  }
});

JS:

window.onerror = function(event) {
  console.log(event);
}

Codepen:https://codepen.io/astashov/pen/yoEvRB

它在Chrome,Firefox和IE11中运行良好,只显示“脚本错误”。在Safari中(我有版本10.0.3(12602.4.8))。

如何让它在Safari中运行?

2 个答案:

答案 0 :(得分:4)

  

如何让它在Safari中运行?

你做不到。当前版本的Safari不支持在跨源案例中向onerror回调提供错误消息 - 即使在crossorigin元素上指定了script属性。

Safari之前确实支持它,但随后在某些时候退步了。

https://bugs.webkit.org/show_bug.cgi?id=132945

有一个漏洞

答案 1 :(得分:1)

CORS不是问题所在。似乎每个浏览器都不支持全局onerror处理程序。

请参阅: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror

实际上,它可能与CORS有关。

  

如果脚本中发生语法(?)错误,从不同的源加载,则不会报告语法错误的详细信息以防止泄漏信息(请参阅错误363897)。相反,报告的错误只是&#34;脚本错误。&#34;在某些使用crossorigin属性并让服务器发送相应的CORS HTTP响应头的浏览器中,可以覆盖此行为。解决方法是隔离&#34;脚本错误。&#34;并且知道错误细节只能在浏览器控制台中查看而且无法通过JavaScript访问。