在Javascript中捕获相同的原点异常?

时间:2010-11-30 21:06:50

标签: javascript xmlhttprequest same-origin-policy

我正在尝试创建自己的XMLHttpRequest框架,以了解内部如何工作。 令我困惑的是,我找不到如何捕获“同源”异常。

这背后的想法是我尝试加载URL,如果我得到Same origin异常,我通过脚本本地的代理脚本重新请求URL。我这样做的原因是因为我需要从开发沙箱访问生产数据,我希望它对脚本本身尽可能透明。

我知道这是一种不好的做法,但这是目前执行此操作的最不具侵入性的方式:)

只是为了清除事情 - 我不想绕过相同的来源,我只想抓住抛出的异常,这样我就能做些什么。

以下是我目前用于xhr的代码:

var net = function (url, cb, setts){
    this.url = url;
    this.cb = cb;

    var oThis = this;
    if (!this.xhr) {
        this.xhr = new XMLHttpRequest();
        this.xhr.onreadystatechange = function() {
            if (oThis.xhr.readyState == 4 && oThis.xhr.status == 200) {
                document.body.innerHTML += "RS: "+oThis.xhr.readyState+"; ST:"+oThis.xhr.status+"; RP:"+oThis.xhr.responseText+"<br>";
            }
            else {
                // do some other stuff :)
                document.body.innerHTML += "RS: "+oThis.xhr.readyState+"; ST:"+oThis.xhr.status+"; RP:"+oThis.xhr.responseText+"<br>";
            }
        }
    }
    this.xhr.open("GET", url,true);
    this.xhr.send();
} // It's WIP so don't be scared about the unused vars or hardcoded values :)

我试过试试......赶上xhr.send();但无济于事,仍然无法捕捉异常。

任何想法或指示都将不胜感激。

2 个答案:

答案 0 :(得分:1)

您确定它实际上应该抛出异常吗?我在规范中看不到任何内容:http://www.w3.org/TR/XMLHttpRequest/#exceptions 看起来像它。我的坏。

在任何一种情况下,您始终可以根据用户当前所在页面的域检查传入字符串的域。


FWIW,正如您在this jsFiddle(打开Web Inspector)所看到的,Chrome并没有真正抛出异常。它只是说“无法加载资源”。

答案 1 :(得分:1)

xhr.onreadystatechange = function() {
    if (xhr.readyState==4) {
        if (xhr.status==0) {
            alert("denied");
        } else {
            alert("allowed");
        }
    }
}