为什么C#WebBrowser中的Url值始终为空?

问题描述

我正在尝试将本地html文件加载到C#Webbrowser(WinForms)实例中。 这就是我正在做的:

string url  = @"file:///C:MyHtml/hello.html";
myWebbrowser.Url    = new Uri(url,UriKind.Absolute);
object test = myWebbrowser.Url; // breakpoint here

以上路径正确;如果我将其复制并粘贴到外部浏览器中,则会立即打开该文件。但是Webbrowser的实例不想做出反应。我在摘要的最后一行设置了一个断点,得到的结果是myWebbrowser.Urlnulltest变量)。控件相应保持为空。

myWebbrowser.AllowNavigation被显式设置为true。我还尝试了所有可能的斜杠和反斜杠版本;结果总是一样的。 Web浏览器的版本似乎为11(myWebbrowser.Version =“ {11.0.18362.1139}”)。我正在Windows 10 VS 2019中工作。

此设置有什么问题?

解决方法

以上路径正确;如果我将其复制并粘贴到外部浏览器中,则会立即打开该文件。但是WebBrowser的实例不想做出反应。我在代码段的最后一行设置了一个断点,得到的结果是myWebbrowser.Url为null

我能够复制这个确切的问题,这是因为Url的属性直到文档实际完成加载才真正设置。

要解决此问题,必须处理DocumentCompleted事件。您可以这样做,例如:

 string url  = @"file:///C:MyHtml/hello.html";
 myWebbrowser.DocumentCompleted += MyWebbrowser_DocumentCompleted;
 myWebbrowser.Url = new Uri(url,UriKind.Absolute);

创建一个新例程来处理DocumentCompleted事件:

 private void MyWebbrowser_DocumentCompleted(object sender,WebBrowserDocumentCompletedEventArgs e)
 {
    string test = myWebbrowser.Url.ToString();
 }

您还可以从Url获取WebBrowserDocumentCompletedEventArgs

 string testUrl = e.Url.ToString();

我不确定为什么要设置Url然后检查它是null的原因,但我什么都没找到解释的原因。我唯一的猜测是,它可能是无效的Url和或路径,如果导航成功,则将设置该属性。

编辑:查看WebBrowserDocumentCompleted的来源后,似乎Url属性仅在DocumentCompleted中设置,您可以{{3 }}还有。


请注意:您必须先注册DocumentCompleted事件,然后才能像设置操作一样设置Url属性,它将首先导航并且不会收到{{ 1}}事件。

,

我能够找出它为什么不希望运行的原因,至少我希望如此。 “ hello.html”文件包含对jquery和THREE.js的调用,而WebBroser似乎不支持后者。因此,我在控件中没有看到任何内容。在我扔掉THREE.js并插入了最简单的HTML代码之后,一切正常!现在,我正忙于尝试使WebBrowser支持THREE.js(尽管对此有怀疑的看法。)