5

Windows8のInternetExplorer10でのみ発生するように見えるJavaScriptの問題がいくつかあります(IE 7、8、および9はすべて正常に動作します)。私が行っている基本的な要点は、WebサービスからXMLとXSLを取得し、それらをJavaScriptで変換して、Sys.Net.XMLDOMオブジェクトを使用してページにレンダリングすることです。

XMLDOM = Sys.Net.XMLDOM;

var xsl = // XSL gotten from somewhere else 
var xmlString = // XML gotten from somewhere else as a string...
var xml = new XMLDOM(xmlString);

var content = xml.transformNode(xsl);

IE 10で上記のコードを使用すると、次のようになります。

オブジェクトはプロパティまたはメソッド'transformNode'をサポートしていません

Internet Explorer 10がこれを行う理由について何かアイデアはありますか?

編集

私もこれを試しました:

xmldoc = new ActiveXObject("Msxml2.DOMDocument"); 
xmldoc.async = false; 
xmldoc.load(xml); 

xsldoc = new ActiveXObject("Msxml2.DOMDocument"); 
xsldoc.async = false; 
xsldoc.load(xsl); 

var content = xmldoc.transformNode(xsldoc);

これは以前のすべてのバージョンのIEで機能しますが、IE10では次のようになります。

宣言されていない名前空間プレフィックスへの参照:'atom'。

4

4 に答える 4

5

IE 9とおろし金はそれをサポートしていません、この機能を試してください(オンラインで見つかりました

function TransformToHtmlText(xmlDoc, xsltDoc) {
    if (typeof (XSLTProcessor) != "undefined") { // FF, Safari, Chrome etc
        var xsltProcessor = new XSLTProcessor();
        xsltProcessor.importStylesheet(xsltDoc);
        var xmlFragment = xsltProcessor.transformToFragment(xmlDoc, document);
        return GetXmlStringFromXmlDoc(xmlFragment);
    }

    if (typeof (xmlDoc.transformNode) != "undefined") { // IE6, IE7, IE8
        return xmlDoc.transformNode(xsltDoc);
    }
    else {
        try { // IE9 and grater
            if (window.ActiveXObject) {
                var xslt = new ActiveXObject("Msxml2.XSLTemplate");
                var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
                xslDoc.loadXML(xsltDoc.xml);
                xslt.stylesheet = xslDoc;
                var xslProc = xslt.createProcessor();
                xslProc.input = xmlDoc;
                xslProc.transform();
                return xslProc.output;
            }
        }
        catch (e) {
            alert("The type [XSLTProcessor] and the function [XmlDocument.transformNode] are not supported by this browser, can't transform XML document to HTML string!");
            return null;
        }

    }
}
var content = TransformToHtmlText(xml, xsl);
于 2012-08-27T21:37:15.633 に答える
4

答えが見つかりました: http://blogs.msdn.com/b/ie/archive/2012/07/19/xmlhttprequest-responsexml-in-ie10-release-preview.aspx

IE 10 では、responseType が "msxml-document" に設定された XMLHttpRequest を使用する必要があります。コードをそれに切り替えると、すべてのブラウザーですべてが完全に機能します。

if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
} else {
    xhr = new ActiveXObject("Microsoft.XMLHTTP"); // For IE 6
}
xhr.open("GET", url, false);
try { xhr.responseType = "msxml-document"; } catch (e) { };
xhr.send();
于 2012-08-29T16:47:48.150 に答える
1

私はIE 9でも同じ問題を抱えていましたxslt.. https://msdn.microsoft.com/en-us/library/ms762796%28v=vs.85%29.aspxjQueryに記載されているスクリプトを使用してファイルをロードしました。

その後、機能を使用することができましたtransformNode()。彼らが提供したスクリプトは次のとおりです。

<HTML>
<HEAD>
  <TITLE>sample</TITLE>
  <SCRIPT language = "javascript">
     function init()
     {
        var srcTree =
           new ActiveXObject("Msxml2.DOMDocument.6.0");
        srcTree.async=false;
        // You can substitute other XML file names here.
        srcTree.load("hello.xml"); 

        var xsltTree =
           new ActiveXObject("Msxml2.DOMDocument.6.0");
        xsltTree.async = false;
        // You can substitute other XSLT file names here.
        xsltTree.load("hello.xsl");
        resTree.innerHTML = srcTree.transformNode(xsltTree);
     }
  </SCRIPT>
</HEAD>

<BODY onload = "init()" >
   <div id="resTree"></div>
</BODY>

</HTML>
于 2015-04-08T19:18:38.723 に答える