Как мне узнать, содержит ли строка html содержимое, а не только теги? - PullRequest
0 голосов
/ 22 ноября 2018

Как определить, содержит ли строка html содержимое (текст, изображения, теги видео и т. Д.), А не только теги (например, пустую таблицу, пустые элементы div, пробелы, nbsp и т. Д.)

Iнужно быть в состоянии сделать это в JavaScript, в браузере, и он должен поддерживать IE8.Я пришел к выводу, что синтаксический анализ HTML является лучшим способом сделать это.Если есть другой способ, который может сработать, я бы тоже заинтересовался этим.Регулярное выражение неприемлемо.

Критически, мне нужно это, чтобы не запускать JavaScript во время проверки.Такие вещи, как <script>alert(1)</script> и <img src=x onerror=alert(1)/> не должны насторожить.Это стало основной точкой остановки для IE8.IE9 имеет document.implementation.createHTMLDocument, IE 10 и более поздние версии имеют DOMParser для html, ни один из которых не будет запускать JS, но я не могу найти решение для IE8.

Я думаю, что лучшей вещью для поиска был бы javascriptоснованный html-парсер, но все те, на которые я смотрел, предназначены для Node или не поддерживают IE8.

1 Ответ

0 голосов
/ 22 ноября 2018

Вы можете использовать это для разбора html-строки в IE8:

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);
   }
}
...