web-dev-qa-db-ja.com

C#WebBrowserでローカルHTMLファイルをロードする

私のアプリにはWebBrowser要素があります。

ローカルファイルをロードしたいです。

いくつか質問があります:

  1. HTMLファイルを配置する場所(ユーザーがセットアップを実行した場合にもインストールされるように)
  2. ファイルを参照する方法は? (たとえば、私の推測では、ユーザーのインストールフォルダーは常に同じとは限りません)

編集

プロジェクトにHTMLファイルを追加しました。

そして、出力フォルダーにコピーされるように設定しました。

チェックすると、実行時に存在します:\ bin\Debug\Documentation\index.html

ただし、次の操作を行うと、webbrowser要素に「ページを表示できません」というエラーが表示されます。

次のコードを使用して、WebブラウザでHTMLファイルを表示しようとします。

webBrowser1.Navigate(@".\Documentation\index.html");
53
PeeHaa
  1. Visual Studioのファイルで右クリック->プロパティを実行します。
  2. 出力ディレクトリにコピー常にコピーに設定します。

その後、@".\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));

もちろん、変数と名前を変更する必要があります。

87
ghostJago

かなり遅いですが、グーグルで見つけた最初のヒットです

現在のディレクトリを使用したり、アセンブリを取得したりする代わりに、Application.ExecutablePathプロパティを使用します。

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

file:///スキームはコンパクトフレームワークでは機能しません。少なくとも5.0では機能しません。

以下を使用する必要があります。

string appDir = Path.GetDirectoryName(
    Assembly.GetExecutingAssembly().GetName().CodeBase);
webBrowser1.Url = new Uri(Path.Combine(appDir, @"Documentation\index.html"));
5
Brett Ryan
  1. アプリの実行時に、現在のディレクトリを基準にして参照します。
  2. .
4
Jan
  1. どこか、あなたが実行しようとしているアセンブリの近く。
  2. リフレクションを使用して、実行中のアセンブリへのパスを取得し、HTMLファイルを見つけるための魔法を実行します。

このような:

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

上記の@ghostJagoの回答を更新

私にとっては、VS2017の次の行として機能しました

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

Windows 10 uwpアプリケーション。

これを試して:

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

私のために働いたのは

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

from here 。 StartPage.htmlをxaml-fileと同じ出力ディレクトリにコピーし、その相対パスからロードしました。

0
Alexander Pacha