javascript - ParseFromString 在 IE 中抛出错误,但在 Chrome 中不会

标签 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 fine in Chrome

在我看来,此代码中存在错误 - 作者应该将实际的 XML 字符串传递给 parser.parseFromString() 函数,而不仅仅是 XML 文档的 url。解析器出现错误是有道理的,因为文件路径不是有效的 XML 文件(注意:kml 文件只是 XML)。但是,这不会导致在 Chrome 调试器工具中抛出任何错误,这真的很奇怪。

在我看来,这两种情况都应该失败。 DOMParser 上可靠的 MDN 文档没有提到将 URL 作为参数放入 parseFromString() 中。所以我的问题是为什么这在 Chrome 中有效,但在 IE 中抛出错误,然后我该怎么做才能修复它?

请注意,此问题与以下网址不同,因为这不是一般错误 - 这是关于在 Chrome 中有效但在 IE 中失败的问题:Internet Explorer 11 (IE 11) Throws Syntax Error using parseFromString in DOMParser

最佳答案

当 XML 是格式错误的非 Microsoft 浏览器(Firefox、Chrome 等)时,它将创建包含错误消息的 XML 文档作为其内容。点击here (<-- 单击此处)。

当 XML 在 Microsoft 浏览器、IE 和 Edge 中格式不正确时,它会抛出一个错误,将错误写入控制台并且您的脚本会停止。请注意我在 Mac 上,所以我已经远程测试了这个但没有机会亲自测试它。您可以将该代码放在 IE 的 try catch block 中,但我的意思是我不知道这是否会阻止它向控制台写入消息。

这是 code pen使用故意格式错误的 XML,并将错误消息写入输出中。代码笔或输出中没有错误。我故意将错误代码从解析器写入输出窗口。打开控制台看看发生了什么。

FWIW IE 是恕我直言的正确行为。直到最近,不抛出错误才是 Internet 做事的方式。不抛出错误的问题是您不知道自己做错了什么或哪里做错了。一次编写,调试一切。

此外,直到最近的版本,IE 才使用 ActiveX 来解析 XML 文档。

来自 W3C XML validation脚本:

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";
    }
}

相关question .

关于javascript - ParseFromString 在 IE 中抛出错误,但在 Chrome 中不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31277058/

相关文章:

JavaScript 应用()

javascript - 使用包含选择器在多列中搜索

javascript - 纸张输入故障排除中的验证,如何进行?

javascript - 无法让简单的 Chrome 通知发挥作用

javascript - 在 Chrome 中触发 Google 阅读器的刷新(在 Firefox 中有效)?

css - 使文本在 IE 和 Chrome 中均等对齐

javascript - 在标签页中打开 Chrome 应用

javascript - 未捕获的类型错误 : Illegal invocation in Chrome or SCRIPT65535: Invalid calling object in IE when submit form

jquery - IE 必须关闭才能使事件与 jQuery 一起工作

internet-explorer - jquery.ajax post 请求在 IE9 中缺少内容类型,在 Chrome 中有效