3

これが内部でどのように機能するかを学ぶために、独自の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();をキャッチします。しかし、役に立たず、それでも例外をキャッチすることはできません。

任意のアイデアやポインタをいただければ幸いです。

4

2 に答える 2

1
xhr.onreadystatechange = function() {
    if (xhr.readyState==4) {
        if (xhr.status==0) {
            alert("denied");
        } else {
            alert("allowed");
        }
    }
}
于 2010-11-30T21:58:38.413 に答える
1

実際に例外をスローすることになっていますか?仕様に何も表示されません:http ://www.w3.org/TR/XMLHttpRequest/#exceptionsそのように見えます。私の悪い。

どちらの場合でも、ユーザーが現在表示しているページのドメインに対して、着信文字列のドメインをいつでも確認できます。


FWIW、このjsFiddle(Web Inspectorを開く)からわかるように、Chromeは実際には例外をスローしません。「リソースの読み込みに失敗しました」とだけ表示されます。

于 2010-11-30T21:26:25.040 に答える