如何判断html字符串是否包含内容而不仅仅是标签

时间:2018-11-22 13:10:16

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

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

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

至关重要的是,我需要它在检查时不运行javascript。像<script>alert(1)</script><img src=x onerror=alert(1)/>之类的东西应该不会发出警报。这是IE8的主要停止点。 IE9具有document.implementation.createHTMLDocument,IE 10和更高版本具有适用于html的DOMParser,但它们都不能运行JS,但是我找不到IE8的解决方案。

我认为最好的发现是基于javascript的html解析器,但是我看过的所有内容都是针对Node或不支持IE8。

1 个答案:

答案 0 :(得分: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);
   }
}