Как отключить JavaScript в mshtml.HTMLDocument (.NET) - PullRequest
6 голосов
/ 26 сентября 2008

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

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 (вместо множества регулярных выражений).

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

Ответы [ 4 ]

6 голосов
/ 23 июня 2009
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()
1 голос
/ 26 сентября 2008

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

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

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

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

PS после быстрого Google я нашел это ( источник ). Не уверен, поможет ли это, если вы вместо этого будете использовать это в своем 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;
     }
  }
}
0 голосов
/ 07 ноября 2009

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

Так что, если вы отключите JavaScript в Internet Explorer для пользователя, который выполняет код, то Javascript также не должен работать в MSHTML.

0 голосов
/ 11 октября 2008

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

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

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

...