Подтвердить что ты не робот

Загружать локальный HTML файл в С# WebBrowser

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

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

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

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

ИЗМЕНИТЬ

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

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

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

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

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

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

Ответ 1

  • Создайте правый клик → свойства в файле в Visual Studio.
  • Установите Копировать в каталог вывода на Копировать всегда.

Затем вы сможете ссылаться на свои файлы, используя путь, например @".\my_html.html"

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

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

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

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

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

Вам нужно будет изменить переменные и имена, конечно.

Ответ 2

довольно поздно, но это первый хит, который я нашел из 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);

Ответ 3

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

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

string appDir = Path.GetDirectoryName(
    Assembly.GetExecutingAssembly().GetName().CodeBase);
webBrowser1.Url = new Uri(Path.Combine(appDir, @"Documentation\index.html"));

Ответ 4

  • Поместите его в папку "Настройка приложений" или в папку separte ниже
  • Ссылка на него относительно текущего каталога при запуске приложения.

Ответ 5

  • Где-то рядом с сборкой вы собираетесь работать.
  • Используйте отражение, чтобы получить путь к вашей исполняющей сборке, затем сделайте небольшое волшебство, чтобы найти свой HTML файл.

Вот так:

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

Ответ 6

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

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

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

Ответ 7

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

Попробуйте следующее:

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

Ответ 8

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

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

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