1

ページ全体のポストバックなしでファイルをアップロードするためにajax_uploadを使用しています。サーバーは応答を XML として返し、それを onComplete 関数で解析します。これは Chrome、Safari、Firefox では機能しますが、Internet Explorer では機能しません。これが Internet Explorer で機能しない理由 (少なくとも私が考える理由) は、IE が iframe 内の XML を解析し、iframe がサイズ 0 に設定されていても、構文を強調表示して表示するためです。 iframe を取得すると、IE が追加する構文の強調表示のために、 $.parseXml() で解析できない破損したバージョンの XML が取得されます。

私はグーグルで検索し、 iframe.document.XMLDocument を使用して iframe から生の XML を取得するという言及を見つけましたが、それは私にとっては機能せず、それについて言及している投稿は本当に古いものでした。

問題は、IEが構文を強調表示せずにiframeからXMLデータを取得する方法を知っている人はいますか(HTMLを追加してXMLのタグをエスケープすることによって行います)、またはIEに解析しないように指示する方法はありますか? HTTP ヘッダーの XML などですか?

4

1 に答える 1

0

Content-Type: text/plainこの問題の修正に役立つと思いましたが、これは他のブラウザーでのみ役立ちます。IE にはコンテンツ タイプを検出する独自の方法があり、この動作を簡単に無効にすることはできません。詳細についてはMSDNを参照してください

もちろん、次のような汚いハックを作成できます。

<iframe src="test.xml" onload="test()" id="f1"></iframe>

強調表示されたコードを解析します。

function test() {
    var iframe = document.getElementById('f1');
    var frameBody = iframe.contentWindow.document.body;

    // remove unneeded toggle links +/-
    var links = frameBody.getElementsByTagName('a');
    for (var i = links.length - 1; i >= 0; i--) {
        if(links[i].className === 'b') {
            links[i].parentNode.removeChild(links[i]);
        }
    }

    // display parsed XML source
    alert(frameBody.innerText);

    // parse cleaned highlight code source to new XML document
    var xml = $.parseXML(area.value);
    alert(xml);
}

これは IE6-8 で動作しますが、この方法は信頼できません :) したがって、この問題を回避するために、可能であれば XML の代わりに JSON を使用することをお勧めします。

于 2012-11-20T22:20:21.650 に答える