私のアプリにはWebBrowser要素があります。
ローカルファイルをロードしたいです。
いくつか質問があります:
編集
プロジェクトにHTMLファイルを追加しました。
そして、出力フォルダーにコピーされるように設定しました。
チェックすると、実行時に存在します:\ bin\Debug\Documentation\index.html
ただし、次の操作を行うと、webbrowser要素に「ページを表示できません」というエラーが表示されます。
次のコードを使用して、WebブラウザでHTMLファイルを表示しようとします。
webBrowser1.Navigate(@".\Documentation\index.html");
その後、@".\my_html.html"
などのパスを使用してファイルを参照できるようになります
出力ディレクトリにコピーすると、プロジェクトのビルド時にバイナリdllと同じフォルダーにファイルが配置されます。これは、サブフォルダーにある場合でも、どのコンテンツファイルでも機能します。
サブフォルダーを使用する場合、サブフォルダーもbinフォルダーにコピーされるため、パスは@".\my_subfolder\my_html.html"
になります
(Web経由でサーバー化する代わりに)ローカルで使用できるURIを作成するには、バイナリのベースディレクトリを使用して、fileプロトコルを使用する必要があります-注:これは機能するだけです上記のようにOuptutディレクトリにコピーを設定すると、パスが正しくなくなります。
これはあなたが必要とするものです:
string curDir = Directory.GetCurrentDirectory();
this.webBrowser1.Url = new Uri(String.Format("file:///{0}/my_html.html", curDir));
もちろん、変数と名前を変更する必要があります。
かなり遅いですが、グーグルで見つけた最初のヒットです
現在のディレクトリを使用したり、アセンブリを取得したりする代わりに、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:///
スキームはコンパクトフレームワークでは機能しません。少なくとも5.0では機能しません。
以下を使用する必要があります。
string appDir = Path.GetDirectoryName(
Assembly.GetExecutingAssembly().GetName().CodeBase);
webBrowser1.Url = new Uri(Path.Combine(appDir, @"Documentation\index.html"));
このような:
var myAssembly = System.Reflection.Assembly.GetEntryAssembly();
var myAssemblyLocation = System.IO.Path.GetDirectoryName(a.Location);
var myHtmlPath = Path.Combine(myAssemblyLocation, "my.html");
上記の@ghostJagoの回答を更新
私にとっては、VS2017
の次の行として機能しました
string curDir = Directory.GetCurrentDirectory();
this.webBrowser1.Navigate(new Uri(String.Format("file:///{0}/my_html.html", curDir)));
Windows 10 uwp
アプリケーション。
これを試して:
webview.Navigate(new Uri("ms-appx-web:///index.html"));
私のために働いたのは
<WebBrowser Source="pack://siteoforigin:,,,/StartPage.html" />
from here 。 StartPage.htmlをxaml-fileと同じ出力ディレクトリにコピーし、その相対パスからロードしました。