6

我有这样的代码:

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

但是,当我加载这样的 HTML 时,它会执行其中的所有 Javascript,并从“html”代码中请求某些资源。

我想禁用 javascript 和所有其他弹出窗口(例如证书错误)。

我的目标是使用 mshtml 文档中的 DOM 以可靠的方式从 HTML 中提取一些标签(而不是一堆正则表达式)。

或者是否有另一个 IE/Office DLL,我可以在不考虑 IE 相关弹出窗口或活动脚本的情况下加载 HTML?

4

4 回答 4

6
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()
于 2009-06-23T09:13:24.667 回答
1

如果您已经将 '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;
     }
  }
}
于 2008-09-26T12:46:18.767 回答
0

听起来您正在截屏一些资源,然后尝试以编程方式使用生成的 HTML 做一些事情?

如果您提前知道它是有效的 XHTML,则将 XHTML 字符串(实际上是 XML)加载到XmlDocument对象中,并以这种方式使用它。

否则,如果 HTML 可能无效或格式不正确,那么您将需要类似hpricot的东西(但那是一个 Ruby 库)

于 2008-10-11T00:03:25.560 回答
0

如果我没记错的话,MSHTML 会自动继承 IE 的设置。

因此,如果您在 Internet Explorer 中为正在执行代码的用户禁用 javascript,那么 Javascript 也不应该在 MSHTML 中运行。

于 2009-11-07T09:37:56.247 回答