ParseFromString抛出错误在IE,但不是在Chrome

ParseFromString throws error in IE, but not in Chrome

本文关键字:Chrome IE 出错 错误 ParseFromString      更新时间:2023-09-26

我正在使用一个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";
    }
}

有关问题。