Загрузите локальный файл HTML в C # WebBrowser - PullRequest
53 голосов
/ 25 августа 2011

В моем приложении есть элемент WebBrowser.

Я хочу загрузить в него локальный файл.

У меня есть несколько вопросов:

  1. Гдеразместить файл HTML (чтобы он также был установлен, если пользователь выполняет установку)
  2. как ссылаться на файл?(например, я предполагаю, что папка установки пользователя не всегда будет одинаковой)

РЕДАКТИРОВАТЬ

Я добавил файл HTML в свой проект.

И я настроил его так, чтобы он копировался в выходную папку.

Когда я проверяю его, он присутствует при запуске: \ bin \ Debug \ Documentation \ index.html

Однако, когда я делаю следующее, я получаю ошибку «Страница не может быть отображена» в элементе webbrowser.

Я использую следующий код, чтобы попытаться отобразить HTML-файл в браузере.

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

Ответы [ 8 ]

87 голосов
/ 25 августа 2011
  1. Сделайте щелчок правой кнопкой мыши -> свойства для файла в Visual Studio.
  2. Установите Копировать в выходной каталог на Копировать всегда .

Тогда вы сможете ссылаться на ваши файлы, используя путь, такой как @".\my_html.html"

При копировании в выходной каталог файл будет помещен в ту же папку, что и ваши двоичные библиотеки при сборке проекта. Это работает с любым файлом содержимого, даже если он находится в подпапке.

Если вы используете подпапку, она тоже будет скопирована в папку bin, поэтому ваш путь будет @".\my_subfolder\my_html.html"

Чтобы создать URI, который вы можете использовать локально (вместо подачи через Интернет), вам нужно будет использовать протокол file , используя базовый каталог вашего двоичного файла - примечание: это будет работает только в том случае, если вы установили Copy to Ouptut Directory, как указано выше, или путь не будет правильным.

Это то, что вам нужно:

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

Вам, конечно, придется изменить переменные и имена.

12 голосов
/ 01 февраля 2013

довольно поздно, но это первый хит, который я нашел в google

Вместо использования текущего каталога или получения сборки, просто используйте свойство Application.ExecutablePath:

//using System.IO;  
string applicationDirectory = Path.GetDirectoryName(Application.ExecutablePath);
string myFile = Path.Combine(applicationDirectory, "Sample.html");
webMain.Url = new Uri("file:///" + myFile);
5 голосов
/ 16 декабря 2013

Обратите внимание, что схема file:/// не работает на компактной платформе, по крайней мере она не работает с 5.0.

Вам нужно будет использовать следующее:

string appDir = Path.GetDirectoryName(
    Assembly.GetExecutingAssembly().GetName().CodeBase);
webBrowser1.Url = new Uri(Path.Combine(appDir, @"Documentation\index.html"));
4 голосов
/ 25 августа 2011
  1. Поместите его в папку установки приложений или в отдельную папку под
  2. Ссылка на него относительно текущего каталога при запуске приложения.
3 голосов
/ 25 августа 2011
  1. Где-то рядом со сборкой, которую вы собираетесь запустить.
  2. Используйте отражение, чтобы получить путь к вашей исполняемой сборке, а затем по волшебству найдите ваш HTML-файл.

Как это:

var myAssembly = System.Reflection.Assembly.GetEntryAssembly();
var myAssemblyLocation = System.IO.Path.GetDirectoryName(a.Location);
var myHtmlPath = Path.Combine(myAssemblyLocation, "my.html");
1 голос
/ 16 августа 2017

Обновление ответа @ghostJago выше

для меня это работало как следующие строки в VS2017

string curDir = Directory.GetCurrentDirectory();
this.webBrowser1.Navigate(new Uri(String.Format("file:///{0}/my_html.html", curDir)));
0 голосов
/ 02 февраля 2017

Windows 10 uwp приложение.

Попробуйте это:

webview.Navigate(new Uri("ms-appx-web:///index.html"));
0 голосов
/ 12 декабря 2016

Что сработало для меня было

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

из здесь . Я скопировал StartPage.html в тот же выходной каталог, что и xaml-файл, и он загрузил его с этого относительного пути.

...