“脚本错误”。在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之前确实支持它,但随后在某些时候倒退。

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

+0

我很震惊为什么Safari在这种情况下的表现与主流浏览器的表现如此不同。 – jasonslyvia

看来CORS不是问题。似乎全球onerror处理程序的支持不在每个浏览器中。

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

事实上,它可能是与CORS。

当从不同来源加载的脚本中发生语法(?)错误时,不报告语法错误的详细信息以防止泄漏信息(请参阅错误363897)。相反,报告的错误只是“脚本错误”。在某些使用crossorigin属性的浏览器上可以重写此行为,并让服务器发送相应的CORS HTTP响应标头。解决方法是隔离“脚本错误”。并且知道错误细节仅在浏览器控制台中可见并且无法通过JavaScript访问。

+0

没有找到一个开放的bug,即使我代替'onerror'与'的addEventListener(“error',它仍然进行同样的操作。另外,'onerror'对我的作品只是罚款异常源于Safari中的相同域。 –

错误出现在您的脚本标记中。脚本标记不能自行关闭。

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

这是从很久以前的搁置,但要求今天。