在C#WebBrowser中加载本地HTML文件

Pee*_*Haa 53 c# webbrowser-control

在我的应用程序中,我有一个WebBrowser元素.

我想加载一个本地文件.

我有一些问题:

  1. 放置HTML文件的位置(以便在用户执行设置时也会安装)
  2. 如何引用文件?(例如,我的猜测是用户的安装文件夹并不总是相同)

编辑

我已将HTML文件添加到我的项目中.

我已将其设置为将其复制到输出文件夹.

当我检查它时,它运行时出现:\ bin\Debug\Documentation\index.html

但是,当我执行以下操作时,我在webbrowser元素中出现"页面无法显示"错误.

我使用以下代码尝试在Webbrowser中显示HTML文件.

webBrowser1.Navigate(@".\Documentation\index.html");
Run Code Online (Sandbox Code Playgroud)

gho*_*ago 89

  1. 在Visual Studio中对文件执行右键单击 - >属性.
  2. 复制到输出目录设置始终复制.

然后,您将能够使用诸如之类的路径来引用您的文件 @".\my_html.html"

在构建项目时,复制到输出目录将把文件放在与二进制dll相同的文件夹中.这适用于任何内容文件,即使它位于子文件夹中.

如果您使用子文件夹,那么它也将被复制到bin文件夹中,这样您的路径就可以了 @".\my_subfolder\my_html.html"

为了创建一个你可以在本地使用的URI(而不是通过web服务),你需要使用文件协议,使用你的二进制文件的基本目录 - 注意:这只有你设置复制到Ouptut时才有效目录如上或路径不正确.

这就是你需要的:

string curDir = Directory.GetCurrentDirectory();
this.webBrowser1.Url = new Uri(String.Format("file:///{0}/my_html.html", curDir));
Run Code Online (Sandbox Code Playgroud)

当然,您必须更改变量和名称.

  • 意味着它是一个绝对的字符串.在C#中使用@,你不必费心去除任何字符,因为@表示将其视为文字.您应该使用@作为路径,或者您需要这样做**".\\ my_html.html"** (5认同)
  • 我还要提一下,当应用于路径时,**@".\"**表示当前目录 (2认同)

mic*_*cks 13

很晚,但这是我从谷歌发现的第一个打击

不要使用当前目录或获取程序集,只需使用Application.ExecutablePath属性:

//using System.IO;  
string applicationDirectory = Path.GetDirectoryName(Application.ExecutablePath);
string myFile = Path.Combine(applicationDirectory, "Sample.html");
webMain.Url = new Uri("file:///" + myFile);
Run Code Online (Sandbox Code Playgroud)

  • 请记住,[Application.ExecutablePath](http://msdn.microsoft.com/en-us/library/system.windows.forms.application.executablepath%28v=vs.110%29.aspx)不可用于必须使用紧凑框架和`Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase). (5认同)

Bre*_*yan 5

请注意,该file:///方案不适用于紧凑的框架,至少它不适用于5.0.

您需要使用以下内容:

string appDir = Path.GetDirectoryName(
    Assembly.GetExecutingAssembly().GetName().CodeBase);
webBrowser1.Url = new Uri(Path.Combine(appDir, @"Documentation\index.html"));
Run Code Online (Sandbox Code Playgroud)