在C#WebBrowser中加载本地HTML文件
在我的应用程序中,我有一个WebBrowser元素 我想在其中加载一个本地文件 我有一些问题:在C#WebBrowser中加载本地HTML文件,c#,webbrowser-control,C#,Webbrowser Control,在我的应用程序中,我有一个WebBrowser元素 我想在其中加载一个本地文件 我有一些问题: 放置HTML文件的位置(以便在用户执行设置时也将安装该文件) 如何引用该文件?(例如,我猜用户的安装文件夹并不总是相同的) 编辑 我已将HTML文件添加到我的项目中 我对它进行了设置,以便将其复制到输出文件夹 当我检查它时,它在运行:\bin\Debug\Documentation\index.html时出现 但是,当我执行以下操作时,webbrowser元素中会出现“页面无法显示”错误 我使用以下代
webBrowser1.Navigate(@".\Documentation\index.html");
var myAssembly = System.Reflection.Assembly.GetEntryAssembly();
var myAssemblyLocation = System.IO.Path.GetDirectoryName(a.Location);
var myHtmlPath = Path.Combine(myAssemblyLocation, "my.html");
@.\my_html.html“
“复制到输出目录”将在生成项目时将该文件与二进制DLL放在同一文件夹中。这适用于任何内容文件,即使其位于子文件夹中
如果您使用子文件夹,该子文件夹也将复制到bin文件夹中,因此您的路径将是“@”\my\u subfolder\my\u html.html”
为了创建一个可以在本地使用(而不是通过web提供)的URI,您需要使用文件协议,使用二进制文件的基本目录-注意:仅当您如上所述将副本设置为Ouptut目录或路径不正确时,这才有效
这就是您需要的:
string curDir = Directory.GetCurrentDirectory();
this.webBrowser1.Url = new Uri(String.Format("file:///{0}/my_html.html", curDir));
当然,您必须更改变量和名称
很晚了,但这是我从谷歌找到的第一个热门网站
不要使用当前目录或获取程序集,只需使用应用程序.ExecutablePath
属性:
//using System.IO;
string applicationDirectory = Path.GetDirectoryName(Application.ExecutablePath);
string myFile = Path.Combine(applicationDirectory, "Sample.html");
webMain.Url = new Uri("file:///" + myFile);
请注意,
文件://
方案在紧凑型框架上不起作用,至少在5.0中不起作用
您需要使用以下各项:
string appDir = Path.GetDirectoryName(
Assembly.GetExecutingAssembly().GetName().CodeBase);
webBrowser1.Url = new Uri(Path.Combine(appDir, @"Documentation\index.html"));
对我有效的是
<WebBrowser Source="pack://siteoforigin:,,,/StartPage.html" />
从。我将StartPage.html复制到与xaml文件相同的输出目录,并从该相对路径加载它 windows10
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)));
我从这里尝试了不同的答案,但成功地得到了一些有用的东西,就是:
1-将页面添加到我在项目级别创建的名为WebPagesHelper的文件夹中
2-通过webBrowser控件打印页面
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代码>表示它是一个vebatim字符串。在C#中,通过使用@,您不必费心转义任何字符,因为@意味着将其视为文字。您应该使用@作为路径,否则您需要这样做。“\\my\u html.html”我还应该提到,当应用于路径时,@“\”表示当前的directorytnx不知道这一点。但是它不起作用(一定是我做错了:))。当我这样做时:webBrowser1.Url=@“\Documentation\index.html”代码>我收到一个错误:字符串无法转换为Uri。当我尝试时:webBrowser1.Url=newuri(@“.\Documentation\index.html”)代码>我获取:无效的URI:无法确定URI的格式。好的,请尝试此字符串curDir=Directory.GetCurrentDirectory()
this.webBrowser1.Url=新Uri(String.Format(“file:///{0}/my_html.html”,curDir))代码>您需要编辑变量,可能还需要编辑文件名。我已经试过了works@ghotsJago:太好了!它现在正在工作。请使用此解决方案更新您的答案好吗?请记住,compact framework上没有此解决方案,并且必须使用Path.GetDirectoryName(Assembly.getExecutionGassembly().GetName().CodeBase)
。但是我应该将html文件复制到哪里。在*.sln文件所在的位置下?在项目目录下?或者在资产目录中?如果在项目目录下:“ms appx”-web:///index.html“,如果在资产”ms appx下-web:///Assets/index.html"