我正在尝试捕获JavaScript错误,但我并不总是收到有意义的错误消息并遇到“脚本错误”。 (字面意思是传递给window.onerror func的错误)。我在这个问题上挖掘了更多,并在下面找到了。
“脚本错误”。当一个人在Firefox,Safari和Chrome中发生 异常违反了浏览器的同源策略 - 即当 在除以外的域上托管的脚本中发生错误 当前页面的域名。
此行为是故意的,以防止脚本泄漏 信息到外部域。举个例子 必要的,想象一下,不小心访问了evilsite.com 包含
<script src="yourbank.com/index.html">
的页面。 (是的,我们是 将脚本标记指向html,而不是JS)。这将导致a 脚本错误,但错误很有趣,因为它可以告诉我们是否 你是否登录了。如果您已登录,则可能是错误 '欢迎弗雷德......'是未定义的,而如果你不是,它可能是 “请登录......”未定义。这些方面的东西。
Cryptic "Script Error." reported in Javascript in Chrome and Firefox建议解决上述问题,并启用CORS(http://enable-cors.org/)。
我通过强制服务器响应“Access-Control-Allow-Origin:*”标头并包含带有“crossorigin = anonymous”属性的脚本标记来启用CORS。
例如,请参阅http://jsfiddle.net/gQu5h/10/。当我点击“Scream Click Me”按钮时,我得到了正确的错误消息和堆栈(仅限基于Chromium的浏览器),但我收到“脚本错误”。当我点击“Click Me”按钮。谁能解释为什么即使启用了CORS也会发生这种情况?
/* HTML */
<input type="button" onclick="window.clickMe();" id="btn" value="Click Me" />
<input type="button" onclick="window.scream();" id="screamBtn" value="Scream Click Me" />
<div id="msg">Error Msg</div>
<div id="stack">Error Stack</div>
/* On page JS */
$(document).ready(function() {
$("body").append($("<script />", {
src: "http://rkjanardhana.com/test.js",
crossorigin: "anonymous",
type: "text/javascript"
}));
});
/* test.js */
window.onerror = function(errorMsg, file, lineNo, colNo, errStack) {
var msg = errorMsg ? errorMsg : "null"
, stack = errStack ? errStack : "null, only Chromium based browsers support errorStack"
;
$('#msg').html(msg);
$('#stack').html(stack);
}
window.clickMe = function() {
var l = "test";
l.callme();
}