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'.
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)
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)
| 归档时间: |
|
| 查看次数: |
23191 次 |
| 最近记录: |