Начало работы с WebView2 в приложениях WPF
В этой статье описывается настройка средств разработки и создание начального приложения WebView2 для Windows Presentation Foundation (WPF), а также основные понятия WebView2.
В этом руководстве вы используете шаблон проекта приложения WPF или приложения WPF (.NET Framework), чтобы создать приложение WPF, а затем установить пакет SDK WebView2 для проекта, чтобы добавить WebView2.
Завершенный проект
Полная версия этого учебного проекта доступна в репозитории WebView2Samples :
- Имя примера: WPF_GettingStarted
- Каталог репозитория: WPF_GettingStarted
- Файл решения: WPFSample.sln
Шаг 1. Установка Visual Studio с поддержкой .NET
Для работы с этим руководством требуется Microsoft Visual Studio, а не Microsoft Visual Studio Code. В этой статье описывается главным образом использование Visual Studio 2022.
Установите Visual Studio. Установите поддержку разработки классических приложений .NET , чтобы получить необходимые шаблоны проектов, как показано ниже.
Если вы находитесь на начальном экране Visual Studio, прокрутите вниз диалогового окна Создание проекта и щелкните ссылку Открыть без кода. Откроется Visual Studio.
В Visual Studio выберите Сервис>Получить средства и компоненты. Откроется окно Visual Studio Installer и диалоговое окно Изменение .
Выберите рабочую нагрузку разработка классических приложений .NET , чтобы на ней был установлен флажок.
В разделе Сведения об>установке.Разработка классических приложений> .NET справа убедитесь, что средства разработки классических приложений .NET и средства разработки .NET Framework 4.7.2 указаны с галочкой рядом с ними.
В разделе Сведения об>установке.Разработка классических приложений.NET>Необязательно справа:
- Если вы используете Visual Studio 2022, убедитесь, что выбраны средства разработки для .NET :
- Если вы используете Visual Studio 2019, убедитесь, что выбраны средства разработки .NET :
Нажмите кнопку Изменить .
Это руководство также работает с Visual Studio 2017. См. более старые загрузки Visual Studio. Установите поддержку .NET, чтобы получить необходимые шаблоны проектов, как описано выше.
Шаг 2. Создание приложения WebView2 с одним окном
Начните с создания базового классического проекта, содержащего одно главное окно.
Решите, следует ли создать проект .NET Core/5/6 (более новый) или проект приложения WPF (.NET Framework) (более старый). Дополнительные сведения см. в разделе:
- Журнал .NET в разделе Что такое .NET? Введение и обзор.
- .NET в Википедии.
Следуйте инструкциям в соответствующем разделе ниже.
Создание проекта .NET Core/5/6
Если вы создаете проект .NET Core/5/6, выполните следующие действия. В противном случае перейдите к разделу Создание проекта приложения WPF (.NET Framework).
Откройте Microsoft Visual Studio, например Visual Studio 2022.
На открывающей панели щелкните Создать проект. Или в главном окне Visual Studio выберите Файл>Новый>проект. Откроется диалоговое окно Создание проекта.
В текстовом поле Поиск шаблонов введите
WPF Application
. На панели Создание проекта отображаются установленные шаблоны проектов, которые соответствуют введенном тексту. В этой статье показаны диалоговые окна C# вместо VB. Для WebView2 поддерживаются оба языка.Если вы используете Visual Studio 2022, щелкните шаблон проекта с заголовком ПРИЛОЖЕНИЕ WPF и текстом описания Проект для создания приложения WPF для .NET:
Если вы используете Visual Studio 2019, щелкните шаблон проекта с заголовком ПРИЛОЖЕНИЕ WPF и текстом описания Проект для создания приложения WPF для .NET Core:
Если указанный выше шаблон проекта отсутствует в списке, см. шаг 1. Установка Visual Studio с поддержкой .NET выше, чтобы установить средства разработки классических приложений .NET.
Нажмите кнопку Далее .
Откроется диалоговое окно Настройка нового проекта: приложение WPF :
В текстовом поле Имя проекта введите имя проекта, например MyWpfDotnetCoreWv2App.
В текстовом поле Расположение выберите путь на локальном диске, например
C:\Users\myusername\Documents\MyProjects
, и нажмите кнопку Далее .Откроется диалоговое окно Дополнительные сведения с раскрывающимся списком Целевая платформа :
Выберите .NET Core 3.1 или более поздней версии, например .NET 6.0. (Не выбирайте .NET Core 3.0.) Затем нажмите кнопку Создать .
Начальный проект приложения WPF для .NET Core открывается в Visual Studio:
Перейдите к шагу 3. Выполните сборку и запуск начального проекта без WebView2 ниже.
Создание проекта приложения WPF (.NET Framework)
Если вы создаете проект приложения WPF (.NET Framework), выполните следующие действия. В противном случае перейдите к шагу 3. Сборка и запуск начального проекта без WebView2.
Откройте Microsoft Visual Studio, например Visual Studio 2022.
На открывающей панели щелкните Создать проект. Или в главном окне Visual Studio выберите Файл>Новый>проект. Откроется диалоговое окно Создание проекта.
В текстовом поле Поиск шаблонов введите
WPF App
. На панели Создание проекта отображаются установленные шаблоны проектов, которые соответствуют введенном тексту. В этой статье показаны диалоговые окна C# вместо VB. Для WebView2 поддерживаются оба языка.Щелкните шаблон проекта с заголовком ПРИЛОЖЕНИЕ WPF (.NET Framework) и описанием клиентского приложения Windows Presentation Foundation:
Если указанный выше шаблон проекта отсутствует в списке, см. шаг 1. Установка Visual Studio с поддержкой .NET выше, чтобы установить средства разработки классических приложений .NET.
Нажмите кнопку Далее .
Откроется диалоговое окно Настройка нового проекта: приложение WPF (.NET Framework):
В текстовом поле Имя проекта введите имя проекта, например MyWpfDotnetFwkWv2App.
В текстовом поле Расположение выберите путь на локальном диске, например
C:\Users\myusername\Documents\MyProjects
.В раскрывающемся списке Платформа выберите .NET Framework 4.6.2 или более поздней версии.
Нажмите кнопку Создать.
Начальный проект приложения WPF (.NET Framework) откроется в Visual Studio:
Шаг 3. Сборка и запуск начального проекта без WebView2
Выберите Файл>Сохранить все , чтобы сохранить проект.
Нажмите клавишу F5, чтобы выполнить сборку и запуск проекта.
Проект запускается и отображает пустое окно:
Может потребоваться установить выбранную версию .NET Framework, как показано ниже.
Если приложение не открывается, выберите Отладка>Начать без отладки.
Если выбранная версия .NET Framework еще не установлена, может появиться следующее диалоговое окно: "Не удалось запустить это приложение. Приложению требуется одна из следующих версий .NET Framework: . NETFramework,Version=v4.8.1 . Установить эту версию .NET Framework сейчас?
Если появится такое диалоговое окно, перейдите в раздел Скачать .NET Framework и скачайте, а затем установите необходимую версию пакета разработчика (не среду выполнения). Например, скачайте
ndp481-devpack-enu.exe
файл вC:\Users\username\Downloads
, а затем дважды щелкните файл, чтобы установить его.При появлении запроса перезагрузите компьютер:
Перейдите в скачанный файл, например
ndp481-devpack-enu.exe
вC:\Users\username\Downloads
, и снова дважды щелкните скачанный файл, чтобы установить пакет разработчика .NET Framework. Откроется диалоговое окно Успешно :При появлении запроса перезагрузите компьютер еще раз.
Откройте Visual Studio и откройте созданное решение.
Нажмите клавишу F5 , чтобы запустить начальное приложение (показано выше), но еще не включив пакет SDK для WebView2.
Закройте начальное приложение.
Шаг 4. Установка пакета SDK для WebView2
В Visual Studio используйте диспетчер пакетов NuGet, чтобы добавить пакет SDK WebView2 в проект следующим образом:
В обозревателе решений щелкните правой кнопкой мыши имя проекта (на основе шаблона проекта .NET (Core) или .NET Framework, а затем выберите Управление пакетами NuGet:
В левом верхнем углу щелкните вкладку Обзор . В строке поиска введите
Microsoft.Web.WebView2
, а затем щелкните пакет Microsoft.Web.WebView2 .В диалоговом окне диспетчера пакетов NuGet отображаются результаты поиска, включая пакет Microsoft.Web.WebView2 . В диалоговом окне есть номер версии и кнопка Установить .
Примите версию по умолчанию и нажмите кнопку Установить .
В диалоговом окне Предварительный просмотр изменений нажмите кнопку ОК .
Выберите Файл>Сохранить все , чтобы сохранить проект.
Нажмите клавишу F5, чтобы выполнить сборку и запуск проекта.
Проект запускается и отображает пустое окно. Это подтверждает, что WebView2 установлен и работает, хотя у WebView2 пока нет содержимого для отображения:
Закройте приложение.
Шаг 5. Создание одного элемента управления WebView2
Добавьте элемент управления WebView2 в приложение.
MainWindow.xaml
В файле, чтобы добавить пространство имен XAML WebView2, вставьте в тег следующую строку<Window/>
:xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
Убедитесь, что код в
MainWindow.xaml
выглядит следующим образом:<Window x:Class="WPF_Getting_Started.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:{YOUR PROJECT NAME}" xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800" > <Grid> </Grid> </Window>
Чтобы добавить элемент управления WebView2, замените
<Grid>
теги следующим кодом. СвойствоSource
задает начальный URI, отображаемый в элементе управления WebView2.<DockPanel> <wv2:WebView2 Name="webView" Source="https://www.microsoft.com" /> </DockPanel>
Выберите Файл>Сохранить все , чтобы сохранить проект.
Нажмите клавишу F5, чтобы выполнить сборку и запуск проекта.
Убедитесь, что элемент управления WebView2 отображает :https://www.microsoft.com
Шаг 6. Навигация
Разрешить пользователям изменять URL-адрес, отображаемый элементом управления WebView2, добавив адресную строку в приложение.
MainWindow.xaml
В файле добавьте адресную строку, скопировав и вставив следующий код в<DockPanel>
, который содержит элемент управления WebView2. Оставьте существующий код под новым фрагментом кода.<DockPanel DockPanel.Dock="Top"> <Button x:Name="ButtonGo" DockPanel.Dock="Right" Click="ButtonGo_Click" Content="Go" /> <TextBox Name="addressBar"/> </DockPanel>
Убедитесь,
<DockPanel>
что разделMainWindow.xaml
файла соответствует следующему коду:<DockPanel> <DockPanel DockPanel.Dock="Top"> <Button x:Name="ButtonGo" DockPanel.Dock="Right" Click="ButtonGo_Click" Content="Go"/> <TextBox Name = "addressBar"/> </DockPanel> <wv2:WebView2 Name = "webView" Source = "https://www.microsoft.com" /> </DockPanel>
Чтобы
MainWindow.xaml.cs
добавитьCoreWebView2
пространство имен, вставьте следующий код в начало файла:using Microsoft.Web.WebView2.Core;
Скопируйте следующий код в
MainWindow.xaml.cs
файл, чтобы создатьButtonGo_Click
метод . Этот код перемещает элемент управления WebView2 на URL-адрес, указанный в адресной строке.private void ButtonGo_Click(object sender, RoutedEventArgs e) { if (webView != null && webView.CoreWebView2 != null) { webView.CoreWebView2.Navigate(addressBar.Text); } }
Вставьте код сразу после
Public MainWIndow
объявления, как показано в следующем коде:namespace WpfApp1 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } void ButtonGo_Click(object sender, RoutedEventArgs e) { if (webView != null && webView.CoreWebView2 != null) { webView.CoreWebView2.Navigate(addressBar.Text); } } } }
Выберите Файл>Сохранить все , чтобы сохранить проект.
Нажмите клавишу F5, чтобы выполнить сборку и запуск проекта.
Введите новый URL-адрес в адресной строке и нажмите кнопку Перейти. Например, введите
https://www.bing.com
.Убедитесь, что элемент управления WebView2 открывает введенный URL-адрес.
Убедитесь, что вы ввели полный URL-адрес в адресной строке. Приложение создает ,
ArgumentException
если URL-адрес не начинается сhttp://
илиhttps://
.Пример приложения отображает веб-сайт Bing с URL-адресом
https://www.bing.com
в адресной строке:
Шаг 7. События навигации
Во время навигации по веб-странице элемент управления WebView2 вызывает события. Приложение, в котором размещаются элементы управления WebView2, прослушивает следующие события:
NavigationStarting
SourceChanged
ContentLoading
HistoryChanged
NavigationCompleted
На приведенной выше схеме показана последовательность событий. События навигации начинаются с нового документа.
Путь к успеху
Успешный путь включает полную последовательность событий:
- Начало навигации.
- Источник изменен, с возможными входными данными из того же документа.
- Загрузка содержимого.
- Изменения журнала.
- Навигация завершена.
Дополнительные сведения см. в разделе События навигации для приложений WebView2.
Путь сбоя
Если произошел сбой, путь к сбою переходит непосредственно от начала навигации к завершенной навигации, пропуская промежуточные события.
При возникновении ошибки возникают следующие события, которые могут зависеть от перехода на веб-страницу ошибки:
SourceChanged
ContentLoading
HistoryChanged
Перенаправление
Если происходит перенаправление HTTP, в строке имеется несколько NavigationStarting
событий.
Пример, демонстрирующий события навигации
Чтобы продемонстрировать использование событий, зарегистрируйте обработчик, который отменяет все запросы, отличные от NavigationStarting
HTTPS, как показано ниже.
В файле измените
MainWindow.xaml.cs
конструктор, чтобы он соответствовал верхней части следующего кода. Под конструктором добавьте функциюEnsureHttps
:public MainWindow() { InitializeComponent(); webView.NavigationStarting += EnsureHttps; } void EnsureHttps(object sender, CoreWebView2NavigationStartingEventArgs args) { String uri = args.Uri; if (!uri.StartsWith("https://")) { args.Cancel = true; } }
В конструкторе
EnsureHttps
регистрируется как обработчик события в элементеNavigationStarting
управления WebView2.Выберите Файл>Сохранить все , чтобы сохранить проект.
Нажмите клавишу F5, чтобы выполнить сборку и запуск проекта.
Попытка открыть http-сайт. Убедитесь, что элемент управления WebView2 остается неизменным.
Попытка открыть сайт HTTPS. Элемент управления WebView2 позволяет открывать сайты HTTPS.
Шаг 8. Создание скриптов
Вы можете использовать хост-приложения для внедрения кода JavaScript в элементы управления WebView2 во время выполнения. Вы можете поручить WebView2 запустить произвольный JavaScript или добавить скрипты инициализации. Внедренный Код JavaScript применяется ко всем новым документам верхнего уровня и всем дочерним кадрам до тех пор, пока JavaScript не будет удален.
Внедренный Код JavaScript выполняется с определенным временем:
- Запустите его после создания глобального объекта.
- Запустите его перед выполнением любого другого скрипта, включенного в HTML-документ.
Например, добавьте скрипты, которые отправляют оповещение при переходе пользователя на сайты, отличные от HTTPS, следующим образом:
Измените функцию
EnsureHttps
, чтобы внедрить скрипт в веб-содержимое, использующее метод ExecuteScriptAsync .void EnsureHttps(object sender, CoreWebView2NavigationStartingEventArgs args) { String uri = args.Uri; if (!uri.StartsWith("https://")) { webView.CoreWebView2.ExecuteScriptAsync($"alert('{uri} is not safe, try an https link')"); args.Cancel = true; } }
Выберите Файл>Сохранить все , чтобы сохранить проект.
Нажмите клавишу F5, чтобы выполнить сборку и запуск проекта.
Убедитесь, что приложение отображает оповещение при переходе на веб-сайт, который не использует HTTPS.
Шаг 9. Обмен данными между содержимым узла и веб-сайта
Содержимое узла и веб-сайта может взаимодействовать следующими способами с помощью postMessage
:
Веб-содержимое в элементе управления WebView2 может отправлять сообщение на узел с помощью
window.chrome.webview.postMessage
. Узел обрабатывает сообщение с помощью любого зарегистрированногоWebMessageReceived
на узле.Размещает публикацию сообщений в веб-содержимое в элементе управления WebView2 с помощью
CoreWebView2.PostWebMessageAsString
илиCoreWebView2.PostWebMessageAsJSON
. Сообщения перехватываются обработчиками, добавленными вwindow.chrome.webview.addEventListener
.
Механизм связи передает сообщения из веб-содержимого на узел с помощью собственных возможностей.
В проекте, когда элемент управления WebView2 переходит по URL-адресу, он отображает URL-адрес в адресной строке и оповещает пользователя о URL-адресе, отображаемом в элементе управления WebView2.
В
MainWindow.xaml.cs
обновите конструктор и создайте функцию, соответствующуюInitializeAsync
приведенному ниже коду. ФункцияInitializeAsync
ожидает EnsureCoreWebView2Async, так как инициализация выполняется асинхронноCoreWebView2
.public MainWindow() { InitializeComponent(); webView.NavigationStarting += EnsureHttps; InitializeAsync(); } async void InitializeAsync() { await webView.EnsureCoreWebView2Async(null); }
После инициализации CoreWebView2 зарегистрируйте обработчик событий для реагирования на
WebMessageReceived
. ВMainWindow.xaml.cs
обновитеInitializeAsync
и добавьтеUpdateAddressBar
с помощью следующего кода:async void InitializeAsync() { await webView.EnsureCoreWebView2Async(null); webView.CoreWebView2.WebMessageReceived += UpdateAddressBar; } void UpdateAddressBar(object sender, CoreWebView2WebMessageReceivedEventArgs args) { String uri = args.TryGetWebMessageAsString(); addressBar.Text = uri; webView.CoreWebView2.PostWebMessageAsString(uri); }
Чтобы элемент управления WebView2 отправлял веб-сообщение и реагировал на него, после
CoreWebView2
инициализации узел выполняет следующие действия:- Внедряет скрипт в веб-содержимое, который регистрирует обработчик для печати сообщения с узла.
- Внедряет скрипт в веб-содержимое, которое публикует URL-адрес на узле.
В
MainWindow.xaml.cs
обновитеInitializeAsync
, чтобы соответствовать следующему коду:async void InitializeAsync() { await webView.EnsureCoreWebView2Async(null); webView.CoreWebView2.WebMessageReceived += UpdateAddressBar; await webView.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("window.chrome.webview.postMessage(window.document.URL);"); await webView.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("window.chrome.webview.addEventListener(\'message\', event => alert(event.data));"); }
Выберите Файл>Сохранить все , чтобы сохранить проект.
Нажмите клавишу F5, чтобы выполнить сборку и запуск проекта.
При открытии нового URI элемент управления WebView2 отображает URI в адресной строке.
Пример приложения отображает универсальный код ресурса (URI) в адресной строке и на веб-сайте Майкрософт: https://www.microsoft.com
Поздравляем, вы создали свое первое приложение WebView2!
См. также
developer.microsoft.com:
- Microsoft Edge WebView2 — начальное введение в функции WebView2 на developer.microsoft.com.
Локальные страницы:
- Пример приложения WPF
- Управление папками данных пользователя
-
Пример кода для WebView2 — руководство по репозиторию
WebView2Samples
. - Рекомендации по разработке приложений WebView2
GitHub: