#vb.net #winforms #windows-community-toolkit #visual-studio-2019
#vb.net #winforms #windows-community-toolkit #visual-studio-2019
Вопрос:
Я создаю приложение с элементом управления WebView. И я хочу, чтобы он читал локальный HTML-файл. Но я не могу найти правильный способ сделать это возможным.
Сначала я просто попытался использовать метод Navigate и указать путь к файлу в строке формата «file: ///~» в качестве параметра, но это не сработало.
На этой странице Microsoft говорится, что элемент управления WebView не распознает протокол «file: /// ~». И в нем показаны 3 решения, позволяющие заставить элемент управления WebView читать локальные HTML-файлы.
- Используйте метод NavigateToLocal().
- Используйте метод NavigateToLocalStreamUri().
- Используйте метод NavigateToString().
Я перепробовал их все, но у каждого 3 есть некоторые проблемы, из-за которых это не работает.
- Метод NavigateToLocal требует ОТНОСИТЕЛЬНОГО пути к файлу (не абсолютного пути), относительно каталога исполняемого файла приложения. Таким образом, файлы в другом месте из каталога приложения не могут быть прочитаны этим методом.
- Метод NavigateToLocalStreamUri даже не реализован в соответствии со страницей! Я все равно однажды попробовал это, но это вернуло исключение и не сработало.
- Метод NavigateToString может отображать заданную строку содержимого html, но внешние файлы, такие как css, js, файлы изображений, включенные в HTML-коды, не могут быть загружены, поэтому он не предоставляет полной функции.
Я нашел некоторый пример использования метода NavigateToLocalStreamUri и попробовал его сам.
(VB.NET )
wvwMain.NavigateToLocalStreamUri(uri, New StreamUriResolver())
Public Class StreamUriResolver : Implements IUriToStreamResolver
Public Function UriToStream(uri As Uri) As Stream Implements IUriToStreamResolver.UriToStream
Return New FileStream(uri.LocalPath, FileMode.Open)
End Function
End Class
С помощью этого кода метод NavigateToLocalStreamUri возвращает System.Ресурсы.Исключение MissingManifestResourceException.
То, что я хочу реализовать, очень просто.
- Использование элемента управления WebView
- Прочитайте локальный HTML-файл, расположенный в любом месте локального хранилища
- И полностью отобразить HTML-файл в качестве ожидаемого результата
Но я не вижу способа прямо сейчас. Я был бы признателен за ваши советы или помощь.
Ответ №1:
Этот метод NavigateToLocalStreamUri
не будет работать. Пожалуйста, смотрите https://learn.microsoft.com/en-us/windows/communitytoolkit/controls/wpf-winforms/webview-known-issues . Вам придется использовать NavigateToLocal
, но вы увидите предупреждение о том, что он устарел. Однако это работает только с относительными путями. Возможно ли реструктурировать ваше приложение так, чтобы вы могли использовать относительные пути?
NavigateToLocal
Метод — это единственный способ, который я нашел для вызова локальных HTML-файлов в Microsoft.Инструментарий.Forms.UI.Controls.Web WebView версии 6.0.
Ответ №2:
В Visual Studio 2019 Windows 10 выполняется следующее VB.NET код работает на моем компьютере
Imports System.IO
Dim sFileName = Application.StartupPath amp; "/MyPage.html"
wv.NavigateToString(System.IO.File.ReadAllText(sFileName))
где wv
находится объект WebView.