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

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

我想加载一个本地文件。

我有一些疑问:

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

编辑

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

我已经设置它,以便它被复制到输出文件夹。

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

但是,当我做到以下我得到一个“页面无法显示”错误在webbrowser元素。

我使用下面的代码尝试在Web浏览器中显示HTML文件。

webBrowser1.Navigate(@".\Documentation\index.html"); 
  1. 在Visual Studio中对该文件执行右键单击 – >属性
  2. 复制到输出目录设置始终复制

然后,您将能够通过使用诸如@".\my_html.html"类的path来引用您的文件

复制到输出目录将在build立项目时将文件放在与您的二进制DLL相同的文件夹中。 这适用于任何内容文件,即使它在一个子文件夹中。

如果你使用的是一个子文件夹,那么这个文件夹也会被复制到bin文件夹中,所以你的path将会是@".\my_subfolder\my_html.html"

为了创build一个URI,您可以在本地使用(而不是通过networking进行encryption),您需要使用文件协议,使用二进制文件的基本目录 – 注意:只有当您将Copy设置为Ouptut如上所述的目录或path将不正确。

这是你需要的:

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

你将不得不改变当然的variables和名称。

相当晚,但这是我从谷歌find的第一个打击

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

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

请注意, file:///scheme在Compact Framework上不起作用,至less它不适用于5.0。

您将需要使用以下内容:

 string appDir = Path.GetDirectoryName( Assembly.GetExecutingAssembly().GetName().CodeBase); webBrowser1.Url = new Uri(Path.Combine(appDir, @"Documentation\index.html")); 
  1. 将其放置在应用程序安装文件夹或下面的separte文件夹中
  2. 运行应用程序时相对于当前目录引用它。
  1. 在你要运行的程序集附近的某个地方。
  2. 使用reflection来获得正在执行的程序集的path,然后做一些魔术来find你的HTML文件。

喜欢这个:

 var myAssembly = System.Reflection.Assembly.GetEntryAssembly(); var myAssemblyLocation = System.IO.Path.GetDirectoryName(a.Location); var myHtmlPath = Path.Combine(myAssemblyLocation, "my.html"); 

对我有效的是

 <WebBrowser Source="pack://siteoforigin:,,,/StartPage.html" /> 

从这里 。 我将StartPage.html复制到与xaml文件相同的输出目录,并从相对path加载它。

Windows 10的uwp应用程序。

尝试这个:

 webview.Navigate(new Uri("ms-appx-web:///index.html")); 

更新上面的@ghostJago答案

对我来说,它在VS2017工作如下

 string curDir = Directory.GetCurrentDirectory(); this.webBrowser1.Navigate(new Uri(String.Format("file:///{0}/my_html.html", curDir)));