【问题标题】:c# webbrowser control displaying "special folder" contents : why are Document and DocumentDom always null?c# webbrowser 控件显示“特殊文件夹”内容:为什么 Document 和 DocumentDom 总是为空?
【发布时间】:2009-09-26 10:37:51
【问题描述】:

在 C# WinForms、.NET Framework 3.5 项目中,表单上有一个 WebBrower 控件:

... 项目引用设置为 MSHTMLdll 和 WinForm 代码:​​“使用 mshtml;” ...

  1. 您可以轻松地将“特殊文件夹”(如收藏夹文件夹)加载到浏览器中。

  2. 加载“特殊文件夹”后:WebBrowser 中显示的内容本质上是一种“资源管理器”视图:您可以选择典型的“资源管理器”视图样式的“详细信息等”。在详细信息视图中,您有一个行列矩阵,具有典型的“Explorer”样式列标题等。

通常我会通过将 Document 或 Document 的 DomDocument 转换为 mshtml.dll 公开的 IHTMLDocument2 接口来“获取”WebBrowser 的 DOM:

IHTMLDocument2 HTMLDocument = (IHTMLDocument2)webBrowser1.Document;

//这个也试过了

// IHTMLDocument2 HTMLDocument = (IHTMLDocument2)webBrowser1.Document.DomDocument;

//也试过这个

// HTMLDocumentClass HTMLDocument = webBrowser1.Document.DomDocument as HTMLDocumentClass;

但在这种情况下,查看“特殊文件夹”内容时,我总是将 Document 设为 null。

有趣的是,您可以在查看特殊文件夹(如收藏夹)时创建一个新文件夹并执行其他“文件操作”:我想知道我是否“摆脱了这个”,因为我已关闭保护模式IE8 ?

在查看 WebBrowser 控件中的特殊文件夹时,了解有关如何访问 DOM 的任何想法。

谢谢!比尔

【问题讨论】:

    标签: c# dom browser mshtml


    【解决方案1】:

    文件夹视图不是 HTML 文档,因此您不能使用 HTML 界面访问内容。如果您真的对窗口中显示的内容感兴趣,请使用 IShellBrowser、IShellView 和 IFolderView 等 shell 接口。

    【讨论】:

    • 您好江升,感谢您的建议!在这种情况下,我显示的内容是 IE8 的收藏夹文件夹。我将尝试使用您提到的接口进行试验。最好的,比尔
    【解决方案2】:

    在加载页面之前,Webbrowser 的文档属性通常为空。你可以试试这个来初始化文档属性:

    webBrowser1.Navigate("about:blank"); while (webBrowser1.Document.Body == null) Application.DoEvents(); // 现在您可以访问 Document 属性,包括获取/设置 innerHtml

    但是,我不确定这是否会对您有所帮助,因为 Document 属性为 null,而您仍在查看您想查看的内容,这表明即使 Document 属性不再为 null,也不会是访问特殊文件夹数据的方式。但是你可以试试上面的代码,然后加载你的特殊文件夹,然后查看文档,看看你得到了什么......

    【讨论】:

    • 嗨特雷,感谢您的回复!在这种情况下,您可以确定我已经通过代码仔细“等待”,直到使用标准方法加载页面。现在,我确实相信,当查看此类特殊文件夹时,WebBrowser 处于某种“更改状态”,其中“视图”是一种伪资源管理器视图,并且在该状态下无法访问 DOM,但是,我希望被证明是错误的 :) 最好的,比尔
    猜你喜欢
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 2019-12-20
    相关资源
    最近更新 更多