У меня есть такой код:
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?





Если у вас уже есть '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.