Как отключить Javascript в mshtml.HTMLDocument (.NET)

У меня есть такой код:

Dim Document As New mshtml.HTMLDocument
Dim iDoc As mshtml.IHTMLDocument2 = CType(Document, mshtml.IHTMLDocument2)
iDoc.write(html)
iDoc.close()

Однако, когда я загружаю такой HTML, он выполняет в нем все Javascripts, а также выполняет запросы к некоторым ресурсам из "html" кода.

Я хочу отключить javascript и все другие всплывающие окна (например, ошибку сертификата).

Моя цель - использовать DOM из документа mshtml для надежного извлечения некоторых тегов из HTML (вместо набора регулярных выражений).

Или есть еще одна DLL IE / Office, в которую я могу просто загрузить HTML, не думая о всплывающих окнах или активных скриптах, связанных с IE?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
0
4 759
4

Ответы 4

Если у вас уже есть 'html' в виде строки, и вы просто хотите получить доступ к его представлению DOM, зачем вообще «отображать» его в элементе управления браузера?

Я не знаком с технологией .Net, но должен быть какой-то тип StringToDOM / StringToJSON, который лучше отвечал бы вашим потребностям.

Аналогично, если переменная 'html', которую вы используете выше, является URL-адресом, просто используйте wget или что-то подобное, чтобы получить разметку в виде строки и проанализировать с помощью подходящего инструмента.

Я бы поискал библиотеку .Net XML / DOM и использовал ее. (опять же, я бы подумал, что это будет частью языка, но я не уверен)

PS после быстрого гугла нашел вот это (источник). Не уверен, что это поможет, если вы вместо этого воспользуетесь этим в своем HTMLDocument.

    if (typeof(DOMParser) == 'undefined') {
      DOMParser = function() {}
      DOMParser.prototype.parseFromString = function(str, contentType) {
      if (typeof(ActiveXObject) != 'undefined') {
        var xmldata = new ActiveXObject('MSXML.DomDocument');
        xmldata.async = false;
        xmldata.loadXML(str);
        return xmldata;
     } else if (typeof(XMLHttpRequest) != 'undefined') {
        var xmldata = new XMLHttpRequest;
        if (!contentType) {
          contentType = 'application/xml';
        }
        xmldata.open('GET', 'data:' + contentType + ';charset=utf-8,' + encodeURIComponent(str), false);
        if (xmldata.overrideMimeType) {
          xmldata.overrideMimeType(contentType);
        }
        xmldata.send(null);
        return xmldata.responseXML;
     }
  }
}

Похоже, вы просматриваете какой-то ресурс, а затем пытаетесь программно сделать что-то с полученным HTML?

Если вы заранее знаете, что это действительный XHTML, загрузите строку XHTML (которая на самом деле является XML) в объект XmlDocument и работайте с ним таким образом.

В противном случае, если он потенциально недействителен или неправильно сформирован, HTML вам понадобится что-то вроде трикотаж (но это библиотека Ruby)

Dim Document As New mshtml.HTMLDocument
Dim iDoc As mshtml.IHTMLDocument2 = CType(Document, mshtml.IHTMLDocument2)
'add this code
iDoc.designMode = "On"
iDoc.write(html)iDoc.close()

Если я правильно помню, MSHTML автоматически наследует настройки IE.

Поэтому, если вы отключите javascript в Internet Explorer для пользователя, выполняющего код, Javascript также не должен работать в MSHTML.

Другие вопросы по теме