问题描述
我正在尝试将本地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.Url
是null
(test
变量)。控件相应保持为空。
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(尽管对此有怀疑的看法。)