use*_*723 6 javascript internet-explorer google-chrome 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 fine in Chrome
Run Code Online (Sandbox Code Playgroud)
在我看来,这段代码有一个错误——作者应该将一个实际的 XML 字符串,而不仅仅是一个指向 XML 文档的 url 传递给 parser.parseFromString() 函数。解析器会出错是有道理的,因为文件路径不是有效的 XML 文件(注意:kml 文件只是 XML)。但是,这并不会导致Chrome Debugger工具抛出任何错误,这真的很奇怪。
在我看来,这在两种情况下都应该失败。DOMParser 上的 Trusty MDN 文档没有提到将 URL 作为参数放在 parseFromString() 中。所以我的问题是为什么这在 Chrome 中有效,但在 IE 中抛出错误,然后我该怎么做才能修复它?
请注意,此问题与以下 url 不同,因为这不是一般错误 - 这是关于在 Chrome 中有效但在 IE 中失败的问题:Internet Explorer 11 (IE 11) Throws Syntax Error using parseFromString in DOMParser
当 XML 格式错误时,非 Microsoft 浏览器(Firefox、Chrome 等)将创建带有错误消息的 XML 文档作为其内容。单击此处(<-- 单击此处)。
当 XML 在 Microsoft 浏览器、IE 和 Edge 中格式错误时,它会引发错误,将错误写入控制台并且您的脚本停止。注意我在 Mac 上,所以我已经远程测试了它,但没有机会亲自测试它。您可以将该代码放在 IE 的 try catch 块中,但我的意思是我不知道这是否会阻止它向控制台写入消息。
这是带有故意格式错误的 XML的代码笔,错误消息写在输出中。codepen 或输出中没有错误。我有意将解析器中的错误代码写入输出窗口。打开控制台看看发生了什么。
FWIW IE 是正确的行为恕我直言。直到最近,不抛出错误才成为互联网的做事方式。不抛出错误的问题是你不知道你做错了什么或在哪里。编写一次,调试一切。
此外,直到最近的版本,IE 使用 ActiveX 来解析 XML 文档。
来自 W3C 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";
}
}
Run Code Online (Sandbox Code Playgroud)
相关问题。
| 归档时间: |
|
| 查看次数: |
4671 次 |
| 最近记录: |