Загружать локальный HTML файл в С# WebBrowser
В моем приложении у меня есть элемент WebBrowser.
Я хотел бы загрузить в него локальный файл.
У меня есть несколько вопросов:
- Где разместить HTML файл (чтобы он также был установлен, если пользователь выполнил настройку)
- как ссылаться на файл? (например, я предполагаю, что папка установки пользователя не всегда будет одинаковой)
ИЗМЕНИТЬ
Я добавил файл HTML в свой проект.
И я настроил его так, чтобы он копировался в папку вывода.
Когда я проверяю его, он присутствует при запуске:\bin\Debug\Documentation\index.html
Однако, когда я делаю следующее, я получаю сообщение "Страница не может быть отображено" в элементе webbrowser.
Я использую следующий код, чтобы попытаться отобразить HTML файл в Webbrowser.
webBrowser1.Navigate(@".\Documentation\index.html");
Ответы
Ответ 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)));