Javascript ParseFromString在IE中抛出错误,但在Chrome中没有
我正在使用一个KML插件制作传单,它在Google Chrome中非常有效。然而,在IE中,它会在下面的代码中抛出一个错误Javascript ParseFromString在IE中抛出错误,但在Chrome中没有,javascript,google-chrome,internet-explorer,domparser,Javascript,Google Chrome,Internet Explorer,Domparser,我正在使用一个KML插件制作传单,它在Google Chrome中非常有效。然而,在IE中,它会在下面的代码中抛出一个错误 parser=new DOMParser(); console.log(url) // outputs: "path/to/kmlfile.kml" in Chrome debugger url=parser.parseFromString(url,"text/xml"); //This line throws a parser error in IE 11, but is
parser=new DOMParser();
console.log(url) // outputs: "path/to/kmlfile.kml" in Chrome debugger
url=parser.parseFromString(url,"text/xml"); //This line throws a parser error in IE 11, but is fine in Chrome
在我看来,这段代码中似乎有一个错误——作者应该向parser.parseFromString()函数传递一个实际的XML字符串,而不仅仅是XML文档的url。解析器可能会出错,因为文件路径不是有效的XML文件(注意:kml文件只是XML)。然而,这并不会导致在Chrome调试器工具中抛出任何错误,这真的很奇怪
在我看来,这两种情况都应该失败。DOMParser上可靠的MDN文档没有提到将URL作为参数放入parseFromString()中。所以我的问题是,为什么这在Chrome中起作用,但在IE中抛出一个错误,然后我能做些什么来修复它
请注意,此问题与以下url不同,因为这不是一般错误-这是关于在Chrome中工作但在IE中失败的内容:当XML在非Microsoft浏览器(Firefox、Chrome等)中格式不正确时,它将创建XML文档,并将错误消息作为其内容。点击(
function validateXML(text) {
var message;
var parser;
var xmlDoc;
// code for Edge, IE, Mozilla, Firefox, Opera, etc.
if (document.implementation.createDocument || window.DOMParser) {
parser = new DOMParser();
try {
xmlDoc = parser.parseFromString(text, "text/xml");
}
catch (error) {
}
if (xmlDoc.getElementsByTagName("parsererror").length > 0) {
return xmlDoc.getElementsByTagName("parsererror")[0];
}
else {
return "No errors found";
}
}
// code for older versions of IE
else if (window.ActiveXObject) {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
try {
xmlDoc.loadXML(text);
}
catch (error) {
}
if (xmlDoc.parseError.errorCode != 0) {
message = "Error Code: " + xmlDoc.parseError.errorCode + "\\n";
message = message + "Error Reason: " + xmlDoc.parseError.reason;
message = message + "Error Line: " + xmlDoc.parseError.line;
return message;
}
else {
return "No errors found";
}
}
else {
return "Not supported";
}
}