Поймать исключение того же происхождения в Javascript? - PullRequest
3 голосов
/ 01 декабря 2010

Я пытаюсь создать свою собственную платформу XMLHttpRequest, чтобы узнать, как это работает внутри.Меня удивляет то, что я не могу найти, как перехватить исключение «Одинаковое происхождение».

Идея, стоящая за этим, заключается в том, что я пытаюсь загрузить URL-адрес, если я получаю исключение того же происхождения, язапросите 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 ]

1 голос
/ 01 декабря 2010
xhr.onreadystatechange = function() {
    if (xhr.readyState==4) {
        if (xhr.status==0) {
            alert("denied");
        } else {
            alert("allowed");
        }
    }
}
1 голос
/ 01 декабря 2010

Вы уверены, что это на самом деле должно вызвать исключение? Я не вижу ничего в спецификациях: http://www.w3.org/TR/XMLHttpRequest/#exceptions Похоже, это так. Мой плохой.

В любом случае вы всегда можете проверить домен входящей строки по домену страницы, на которой в данный момент находится пользователь.


FWIW, как вы можете видеть по этому jsFiddle (открыть веб-инспектор), Chrome на самом деле не выдает исключение. Он просто говорит «Не удалось загрузить ресурс».

...