it-roy-ru.com

Загрузите локальный HTML-файл в C # WebBrowser

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

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

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

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

ПРАВКА

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

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

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

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

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

webBrowser1.Navigate(@".\Documentation\index.html");
50
PeeHaa
  1. Сделайте щелкните правой кнопкой мыши -> Свойства на файле в Visual Studio. 
  2. Установите Копировать в выходной каталог в Копировать всегда .

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

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

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

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

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

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

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

85
ghostJago

довольно поздно, но это первый хит, который я нашел в 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);
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. Reference it relative to the current directory when your app runs.
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
Ravshanbek Ahmedov

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

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

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

0
Alexander Pacha