WebBrowser控件不实例化文档

时间:2013-08-28 15:43:07

标签: c# winforms webbrowser-control

我的Windows窗体应用程序中有WebBrowser控件,但它只是不加载文档。

这是我的代码:

webBrowser1.Navigate(@"C:\Pages\myLocalWebPage.html");
File.WriteAllText(path,webBrowser1.Document.Body.Parent.OuterHtml, Encoding.GetEncoding(webBrowser1.Document.Encoding));

它在第二行给了我null reference exception。我想文件根本没有实例化。

2 个答案:

答案 0 :(得分:1)

您尝试访问尚未加载的文档 ,因为您在导航到新的Uri之后访问Document属性,这就是您获得{{}的原因1}}。

您需要使用WebBrowser.DocumentCompleted事件。


  

该事件什么时候被解雇?

在MSDN中,只要设置了以下某个属性或调用了方法,NullReferenceException控件就会导航到新文档:Url,DocumentText,DocumentStream,Navigate,GoBack,GoForward, GoHome,GoSearch。

导航将按此顺序触发以下事件

  • WebBrowser 事件:

      

    处理导航事件以在导航前接收通知   开始即可。处理此事件可让您取消导航(如果确定)   例如,当用户没有满足条件时   完全填写表格。

  • Navigating 事件:

      

    处理Navigated事件以在WebBrowser时接收通知   控制完成导航,已开始加载文档   新的位置。

  • Navigated 事件:

      

    处理DocumentCompleted事件以接收时的通知   新文档完成加载。当DocumentCompleted事件发生时   发生,新文档已满载,这意味着您可以访问   其内容通过Document ,DocumentText或DocumentStream   属性。


  

我控制不可见。它不应该被使用   user.I我只是想从代码隐藏

加载文档

控件不可见的事实应该不是问题。我已经使用在运行时创建的DocumentCompleted进行了测试,但我没有添加到表单中(请参阅下面的示例),并且仍然会引发该事件。


  

它是如何被激活的?

以下是可能的实施:

webbrowser

另见此帖子Can I wait for a webbrowser to finish navigating, using a for loop?

答案 1 :(得分:0)

您的本地文件路径需要类似于此引用(文件://是密钥):

Uri uri = new Uri("file://C:/Pages/myLocalWebPage.html");
webBrowser1.Navigate(uri);