2008-09-25 12 views
5

Tengo un código como el siguiente:Cómo deshabilitar Javascript en mshtml.HTMLDocument (NET)

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

Sin embargo, cuando me carga un archivo HTML como éste se ejecuta todos los archivos JavaScript en ella, así como hacer la solicitud a algunos recursos del código "html".

Quiero desactivar javascript y todas las demás ventanas emergentes (como error de certificado).

Mi objetivo es utilizar DOM desde el documento mshtml para extraer algunas etiquetas del HTML de manera confiable (en lugar de un montón de expresiones regulares).

¿O hay otra IE/Office DLL que puedo simplemente cargar un HTML sin pensar en ventanas emergentes relacionadas con IE o scripts activos?

Respuesta

1

Si ya tiene el 'html' como una cadena y solo desea tener acceso a la vista DOM de él, ¿por qué "renderizarlo" en un control de navegador?

No estoy familiarizado con la tecnología .Net, pero tiene que haber algún tipo de cosa StringToDOM/StringToJSON que se adapte mejor a sus necesidades.

Del mismo modo, si la variable 'html' que está utilizando anteriormente es una URL, simplemente use wget o similar para recuperar el marcado como una cadena y analizar con una herramienta aplicable.

Buscaría una biblioteca .Net XML/DOM y la usaría. (de nuevo, me gustaría saber que esto sería parte del lenguaje, pero no estoy seguro)

PD después de un Google rápido Encontré esto (source). No estoy seguro de si sería útil, si tuviera que usar esto en su HTMLDocument en su lugar.

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

Suena como que está screenscraping algún recurso, a continuación, tratando de hacer algo mediante programación w/el código HTML resultante?

Si sabe que XHTML es válido antes de tiempo, cargue la cadena XHTML (que en realidad es XML) en un objeto XmlDocument, y trabaje con ella de esa manera.

De lo contrario, si es potencialmente válido, o no está correctamente formada, HTML, entonces necesitará algo así como hpricot (pero eso es una biblioteca de Rubí)

5
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() 
+0

Funciona como un encanto –

0

Si no recuerdo mal Mshtml hereda automáticamente los ajustes de IE.

Así que si deshabilita javascript en internet explorer para el usuario que está ejecutando el código, entonces Javascript tampoco debería ejecutarse en MSHTML.

Cuestiones relacionadas