3

重複の可能性:
Chrome: 同一オリジン ポリシーを無効にする

私の問題に関する少しの背景情報:

  • ギャラリー用の JavaScript ファイルを作成します。ここでは、xml ファイルからデータを取得します。
  • 非同期読み込みを使用して、XMLHttpRequest() で DOM オブジェクトを読み込みます。
  • responseText を DOMParser で解析して DOM オブジェクトを作成します。
  • FireFox では動作しますが、Chrome では失敗します。

編集(お読みください):

console.log を使用した後、Chrome がクロスオリジンの問題を報告しているようです:

  • リソース ファイルの読み込みに失敗しました: ./Gallery/dropdown_style.css
  • XMLHttpRequest はファイルを読み込めません: ./Gallery/gallery_info.xml。クロス オリジン リクエストは、HTTP でのみサポートされています。
  • ノードリスト[0]
  • 長さ: 0
  • キャッチされないエラー: NETWORK_ERR: XMLHttpRequest 例外 101
  • リソースの読み込みに失敗しました ./Gallery/Pictures/bg_one.jpg

今私の質問は次のとおりです。

  1. これをローカル レベル (オフライン) で修正するにはどうすればよいですか?
  2. すべてのファイルを同じサーバーにアップロードしても、これは問題になりますか?
  3. もしそうなら、それに対する解決策は何ですか(オンライン)?

これで DOM オブジェクトが表示され、おそらく Firefox と Chrome の両方で正しいものになります。そして、次のコードで:

window.alert(xmlDoc.getElementsByTagName("pic"));

「HTML Collection」または Chrome では「NodeList」のレスポンスで返されます。しかし、Chrome でその NodeList の長さを尋ねると、0 が返されます。これは、NodeList が正しくフォーマットされていないか、意図したとおりにフォーマットされていないことを意味します。

FireFox では、長さは 2 の値を返します。これは私が意図したものです。

余分な専門用語を除いた私のソースコードは次のとおりです。

var elemPic = [];

function initGallery(xmlFName){

    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", xmlFName, true);
    xmlhttp.onreadystatechange = function(){
        if (xmlhttp.readyState == 4){ //since it's offline and local, don't check status == 200
            //use a DOMParser, which is in a different file
            myCallBack(parseXml(xmlhttp.responseText));
        }
    }
    xmlhttp.send();
}

function myCallBack(xmlDoc){
    //window.alert(xmlDoc);
    elemPic = xmlDoc.getElementsByTagName("pic");
    //window.alert(elemPic);

    for(var i = 0; i < elemPic.length; i++){
        //whats the source path?
        var src = elemPic[i].getElementsByTagName('src')[0].childNodes[0].nodeValue;
        window.alert(src);
    }
}

そして、見たい場合は、ここに私のソースフォルダー全体があります:ソースフォルダー

これがどの問題なのかわかりません:

  1. DOM xml オブジェクトが壊れています
  2. NodeList が壊れています
  3. getElementsByTagName() に関する包括的な Chrome の問題
  4. 他の

問題の正確な原因と解決策を特定するのを手伝っていただければ、とても感謝しています。

4

1 に答える 1

0

答え: 問題は、Same-Origin ポリシーにあったようです。ローカル アクセスの場合は、ファイルをローカル Web サーバーにアップロードするか、テスト目的で Chrome の設定を変更します。サーバーにアップロードされていれば問題ありません。

ユーザーの Luminously、Diego Pino、Bergi に感謝します。

問題を解決する手順:

  1. window.alert() の代わりに console.log() を使用してください。はるかに詳細で正確です。
  2. ローカル: ローカル Web サーバーにファイルをアップロードするか、Chrome 設定を変更します (Web セキュリティを無効にします)
  3. グローバル: サーバーにアップロードしても問題ありません。
于 2012-11-20T02:30:37.657 に答える