WebView представляет элемент для отображения html-кода. Загружаемый html-код может представлять код веб-страниц с веб-сайтов, код локальных страниц или код html, который формируется программно. То есть фактически это мини веб-браузер.
Следует отметить ряд особенностей WebView:
этот элемент не поддерживает большинство событий ввода, которыми обладают другие элементы управления
для рендеринга он использует движок Microsoft Edge
он не поддерживает элементы ActiveX, плагины, а также некоторые функциональности HTML5, в частности, AppCache, IndexedDB, программный доступ к буферу обмена, геолокацию
он поддерживает навигацию по ресурсам, использующим протоколы HTTP, HTTPS, ms-appx-web и ms-appdata
За установку ресурса, отображаемого в WebView, отвечает свойство Source. В качестве значения это свойство принимает путь к ресурсу. В зависимости от расположения ресурса мы можем использовать различные пути.
Например, загрузим страницу по адресу https://www.microsoft.com:
<WebView x:Name="webView" Source="https://www.microsoft.com" />
Для просмотра локальных ресурсов следует использовать схемы доступа ms-appx-web и ms-appdata. Например, пусть у нас в проекте есть папка pages, которая содержит html-страницы.
Тогда, чтобы обратиться к локальным html-страницам из этой папки, нам надо использовать формат ms-appx-web:
<WebView x:Name="webView" Source="ms-appx-web:///pages/page1.html" />
Если необходимая папка с html-страницами располагается на локальном компьютере в локальной папке пользователя или в каталоге temp, то к таким страницам мы можем обратиться по следующим путям:
ms-appdata:///local/pages/page1.html ms-appdata:///temp/pages/page1.html
Для управления элементом мы можем использовать его методы и события. Ряд методов позволяют загружать контент:
NavigateToString
: переход к строке кода, который формируется программно. Например:
string html = "<h2>Hello world45!</h2>"; webView.NavigateToString(html);
Navigate
: переход по определенному пути. Например:
Uri uri = new Uri("http://msdn.com"); webView.Navigate(uri); // uri на локальный адрес // Uri uri = new Uri("ms-appx-web:///pages/page1.html");
Некоторые важные события:
NavigationStarting: генерируется до начала перехода WebView к указанному ресурсу. Мы можем использовать это событие, к примеру, чтобы оставить переход к ресурсу:
public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); webView.NavigationStarting += webView_NavigationStarting; } private void webView_NavigationStarting(object sender, WebViewNavigationStartingEventArgs args) { // Останавливаем навигацию if (args.Uri.Host == "yandex.ru") args.Cancel = true; } }
ContentLoading: генерируется до начала загрузки контента
DOMContentLoaded: возникает, после того, как WebView закончит загрузку и парсинг контента
NavigationCompleted: возникает после завершения перехода к ресурсу
Причем все эти события возникают именно в той последовательности, в которой они тут перечислены.