“脚本错误”。在Safari中的window.onerror错误只有
我收到“脚本错误”。当在window.onerror中捕获错误时,即使正确(我认为)在S3上配置了CORS头文件。“脚本错误”。在Safari中的window.onerror错误只有
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中也能工作?
如何使它在Safari中也能工作?
你不行。即使在script
元素上指定了crossorigin
属性,Safari的当前版本也不支持在交叉源情况下向onerror
回调提供错误消息。
Safari之前确实支持它,但随后在某些时候倒退。
看来CORS不是问题。似乎全球onerror
处理程序的支持不在每个浏览器中。
参见: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror
事实上,它可能是与CORS。
当从不同来源加载的脚本中发生语法(?)错误时,不报告语法错误的详细信息以防止泄漏信息(请参阅错误363897)。相反,报告的错误只是“脚本错误”。在某些使用crossorigin属性的浏览器上可以重写此行为,并让服务器发送相应的CORS HTTP响应标头。解决方法是隔离“脚本错误”。并且知道错误细节仅在浏览器控制台中可见并且无法通过JavaScript访问。
没有找到一个开放的bug,即使我代替'onerror'与'的addEventListener(“error',它仍然进行同样的操作。另外,'onerror'对我的作品只是罚款异常源于Safari中的相同域。 –
错误出现在您的脚本标记中。脚本标记不能自行关闭。
<script crossorigin src="https://s3.amazonaws.com/safari-script-error/foo.js"></script>
^^^^^^^^^
这是从很久以前的搁置,但要求今天。
我很震惊为什么Safari在这种情况下的表现与主流浏览器的表现如此不同。 – jasonslyvia