Начало работы с WebView2 в приложениях WinForms
Это руководство поможет вам:
- Настройте средства разработки.
- Используйте шаблон проекта Visual Studio Windows Forms приложения (платформа .NET Framework) C#, чтобы создать проект WinForms.
- Установите пакет SDK для Microsoft.Web.WebView2 для проекта WinForms.
- Узнайте об основных понятиях WebView2.
Шаг 1. При необходимости клонирование или скачивание репозитория WebView2Samples
Выполните одно из следующих действий.
Создайте проект в Visual Studio, начиная с шаблона проекта, выполнив действия, описанные в разделах ниже. Это позволит получить последнюю структуру кода и проекта.
Клонируйте или скачайте
WebView2Samples
репозиторий, откройте готовый проект в Visual Studio и выполните действия, описанные в этой статье, чтобы понять создание проекта WinForms и добавленный код WebView2. См . статью Скачивание репозитория WebView2Samples в статье Настройка среды разработки для WebView2. Полная версия этого учебного проекта доступна в каталоге репозитория WebView2Samples WinForms_GettingStarted.- Имя примера: Win32_GettingStarted
- Каталог репозитория: Win32_GettingStarted
- Файл решения: WebView2GettingStarted.sln
Пример в репозитории может быть не таким актуальным, как проект, создаваемый с помощью последних шаблонов проектов Visual Studio.
Шаг 2. Установка Visual Studio
Требуется Microsoft Visual Studio. Microsoft Visual Studio Code не поддерживается в этом руководстве.
Если Visual Studio еще не установлен, откройте страницу Microsoft Visual Studio в новом окне или вкладке и установите Visual Studio 2017 или более поздней версии, например Visual Studio 2022 Professional.
Затем вернитесь сюда и перейдите ниже.
Шаг 3. Создание приложения с одним окном
Начните с простого классического проекта, содержащего одно окно main.
Откройте Visual Studio.
Выберите Файл>Создать>Проект.
Откроется окно Открыть последнюю версию Visual Studio:
В правой части экрана щелкните карта Создать проект. Откроется окно Создание проекта в Visual Studio.
В текстовое поле Поиск вставьте или начните вводить следующее:
C# Windows Forms App (.NET Framework)
Появятся результаты поиска, в котором перечислены типы проектов.
Выберите карта приложение Windows Forms C# (платформа .NET Framework). Убедитесь, что имя совпадает со значком C#, а затем имя Windows Forms App (платформа .NET Framework). Затем нажмите кнопку Далее :
В текстовом поле Имя проекта введите имя проекта. В этой статье учебника используется имя WinForms_GettingStarted, например имя каталога репозитория для завершенного проекта.
В текстовом поле Расположение введите путь, например "C:\Users\username\Documents\MyWebView2Projects".
В раскрывающемся списке Платформа выберите платформа .NET Framework 4.7.2 или более поздней версии, например платформа .NET Framework 4.8:
Нажмите кнопку Создать.
Откроется окно Visual Studio с базовым проектом WinForms в Обозреватель решений и окно Designer формы:
Выберите Файл>Сохранить все (CTRL+SHIFT+S).
Выберите Отладка>Начать отладку (F5).
Откроется пустое окно Form1 из нового проекта WinForms:
Закройте окно Form1 .
Теперь у вас есть пустой проект WinForms, который выполняется. Затем настройте проект для добавления содержимого WebView2.
Шаг 4. Установка пакета SDK для WebView2
Для каждого проекта WebView2 вы используете диспетчер пакетов NuGet в Visual Studio, чтобы добавить пакет SDK WebView2 в проект. Вы устанавливаете пакет NuGet пакета NuGet пакета Sdk для Microsoft.Web.WebView2 для использования в текущем проекте.
Используйте NuGet, чтобы добавить пакет SDK WebView2 в проект следующим образом:
В Обозреватель решений щелкните правой кнопкой мыши имя проекта (не имя решения над ним), а затем выберите Управление пакетами NuGet:
Диспетчер пакетов NuGet откроется в Visual Studio.
Откройте вкладку Обзор в левом верхнем углу.
Снимите флажок Включить предварительную версию .
В строке поиска введите WebView2, а затем под строкой поиска щелкните Microsoft.Web.WebView2 , чтобы выбрать его:
Чтобы увеличить масштаб, щелкните правой кнопкой мыши >Открыть изображение на новой вкладке.
Нажмите кнопку Установить (или Обновить). Откроется диалоговое окно Предварительный просмотр изменений :
Нажмите кнопку ОК .
Выберите Файл>Сохранить все (CTRL+SHIFT+S), чтобы сохранить проект.
Закройте окно диспетчера пакетов NuGet.
Выберите Отладка>Начать отладку (F5), чтобы выполнить сборку и запуск проекта.
В работающем проекте отображается то же пустое окно, что и раньше:
Закройте окно Form1 .
Вы добавили пакет SDK Для WebView2 в проект, но еще не добавили в проект код WebView2.
Шаг 5. Создание одного элемента управления WebView2
Теперь, когда пакет SDK для WebView2 установлен для проекта WinForms, добавьте в приложение элемент управления WebView2 следующим образом:
Начальный проект уже имеет Form1.cs
форму, но мы добавим еще одну, как Form2.cs
, чтобы узнать, как это сделать.
Выберите ProjectAdd Form (Windows Forms) (Форма добавления проекта > (Windows Forms)).
В окне Добавление нового элемента слева выберите Элементы >Visual C#Windows Forms.
Справа выберите Форма (Windows Forms) и нажмите кнопку Добавить:
Теперь проект имеет дополнительную форму с именем
Form2.cs
файла, показанным в Designer формы и в Обозреватель решений:Щелкните холст Form1 . Мы не будем использовать Form2.
Выберите Просмотр>панели элементов.
Ниже описано, где вы добавляете в приложение содержимое WebView2:
На панели элементов щелкните Элемент управления WebView2 Windows Forms, чтобы развернуть параметры.
В Visual Studio 2017 по умолчанию WebView2 не отображается на панели элементов. Чтобы включить отображение WebView2 на панели элементов, выберитеПараметры>инструментов>Общие> и задайте для параметра Автоматически заполнять панель элементов значение True.
На панели элементов щелкните или перетащите элемент управления WebView2 на холст Designer форм добавленного элемента управления, например
Form2.cs
:Перетащите стороны элемента управления WebView2, чтобы заполнить почти весь холст.
Убедитесь, что в форме выбран новый элемент управления WebView2 . На панели Свойства в разделе Конструктор задайте для свойства (Имя) значение webView (строчные буквы "w", заглавная буква "V", без числового суффикса). Изначально элементу управления может быть присвоено другое имя, например webView21. При необходимости используйте кнопки Сортировка по категориям и по алфавиту , чтобы найти свойства:
На панели Свойства в разделе Прочее задайте для свойства Source значение
https://www.microsoft.com
. Свойство Source задает исходный URL-адрес, который будет отображаться в элементе управления WebView2.Выберите Файл>Сохранить все (CTRL+SHIFT+S), чтобы сохранить проект.
Нажмите клавишу F5, чтобы выполнить сборку и запуск проекта.
Элемент управления WebView2 отображает содержимое из https://www.microsoft.com, в элементе управления WebView2 в форме Windows Forms со ссылкой Перейти к main содержимому, если вы нажали ALT+TAB, чтобы переключиться в окно:
При необходимости щелкните ссылку Перейти к main содержимого.
Элемент управления WebView2 отображает содержимое из https://www.microsoft.com, в элементе управления WebView2 в форме Windows Forms:
Закройте окно Form1 .
Если вы работаете на мониторе с высоким разрешением, может потребоваться настроить приложение Windows Forms для поддержки высокого разрешения.
Шаг 6. Добавление элементов управления и событий изменения размера окна процесса
Добавьте дополнительные элементы управления в форму Windows Forms из панели элементов, а затем обработайте события изменения размера окна, как показано ниже.
Выберите Просмотреть>панель элементов или щелкните вкладку Панель элементов слева.
На панели элементов щелкните Общие элементы управления.
Добавьте элемент управления "Текстовое поле", как показано ниже.
Перетащите элемент управления TextBox на холст Form1.cs form Designer.
Убедитесь, что элемент управления TextBox имеет фокус.
На панели Свойства в разделе Конструктор измените (Имя) ( возможно, с textBox1) на addressBar.
Добавьте элемент управления "Кнопка", как показано ниже.
Перетащите элемент управления Кнопка на холст Designer формы Form1.cs.
Убедитесь, что элемент управления "Кнопка" имеет фокус.
На панели Свойства в разделе Внешний вид полужирным шрифтом (около 15 свойств вниз) измените свойство Text (вероятно, с button1) на Go!
Выровняйте текстовое поле и существующую кнопку следующим образом:
Поместите текстовое поле в левой части формы, выровненное по вертикали с кнопкой, как показано ниже:
Измените размер текстового поля, как показано ниже.
Щелкните Просмотреть>код , чтобы открыть
Form1.cs
.Определите
Form_Resize
, чтобы элементы управления были на месте при изменении размера окна приложения, как показано ниже.Удалите следующий код:
public Form1() { InitializeComponent(); }
Вставьте этот код в то же расположение:
public Form1() { InitializeComponent(); this.Resize += new System.EventHandler(this.Form_Resize); } private void Form_Resize(object sender, EventArgs e) { webView.Size = this.ClientSize - new System.Drawing.Size(webView.Location); goButton.Left = this.ClientSize.Width - goButton.Width; addressBar.Width = goButton.Left - addressBar.Left; }
Выберите Файл>Сохранить все (CTRL+SHIFT+S), чтобы сохранить проект.
Нажмите клавишу F5, чтобы выполнить сборку и запуск проекта.
Откроется окно Form1 , в котором отображается содержимое веб-страницы из https://www.microsoft.com:
Если нажать клавиши ALT+TAB, чтобы переключиться в окно Form1, может потребоваться щелкнуть добавленную ссылку Перейти к main содержимого.
Прокрутите окно вверх и вниз с помощью колесика мыши. Элементы управления вводом остаются на месте.
Перетащите угол окна, чтобы изменить его размер. Текстовое поле изменяет ширину.
Закройте окно Form1 .
Шаг 7. Навигация
Разрешить пользователям изменять URL-адрес, отображаемый элементом управления WebView2, считывая текст, введенный в текстовое поле, в качестве адресной строки.
Выберите Просмотреть>код ,
Form1.cs
чтобы открыть его в редакторе кода.В
Form1.cs
добавьтеCoreWebView2
пространство имен, вставив следующий код в верхней части файла в виде строки 1:using Microsoft.Web.WebView2.Core;
Выберите вкладку Form1.cs [Конструктор] , а затем дважды щелкните кнопку
Go!
. МетодgoButton_Click
добавляется вForm1.cs
файл.Вставьте следующий код в файл, чтобы заменить пустой
goButton_Click
метод, чтобы текст метода был следующим:private void goButton_Click(object sender, EventArgs e) { if (webView != null && webView.CoreWebView2 != null) { webView.CoreWebView2.Navigate(addressBar.Text); } }
goButton_Click
Теперь функция перейдет к элементу управления WebView2 по URL-адресу, который вводится в текстовом поле адресной строки.Выберите Файл>Сохранить все (CTRL+SHIFT+S), чтобы сохранить проект.
Нажмите клавишу F5, чтобы выполнить сборку и запуск проекта.
В адресной строке введите URL-адрес, который начинается с
https
, напримерhttps://www.bing.com
, и нажмите кнопку Go! :Элемент управления WebView2 отображает содержимое веб-страницы для URL-адреса.
В адресной строке введите строку, которая не начинается с
http
, напримерwww.bing.com
, и нажмите кнопку Go! .Если
ArgumentException
URL-адрес не начинается сhttp://
илиhttps://
, возникает исключение .Выберите Отладка>Остановить отладку или нажмите кнопку Продолжить. Окно Form1 закрывается.
Шаг 8. События навигации
Во время навигации по веб-странице элемент управления WebView2 вызывает события. Приложение, в котором размещаются элементы управления WebView2, прослушивает следующие события:
NavigationStarting
SourceChanged
ContentLoading
HistoryChanged
NavigationCompleted
Дополнительные сведения см. в разделе События навигации для приложений WebView2.
При возникновении ошибки возникают следующие события, которые могут зависеть от перехода на веб-страницу ошибки:
SourceChanged
ContentLoading
HistoryChanged
Примечание.
Если происходит перенаправление HTTP, в строке имеется несколько NavigationStarting
событий.
Чтобы продемонстрировать использование событий, начните с регистрации обработчика, NavigationStarting
который отменяет все запросы, не использующие HTTPS.
В
Form1.cs
обновитеForm1()
конструктор, чтобы он соответствовал следующему коду, а также добавьте функциюEnsureHttps(sender, args)
под конструктором следующим образом:public Form1() { InitializeComponent(); this.Resize += new System.EventHandler(this.Form_Resize); webView.NavigationStarting += EnsureHttps; } void EnsureHttps(object sender, CoreWebView2NavigationStartingEventArgs args) { String uri = args.Uri; if (!uri.StartsWith("https://")) { args.Cancel = true; } }
В конструкторе
EnsureHttps
регистрируется как обработчик события в элементеNavigationStarting
управления WebView2.Выберите Файл>Сохранить все (CTRL+SHIFT+S), чтобы сохранить проект.
Нажмите клавишу F5, чтобы выполнить сборку и запуск проекта.
В адресной строке введите URL-адрес, который начинается с
https
, напримерhttps://www.bing.com
, и нажмите кнопку Go! .Загружается URL-адрес https; веб-содержимое изменится со значения по умолчанию Microsoft.com на Bing.com.
В адресной строке введите URL-адрес, который начинается с
http
, напримерhttp://www.microsoft.com
, и нажмите кнопку Go! .URL-адрес HTTP не загружается; веб-страница Bing.com по-прежнему отображается. В отличие от этого, вход
http://www.microsoft.com
в Microsoft Edge работает; он перенаправляет на сайт HTTPS для Microsoft.com.В адресной строке введите URL-адрес, который начинается с
https
, напримерhttps://www.microsoft.com
, и нажмите кнопку Go! .Загружается URL-адрес https; Теперь появится веб-страница Microsoft.com, так как вы добавили "s" после "http".
Шаг 9. Создание скриптов
Вы можете использовать хост-приложения для внедрения кода JavaScript в элементы управления WebView2 во время выполнения. Вы можете поручить WebView2 запустить произвольный JavaScript или добавить скрипты инициализации. Внедренный Код JavaScript применяется ко всем новым документам верхнего уровня и всем дочерним кадрам до тех пор, пока 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; } }
Добавленная строка внедряет скрипт в веб-содержимое, использующее метод ExecuteScriptAsync . Добавленный скрипт:
alert('{uri} is not safe, try an https link')
Выберите Файл>Сохранить все (CTRL+SHIFT+S), чтобы сохранить проект.
Нажмите клавишу F5, чтобы выполнить сборку и запуск проекта.
Попробуйте перейти
http://www.bing.com
к (сhttp
префиксом вместоhttps
префикса).Приложение отображает оповещение:
Шаг 10. Обмен данными между хост-содержимым и веб-сайтом
Содержимое узла и веб-сайта можно использовать postMessage
для взаимодействия друг с другом следующим образом:
Веб-содержимое в элементе управления WebView2 можно использовать для
window.chrome.webview.postMessage
отправки сообщения на узел. Узел обрабатывает сообщение с помощью любого зарегистрированногоWebMessageReceived
на узле.Размещает публикацию сообщений в веб-содержимое в элементе управления WebView2 с помощью
CoreWebView2.PostWebMessageAsString
илиCoreWebView2.PostWebMessageAsJSON
. Эти сообщения перехватываются обработчиками, добавленными вwindow.chrome.webview.addEventListener
.
Механизм связи передает сообщения из веб-содержимого на узел с помощью собственных возможностей.
В проекте, когда элемент управления WebView2 переходит по URL-адресу, он отображает URL-адрес в адресной строке и оповещает пользователя о URL-адресе, отображаемом в элементе управления WebView2.
В
Form1.cs
обновитеForm1()
конструктор и создайтеInitializeAsync()
под ним функцию, соответствующую следующему коду:public Form1() { InitializeComponent(); this.Resize += new System.EventHandler(this.Form_Resize); webView.NavigationStarting += EnsureHttps; InitializeAsync(); } async void InitializeAsync() { await webView.EnsureCoreWebView2Async(null); }
Функция
InitializeAsync
ожидает EnsureCoreWebView2Async, так как инициализация выполняется асинхронноCoreWebView2
.Затем зарегистрируйте обработчик событий для реагирования на
WebMessageReceived
. Этот обработчик событий будет зарегистрирован послеCoreWebView2
инициализации.В
Form1.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-адрес на узел с помощью
postMessage
.Зарегистрируйте обработчик событий для отображения сообщения, отправленного с узла, в поле оповещения перед отображением содержимого веб-страницы.
В
Form1.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));"); }
Выберите Файл>Сохранить все (CTRL+SHIFT+S), чтобы сохранить изменения.
Нажмите клавишу F5, чтобы выполнить сборку и запуск проекта.
Введите URL-адрес, например
https://www.bing.com
:Первоначально появится оповещение, отображающее результирующий URL-адрес, отправленный с хост-сайта.
Нажмите кнопку ОК .
Элемент управления WebView2 теперь отображает новый URL-адрес в адресной строке, а содержимое веб-страницы из URL-адреса отображается в элементе управления WebView2 в окне WinForms:
При запуске приложения URL-адрес по умолчанию —
https://www.microsoft.com
, а результирующий отображаемый адрес отображает языковой стандарт, напримерhttps://www.microsoft.com/en-us/
.Если ввести
https://www.bing.com
значение , результирующий адрес будет вариантом, напримерhttps://www4.bing.com/?form=DCDN
.
Поздравляем, вы создали свое первое приложение WebView2!
Распространение приложения WebView2
Если вы хотите распространить приложение, полученное из этого руководства, вам потребуется распространить среду выполнения WebView2 вместе с приложением. Затем среда выполнения WebView2 будет автоматически установлена на компьютерах пользователей. Дополнительные сведения см. в разделе Распространение приложения и среды выполнения WebView2.
См. также
- Распространение приложения и среды выполнения WebView2
- Пример приложения WinForms . Демонстрирует больше API WebView2, чем в настоящем руководстве.
- Справочник по API WebView2