隐秘的“脚本错误”。还没有用CORS修复

时间:2014-03-02 01:33:23

标签: javascript cors

我正在尝试捕获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();
}

0 个答案:

没有答案