Возможно ли заставить элемент управления WebView читать локальные HTML-файлы?

#vb.net #winforms #windows-community-toolkit #visual-studio-2019

#vb.net #winforms #windows-community-toolkit #visual-studio-2019

Вопрос:

Я создаю приложение с элементом управления WebView. И я хочу, чтобы он читал локальный HTML-файл. Но я не могу найти правильный способ сделать это возможным.

Сначала я просто попытался использовать метод Navigate и указать путь к файлу в строке формата «file: ///~» в качестве параметра, но это не сработало.

https://learn.microsoft.com/ja-jp/windows/communitytoolkit/controls/wpf-winforms/webview-known-issues

На этой странице Microsoft говорится, что элемент управления WebView не распознает протокол «file: /// ~». И в нем показаны 3 решения, позволяющие заставить элемент управления WebView читать локальные HTML-файлы.

  1. Используйте метод NavigateToLocal().
  2. Используйте метод NavigateToLocalStreamUri().
  3. Используйте метод NavigateToString().

Я перепробовал их все, но у каждого 3 есть некоторые проблемы, из-за которых это не работает.

  1. Метод NavigateToLocal требует ОТНОСИТЕЛЬНОГО пути к файлу (не абсолютного пути), относительно каталога исполняемого файла приложения. Таким образом, файлы в другом месте из каталога приложения не могут быть прочитаны этим методом.
  2. Метод NavigateToLocalStreamUri даже не реализован в соответствии со страницей! Я все равно однажды попробовал это, но это вернуло исключение и не сработало.
  3. Метод 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.