ParseFromString抛出错误在IE,但不是在Chrome
ParseFromString throws error in IE, but not in Chrome
我正在使用一个KML插件的传单,在谷歌浏览器中工作得很好。但是,在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
在我看来,这段代码中有一个错误——作者应该传递一个实际的XML字符串,而不仅仅是一个指向XML文档的url到parser.parseFromString()函数。解析器出现错误是有道理的,因为文件的路径不是有效的XML文件(注意:kml文件只是XML)。但是,这不会导致在Chrome调试器工具中抛出任何错误,这真的很奇怪。
在我看来,这在两个例子中都应该失败。可靠的DOMParser上的MDN文档没有提到将URL作为parseFromString()的参数。所以我的问题是为什么这在Chrome中工作,但在IE中抛出错误,然后我能做些什么来修复它?
注意这个问题是不同于下面的url,因为这不是一个一般的错误-这是关于一些在Chrome中工作,但在IE失败:Internet Explorer 11 (IE 11)抛出语法错误使用parseFromString在DOMParser
当XML是非格式的非microsoft浏览器(Firefox, Chrome等)时,它将创建带有错误消息作为内容的XML文档。点击这里(<——点击那里)。
当XML在Microsoft浏览器、IE和Edge中出现格式错误时,它会抛出一个错误,向控制台写入一个错误,然后脚本停止。请注意,我使用的是Mac电脑,所以我进行了远程测试,但没有机会亲自测试。你可以把代码放在IE的try - catch块中,但我的意思是,我不知道这是否会阻止它向控制台写入消息。
下面是故意使用格式错误的XML编写的代码笔,错误消息写入输出中。编码或输出中没有错误。我有意将错误代码从解析器写入到输出窗口。打开控制台看看发生了什么。
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";
}
}
有关问题。
- IE/Chrome中未定义的函数,但Firefox中没有
- 滚动在Chrome中有效,但在Firefox或IE中无效
- CKeditor预览插件.js,为Chrome和IE进行编辑.因为它拒绝CSS样式
- 如何编写在Chrome和IE中正常工作的JavaScript
- document.images未加载在chrome或firefox上,但已加载在IE上
- Javascript赢得'不能在IE上编译,但可以在Chrome上运行
- IE与Chrome的怪癖模式
- Json到CSV下载,可以在chrome中工作,但不能在IE浏览器中工作
- Jquery selectmenu组合框在IE和Chrome中每当按钮打开时就会关闭
- 以下颜色更改功能在IE9和Firefox中运行良好,但在早期的IE或Chrome中则不然
- window.opener not working in chrome & IE
- HTML5视频无法在chrome上工作,在服务器上托管后的IE,mov文件中的视频(quicktime格式)
- Iframe加载调整大小在Chrome中工作,但不能在IE或Firefox中工作
- AngularJS$http.post没有'不适用于Chrome,仅适用于IE
- Javascript'元素'在ie中未定义,但在chrome和firefox中运行良好
- Multi-platform (Chrome, IE, Firefox)
- Javascript在JS Fiddle中工作,但在Chrome / IE中不起作用
- jQuery:$.getJSON对Chrome/IE上的数据进行排序
- 输入元素在Firefox中没有定义,但在Chrome/IE中有
- 下拉JavaScript的onClick事件不触发Chrome/IE