1

私が構築しているサイトはパッケージとしてユーザーに直接送信されることを目的としているため、「ファイル」プロトコルを介してXMLをロードするためのInternetExplorer8ソリューションを作成しようとしています。XMLHttpRequestを使用してこれを処理しようとしたときに経験したことはすべて、オンラインで読んだものをサポートしているようです。IE8のXMLHttpRequest実装はプロトコルを嫌うため、ActiveXObjectを使用して読み込みを処理する必要があります。

私はさまざまな人々の提案を試しましたが、responseTextフィールドにファイルの内容が入力されているため、最終的にファイルを正常に取得しているように見えるコードができました。ただし、XMLを保持することになっているresponseXML.xmlフィールド(またはそのテキスト表現、私が読んだドキュメントはどれも非常に明確ではありません)は常に空の文字列です。XMLを正しくロードするようにActiveXObjectを構成するにはどうすればよいですか?

ボーナスとして、ロードされたXMLが正常にロードされたら、ロードされたXMLをどのように使用するかを誰かが説明できますか?そのビットを説明するドキュメントはまだ見つかりません。

これが私のJavaScriptです:

function isIE() {
    return navigator.userAgent.lastIndexOf('Trident') > 0;
}

// This block ensures that the XML request occurs in the same domain.
var path = document.location.href;
path = path.substr(0, path.lastIndexOf('/') + 1);

if (isIE() && location.protocol == 'file:') {
    var xmlRequest = new ActiveXObject('MSXML2.XMLHTTP');
    xmlRequest.open('GET', path + 'xml/shared.xml', false);
    xmlRequest.onreadystatechange = useXML;
    xmlRequest.send();

    function useXML() {
        if (xmlRequest && xmlRequest.readyState && xmlRequest.readyState == 4) {
            alert(xmlRequest.responseText);    // displays the file
            alert(xmlRequest.responseXML.xml); // displays nothing
        }
    }
}

そして、これが私のXMLファイルです。

<?xml version="1.0" encoding="ISO-8859-1"?>
<shared>
    <page_title>
        Test Page Title
    </page_title>
</shared>

w3schools XMLバリデーターを使用して、このファイルが何らかの形で不正であるかどうかを確認しました。そうではない。

4

1 に答える 1

2

これは、ローカル ファイルが (サーバーが行うように) text/xml として提供されず、IE が解析しないためです..

Microsoft.XMLDOMオブジェクトを使用して手動で解析できます

function useXML() {
        if (xmlRequest && xmlRequest.readyState && xmlRequest.readyState == 4) {
            alert(xmlRequest.responseText);    // displays the file
            xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async="false";
            xmlDoc.loadXML(xmlRequest.responseText);
            title = xmlDoc.documentElement.getElementsByTagName('page_title')[0];
            alert(title.childNodes[0].nodeValue);
        }
    }
于 2011-02-09T23:59:32.243 に答える