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

时间:2011-08-25 17:45:37

标签: c# webbrowser-control

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

我想在其中加载一个本地文件。

我有一些问题:

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

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

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

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

    然而,当我执行以下操作时,我在webbrowser元素中出现“无法显示页面”错误。

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

    webBrowser1.Navigate(@".\Documentation\index.html");
    

9 个答案:

答案 0 :(得分:87)

  1. 在Visual Studio中对文件执行右键单击>属性
  2. 复制到输出目录设置为始终复制
  3. 然后,您将能够使用@".\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));
    

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

答案 1 :(得分:12)

  
    

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

  

只需使用Application.ExecutablePath属性:

,而不是使用当前目录或获取程序集
//using System.IO;  
string applicationDirectory = Path.GetDirectoryName(Application.ExecutablePath);
string myFile = Path.Combine(applicationDirectory, "Sample.html");
webMain.Url = new Uri("file:///" + myFile);

答案 2 :(得分:5)

请注意,file:///方案在紧凑框架上不起作用,至少它不适用于5.0。

您需要使用以下内容:

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

答案 3 :(得分:4)

  1. 将其放在“应用程序”设置文件夹中或
  2. 下面的单独文件夹中
  3. 在您的应用运行时,相对于当前目录引用它。

答案 4 :(得分:3)

  1. 在某个地方,你要去的集会附近。
  2. 使用反射来获取正在执行的程序集的路径,然后做一些魔术来找到您的HTML文件。
  3. 像这样:

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

答案 5 :(得分:1)

上面的@ghostJago回复

对我来说,它在VS2017

中作为以下几行
string curDir = Directory.GetCurrentDirectory();
this.webBrowser1.Navigate(new Uri(String.Format("file:///{0}/my_html.html", curDir)));

答案 6 :(得分:0)

对我有用的是

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

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

答案 7 :(得分:0)

Windows 10 uwp应用程序。

试试这个:

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

答案 8 :(得分:0)

我一直在尝试不同的答案,但设法得出了一些有用的东西,这里是:
1- 在我在项目级别创建的名为 WebPagesHelper 的文件夹中添加了页面
2- 要通过 webBrowser Control 打印页面,

string curDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);                
var uri = new Uri(curDirectory);
string myFile = Path.Combine(uri.AbsolutePath, @"WebPagesHelper\index.html");
Uri new_uri = new Uri(myFile);

我必须获取程序集路径,创建第一个 uri 以获取不附加“file://”的绝对路径,接下来我将此绝对路径与其文件夹中页面的相对路径结合起来,然后创建另一个结果中的 URI。
然后将此传递给 webBrowser URL 属性 webBrowser.URL = new_uri;