对象不支持Internet Explorer 10中的属性或方法"transformNode"(Windows 8)

Joh*_*man 5 javascript internet-explorer-10

我有一些JavaScript问题似乎只发生在Windows 8上的Internet Explorer 10中(IE 7,8和9都可以正常工作).我正在做的基本要点是从Web服务获取XML和XSL,然后使用Sys.Net.XMLDOM对象在JavaScript中转换它们以在页面上呈现.

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);
Run Code Online (Sandbox Code Playgroud)

当我在IE 10中使用上面的代码时,我得到:

Object不支持属性或方法'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);
Run Code Online (Sandbox Code Playgroud)

哪个适用于所有以前版本的IE,但在IE 10中,我得到:

引用未声明的命名空间前缀:'atom'.

The*_*pha 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);
Run Code Online (Sandbox Code Playgroud)


Joh*_*man 4

找到答案:http://blogs.msdn.com/b/ie/archive/2012/07/19/xmlhttprequest-responsexml-in-ie10-release-preview.aspx

IE 10 要求使用 XMLHttpRequest,并将响应类型设置为“msxml-document”。一旦我将代码切换到该位置,一切就可以在所有浏览器中完美运行:

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();
Run Code Online (Sandbox Code Playgroud)