我收到了“脚本错误”。当在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中运行?
答案 0 :(得分:4)
如何让它在Safari中运行?
你做不到。当前版本的Safari不支持在跨源案例中向onerror
回调提供错误消息 - 即使在crossorigin
元素上指定了script
属性。
答案 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访问。