【问题标题】:Invalid argument error when converting an HTML string to a DOM element将 HTML 字符串转换为 DOM 元素时出现无效参数错误
【发布时间】:2018-08-09 05:58:12
【问题描述】:

我正在尝试将我的 HTML 字符串转换为 DOM 元素,但我收到一个脚本错误:无效参数。我的 Internet Explorer 版本是 9。请提出任何解决方案。下面是代码:

function open(htmlstring)
{
    var parser = new DOMParser();
    var doc = parser.parseFromString(htmlstring,"text/html");
}   

【问题讨论】:

  • 没有这种方法parserFromStringMy internet explorer version is 9 如果您正在尝试进行 Web 开发,请考虑改用现代浏览器,否则您可能会遇到很多事情。
  • 看起来像是错字应该是parseFromString
  • 查看MDN文章的Browser Compatibilty。您会看到 parseFromStringtext/html 选项仅在 IE10 中添加。

标签: javascript domparser


【解决方案1】:

编辑:如果你得到一个无效的参数,可能是你给出的参数是格式错误的 HTML,在这种情况下,你可以将它包装在 try、catch 和评估 htmlstring 的情况下格式错误。

您可以使用 DOMParser shim 或 polyfill。

/*
 * DOMParser HTML extension
 * 2012-09-04
 * 
 * By Eli Grey, http://eligrey.com
 * Public domain.
 * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
 */

/*! @source https://gist.github.com/1129031 */
/*global document, DOMParser*/

(function(DOMParser) {
    "use strict";

    var
      DOMParser_proto = DOMParser.prototype
    , real_parseFromString = DOMParser_proto.parseFromString
    ;

    // Firefox/Opera/IE throw errors on unsupported types
    try {
        // WebKit returns null on unsupported types
        if ((new DOMParser).parseFromString("", "text/html")) {
            // text/html parsing is natively supported
            return;
        }
    } catch (ex) {}

    DOMParser_proto.parseFromString = function(markup, type) {
        if (/^\s*text\/html\s*(?:;|$)/i.test(type)) {
            var
              doc = document.implementation.createHTMLDocument("")
            ;
                if (markup.toLowerCase().indexOf('<!doctype') > -1) {
                    doc.documentElement.innerHTML = markup;
                }
                else {
                    doc.body.innerHTML = markup;
                }
            return doc;
        } else {
            return real_parseFromString.apply(this, arguments);
        }
    };
}(DOMParser));

来自:https://gist.github.com/eligrey/1129031 或者只是在 google 上为 internet explorer 9 寻找 polyfill。甚至有一个完整的 ES6.js polyfill,它在 IE9 中不起作用的原因是因为这样的实现非常古老,所以很多现代的东西在那里不起作用.

【讨论】:

    猜你喜欢
    • 2021-04-27
    • 2011-03-07
    • 2012-12-02
    • 2013-07-14
    • 2023-03-13
    • 2014-08-30
    • 1970-01-01
    • 2017-12-29
    相关资源
    最近更新 更多