【问题标题】:How do I tell if an html string contains content and not just tags如何判断 html 字符串是否包含内容而不仅仅是标签
【发布时间】:2018-11-22 13:10:16
【问题描述】:

如何判断 html 字符串是否包含内容(文本、图像、视频标签等)而不仅仅是标签(例如,空表、空 div、空格、nbsp 等)

我需要能够在 javascript 中、在浏览器中执行此操作,并且它需要支持 IE8。我得出的结论是解析 html 是解决此问题的最佳方法。如果有另一种可行的方法,我也会对此感兴趣。不接受正则表达式。

至关重要的是,我需要它在检查时不运行 javascript。 <script>alert(1)</script><img src=x onerror=alert(1)/> 之类的东西不应该发出警报。这一直是 IE8 的主要停止点。 IE9 有 document.implementation.createHTMLDocument,IE 10 及以后有 DOMParser for html,两者都不会运行 JS,但我找不到 IE8 的解决方案。

我认为最好的方法是基于 javascript 的 html 解析器,但我看过的所有这些都是针对 Node 或不支持 IE8。

【问题讨论】:

    标签: javascript internet-explorer-8 html-parsing


    【解决方案1】:

    您可以使用它来解析 IE8 中的 html 字符串:

    var xmlDocument = new ActiveXObject('Microsoft.XMLDOM');
    xmlDocument.async = false;
    xmlDocument.loadXML(str);
    

    检测IE版本使用这个函数:

    function getInternetExplorerVersion()
    // Returns the version of Windows Internet Explorer or a -1
    // (indicating the use of another browser).
    {
       var rv = -1; // Return value assumes failure.
       if (navigator.appName == 'Microsoft Internet Explorer')
       {
          var ua = navigator.userAgent;
          var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
          if (re.exec(ua) != null)
             rv = parseFloat( RegExp.$1 );
       }
       return rv;
    }
    

    及用法:

    var ver = getInternetExplorerVersion();
    if ( ver> -1 )
    {
       if (ver = 8.0 )
       {
           var xmlDocument = new ActiveXObject('Microsoft.XMLDOM');
           xmlDocument.async = false;
           xmlDocument.loadXML(str);
       }
    }
    

    【讨论】:

    • 啊,忘了说我已经考虑过了,我们仍在运行 IE8 的客户会将其锁定,因此很可能不允许使用 activeX 对象。那我们不能假设我们得到的 html 将是有效的 xml。
    • 好吧,在这种情况下,您将不得不考虑允许Per-Site ActiveX Controls 或考虑不支持IE8。如果这些不是可选的,您将需要创建某种通用的 string 解析器,但我是 wouldn't go that way
    猜你喜欢
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 2011-01-03
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    相关资源
    最近更新 更多