Introdução ao WebView2 em aplicativos WinForms
Este tutorial ajuda você:
- Configure suas ferramentas de desenvolvimento.
- Use o modelo de projeto do Windows Forms App (.NET Framework) do Visual Studio para criar um projeto WinForms.
- Instale o pacote de SDK Microsoft.Web.WebView2 para o projeto WinForms.
- Saiba mais sobre os conceitos do WebView2 ao longo do caminho.
Etapa 1 – opcionalmente clonar ou baixar o repositório WebView2Samples
Siga um destes procedimentos:
Crie um novo projeto no Visual Studio a partir de um modelo de projeto, usando as etapas nas seções abaixo. Isso lhe dará o código e a estrutura de projeto mais recentes.
Clone ou baixe o
WebView2Samples
repositório, abra o projeto concluído no Visual Studio e siga as etapas deste artigo para entender a criação do projeto WinForms e entender o código WebView2 adicionado. Consulte Baixar o repositório WebView2Samples em Configurar seu ambiente de desenvolvimento para WebView2. Uma versão concluída deste projeto tutorial está disponível no diretório de repositório WebView2Samples WinForms_GettingStarted.- Nome da amostra: Win32_GettingStarted
- Diretório de repositório: Win32_GettingStarted
- Arquivo da solução: WebView2GettingStarted.sln
O exemplo no repositório pode não ser tão atualizado quanto um projeto que você cria usando os modelos de projeto mais recentes do Visual Studio.
Etapa 2 – Instalar o Visual Studio
O Microsoft Visual Studio é necessário. Não há suporte para o Microsoft Visual Studio Code para este tutorial.
Se o Visual Studio ainda não estiver instalado, abra a página Microsoft Visual Studio em uma nova janela ou guia e instale o Visual Studio 2017 ou posterior, como o Visual Studio 2022 Professional.
Em seguida, retorne aqui e continue abaixo.
Etapa 3 – Criar um aplicativo de janela única
Comece com um projeto de área de trabalho básico que contém uma única janela de main.
Abra o Visual Studio.
Selecione Arquivo>Novo>Projeto.
A janela recente do Visual Studio Open é exibida:
À direita, clique no cartão Criar um novo projeto. O Visual Studio Criar uma nova janela de projeto é aberto.
Na caixa de texto Pesquisar , cole ou comece a digitar o seguinte:
C# Windows Forms App (.NET Framework)
Os resultados da pesquisa aparecem, listando tipos de projeto.
Selecione o cartão C# Windows Forms App (.NET Framework). Verifique se o nome corresponde, com um ícone C# e, em seguida, o nome Windows Forms App (.NET Framework). Em seguida, clique no botão Avançar :
Na caixa de texto Nome do projeto , insira um nome de projeto. Este artigo de tutorial usa o nome WinForms_GettingStarted, como o nome do diretório do repositório para o projeto concluído.
Na caixa de texto Local , insira um caminho, como "C:\Users\username\Documents\MyWebView2Projects".
Na lista suspensa Framework, selecione .NET Framework 4.7.2 ou posterior, como .NET Framework 4.8:
Clique no botão Criar .
A janela do Visual Studio é aberta, mostrando o projeto WinForms de linha de base no Gerenciador de Soluções e mostrando uma janela Formulário Designer:
SelecioneSalvar todos osarquivos> (Ctrl+Shift+S).
Selecione Depurar>Iniciar Depuração (F5).
Uma janela vazia do Form1 é aberta, do novo projeto WinForms:
Feche a janela Form1 .
Agora você tem um projeto WinForms vazio que é executado. Em seguida, configure o projeto para adicionar conteúdo do WebView2.
Etapa 4 – Instalar o SDK do WebView2
Para cada projeto do WebView2, você usa o gerenciador de pacotes NuGet no Visual Studio para adicionar o SDK do WebView2 ao projeto. Você instala o pacote NuGet do SDK do Microsoft.Web.WebView2 para uso pelo projeto atual.
Use o NuGet para adicionar o SDK do WebView2 ao projeto, da seguinte maneira:
Em Gerenciador de Soluções, clique com o botão direito do mouse no nome do projeto (não no nome da solução acima) e selecione Gerenciar Pacotes NuGet:
O Gerenciador de Pacotes NuGet é aberto no Visual Studio.
Clique na guia Procurar no canto superior esquerdo.
Desmarque a caixa de seleção Incluir pré-lançamento .
Na barra de pesquisa, digite WebView2 e, em seguida, abaixo da barra de pesquisa, clique em Microsoft.Web.WebView2 para selecioná-lo:
Para ampliar, clique com o botão direito do mouse >em Abrir imagem na nova guia.
Clique no botão Instalar (ou Atualizar). A caixa de diálogo Alterações de Visualização é aberta:
Clique no botão OK .
SelecioneSalvar todos osarquivos> (Ctrl+Shift+S) para salvar o projeto.
Feche a janela Gerenciador de Pacotes do NuGet.
Selecione Depurar>Iniciar Depuração (F5) para criar e executar o projeto.
O projeto em execução exibe a mesma janela vazia de antes:
Feche a janela Form1 .
Você adicionou o SDK do WebView2 ao projeto, mas ainda não adicionou nenhum código WebView2 ao projeto.
Etapa 5 – Criar um único controle WebView2
Agora que o SDK do WebView2 está instalado para o projeto WinForms, adicione um controle WebView2 ao aplicativo da seguinte maneira:
O projeto inicial já tem um Form1.cs
formulário, mas adicionaremos outro, como Form2.cs
, para ver como fazer isso.
SelecioneFormulário de Adição de Projeto> (Windows Forms).
Na janela Adicionar Novo Item, à esquerda, selecione Itens >do Visual C#Windows Forms.
À direita, selecione Formulário (Windows Forms)e clique no botão Adicionar:
O projeto agora tem um formulário adicional, com o nome
Form2.cs
do arquivo , mostrado no Formulário Designer e em Gerenciador de Soluções:Clique na tela Do Formulário1 . Não usaremos o Form2.
Selecione Exibir>Caixa de Ferramentas.
Aqui é onde você adiciona conteúdo específico do WebView2 ao aplicativo:
Na caixa de ferramentas, clique em WebView2 Windows Forms Control para expandir as opções.
No Visual Studio 2017, por padrão, o WebView2 não é exibido na caixa de ferramentas. Para permitir que o WebView2 seja exibido na Caixa de Ferramentas, selecioneOpções> de Ferramentas>Geral> e defina a configuração Caixa de Ferramentas Populada Automaticamente como True.
Na caixa de ferramentas, clique ou arraste o controle WebView2 para a tela Forms Designer do controle adicionado, como
Form2.cs
:Arraste os lados do controle WebView2 para fazer com que ele preencha quase toda a tela.
Verifique se o novo controle WebView2 no formulário está selecionado. No painel Propriedades , na seção Design , defina a propriedade (Name) como WebView (minúscula 'w', capital 'V', sem sufixo numérico). O controle pode inicialmente ser nomeado outra coisa, como WebView21. Use os botões de opção de classificação categorizada e alfabética conforme necessário para encontrar propriedades:
No painel Propriedades , na seção Misc , defina a propriedade Source como
https://www.microsoft.com
. A propriedade Source define a URL inicial que será exibida no controle WebView2.SelecioneSalvar todos osarquivos> (Ctrl+Shift+S) para salvar o projeto.
Clique em F5 para compilar e executar o projeto.
O controle WebView2 exibe conteúdo de https://www.microsoft.com, em um controle WebView2 no formulário Windows Forms, com um Link de conteúdo Skip to main se você pressionou Alt+Tab para alternar para a janela:
Se necessário, clique no link Ignorar para main conteúdo.
O controle WebView2 exibe conteúdo de https://www.microsoft.com, em um controle WebView2 no formulário Windows Forms:
Feche a janela Form1 .
Se você estiver trabalhando em um monitor de alta resolução, talvez seja necessário configurar seu aplicativo Windows Forms para alto suporte a DPI.
Etapa 6 – Adicionar controles e eventos de redimensionamento da janela de processo
Adicione mais controles ao formulário Windows Forms da caixa de ferramentas e processe eventos de redimensionamento da janela da seguinte maneira.
Selecione Exibir>Caixa de Ferramentas ou clique na guia Caixa de Ferramentas à esquerda.
Na caixa de ferramentas, clique em Controles Comuns.
Adicione um controle de caixa de texto, da seguinte maneira:
Arraste o controle TextBox para a tela Designer formulário Form1.cs.
Verifique se o controle TextBox tem foco.
No painel Propriedades , na seção Design , altere o (Nome) (provavelmente de textBox1) para addressBar.
Adicione um controle de botão, da seguinte maneira:
Arraste um controle button para a tela Designer formulário Form1.cs.
Verifique se o controle de botão tem foco.
No painel Propriedades , na seção Aparência em negrito (cerca de 15 propriedades para baixo), altere a propriedade Texto (provavelmente de button1) para Go!
Alinhe a caixa de texto e o botão existente, da seguinte maneira:
Posicione a caixa de texto no lado esquerdo do formulário, alinhada verticalmente com o botão, conforme mostrado abaixo:
Redimensione a caixa de texto conforme mostrado:
Clique em Exibir>Código para abrir
Form1.cs
.Defina
Form_Resize
para manter os controles no local quando a janela do aplicativo for redimensionada, da seguinte maneira.Exclua o seguinte código:
public Form1() { InitializeComponent(); }
Cole esse código no mesmo local:
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; }
SelecioneSalvar todos osarquivos> (Ctrl+Shift+S) para salvar o projeto.
Clique em F5 para compilar e executar o projeto.
Uma janela do Form1 é exibida, exibindo o conteúdo da página da Web de https://www.microsoft.com:
Se você pressionar Alt+Tab para alternar para a janela Form1, talvez seja necessário clicar no link Ignorar para main conteúdo adicionado.
Role a janela para cima e para baixo com a roda do mouse. Os controles de entrada permanecem em vigor.
Arraste o canto da janela para redimensioná-lo. A caixa de texto altera a largura.
Feche a janela Form1 .
Etapa 7 – Navegação
Permitir que os usuários alterem a URL que o controle WebView2 exibe, lendo o texto inserido na caixa de texto, para servir como uma barra de endereços.
Selecione Exibir>Código para que
Form1.cs
esteja aberto no editor de código.No
Form1.cs
, adicione oCoreWebView2
namespace inserindo o seguinte código na parte superior do arquivo como linha 1:using Microsoft.Web.WebView2.Core;
Selecione a guia Form1.cs [Design] e clique duas vezes no
Go!
botão. OgoButton_Click
método é adicionado noForm1.cs
arquivo.Cole o seguinte código no arquivo para substituir o método vazio
goButton_Click
, de modo que o corpo do método seja o seguinte:private void goButton_Click(object sender, EventArgs e) { if (webView != null && webView.CoreWebView2 != null) { webView.CoreWebView2.Navigate(addressBar.Text); } }
Agora, a
goButton_Click
função navegará pelo controle WebView2 até a URL inserida na caixa de texto da barra de endereços.SelecioneSalvar todos osarquivos> (Ctrl+Shift+S) para salvar o projeto.
Clique em F5 para compilar e executar o projeto.
Na barra de endereços, insira uma URL que comece com
https
, comohttps://www.bing.com
, e clique no botão Ir!O controle WebView2 mostra o conteúdo da página da Web para a URL.
Na barra de endereços, insira uma cadeia de caracteres que não comece com
http
, comowww.bing.com
, e clique no botão Ir!Um
ArgumentException
será lançado se a URL não começar comhttp://
ouhttps://
.Selecione Depurar>Parar Depuração ou clique em Continuar. A janela Form1 fecha.
Etapa 8 – Eventos de navegação
Durante a navegação na página da Web, o controle WebView2 gera eventos. O aplicativo que hospeda controles WebView2 escuta os seguintes eventos:
NavigationStarting
SourceChanged
ContentLoading
HistoryChanged
NavigationCompleted
Para obter mais informações, confira Eventos de navegação para aplicativos WebView2.
Quando ocorre um erro, os seguintes eventos são gerados e podem depender da navegação para uma página da Web de erro:
SourceChanged
ContentLoading
HistoryChanged
Observação
Se ocorrer um redirecionamento HTTP, haverá vários NavigationStarting
eventos em uma linha.
Para demonstrar como usar os eventos, comece registrando um manipulador para NavigationStarting
isso cancela todas as solicitações que não usam HTTPS.
No
Form1.cs
, atualize oForm1()
construtor para corresponder ao código a seguir e adicione aEnsureHttps(sender, args)
função abaixo do construtor, da seguinte maneira: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; } }
No construtor,
EnsureHttps
é registrado como o manipulador de eventos noNavigationStarting
evento no controle WebView2.SelecioneSalvar todos osarquivos> (Ctrl+Shift+S) para salvar o projeto.
Clique em F5 para compilar e executar o projeto.
Na barra de endereços, insira uma URL que comece com
https
, comohttps://www.bing.com
, e clique no botão Ir!A URL https carrega; o conteúdo da Web muda do padrão, Microsoft.com, para Bing.com.
Na barra de endereços, insira uma URL que comece com
http
, comohttp://www.microsoft.com
, e clique no botão Ir!A URL http não é carregada; a página da Web Bing.com permanece exibida. Por outro lado, a entrada no
http://www.microsoft.com
Microsoft Edge funciona; ela redireciona para o site https para Microsoft.com.Na barra de endereços, insira uma URL que comece com
https
, comohttps://www.microsoft.com
, e clique no botão Ir!A URL https carrega; a página da Web Microsoft.com agora é exibida, já que você adicionou os 's' após 'http'.
Etapa 9 – Script
Você pode usar aplicativos host para injetar código JavaScript em controles WebView2 no runtime. Você pode tarefa WebView2 para executar JavaScript arbitrário ou adicionar scripts de inicialização. O JavaScript injetado se aplica a todos os novos documentos de nível superior e a todos os quadros filho até que o JavaScript seja removido. O JavaScript injetado é executado com um tempo específico.
Execute o JavaScript injetado após a criação do objeto global.
Execute o JavaScript injetado antes que qualquer outro script incluído no documento HTML seja executado.
Por exemplo, adicione um script que envia um alerta quando um usuário navega para um site que não é HTTPS, da seguinte maneira:
Modifique a
EnsureHttps
função para adicionar a seguinte linha que contémExecuteScriptAsync
: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; } }
A linha adicionada injeta um script no conteúdo da Web que usa o método ExecuteScriptAsync . O script adicionado é:
alert('{uri} is not safe, try an https link')
SelecioneSalvar todos os arquivos (Ctrl+Shift+S) para salvar o projeto.>
Clique em F5 para compilar e executar o projeto.
Tente ir para
http://www.bing.com
(comhttp
em vez dehttps
prefixo).O aplicativo exibe um alerta:
Etapa 10 – Comunicação entre o host e o conteúdo da Web
O host e o conteúdo da Web podem ser usados postMessage
para se comunicar entre si da seguinte maneira:
O conteúdo da Web em um controle WebView2 pode ser usado
window.chrome.webview.postMessage
para postar uma mensagem no host. O host manipula a mensagem usando qualquer registroWebMessageReceived
no host.Os hosts postam mensagens no conteúdo da Web em um controle WebView2 usando
CoreWebView2.PostWebMessageAsString
ouCoreWebView2.PostWebMessageAsJSON
. Essas mensagens são capturadas por manipuladores adicionados awindow.chrome.webview.addEventListener
.
O mecanismo de comunicação passa mensagens do conteúdo da Web para o host usando recursos nativos.
Em seu projeto, quando o controle WebView2 navega até uma URL, ele exibe a URL na barra de endereços e alerta o usuário da URL exibida no controle WebView2.
No
Form1.cs
, atualize oForm1()
construtor e crie umaInitializeAsync()
função abaixo dele, correspondendo ao seguinte código:public Form1() { InitializeComponent(); this.Resize += new System.EventHandler(this.Form_Resize); webView.NavigationStarting += EnsureHttps; InitializeAsync(); } async void InitializeAsync() { await webView.EnsureCoreWebView2Async(null); }
A
InitializeAsync
função aguarda EnsureCoreWebView2Async, pois a inicialização deCoreWebView2
é assíncrona.Em seguida, registre um manipulador de eventos para responder a
WebMessageReceived
. Esse manipulador de eventos será registrado apósCoreWebView2
a inicialização.Em
Form1.cs
, atualizeInitializeAsync
e adicioneUpdateAddressBar
abaixo, da seguinte maneira: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); }
Em seguida, para que o WebView2 envie e responda à mensagem da Web, depois
CoreWebView2
de inicializado, o host injetará um script no conteúdo da Web para:Envie a URL para o host usando
postMessage
.Registre um manipulador de eventos para exibir uma mensagem enviada do host, em uma caixa de alerta, antes de exibir o conteúdo da página da Web.
No
Form1.cs
, atualizeInitializeAsync
para corresponder ao seguinte código: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));"); }
SelecioneSalvar todos osarquivos> (Ctrl+Shift+S) para salvar alterações.
Clique em F5 para compilar e executar o projeto.
Insira uma URL, como
https://www.bing.com
:Um alerta é exibido inicialmente, mostrando a URL resultante enviada do site do host.
Clique no botão OK .
O controle WebView2 agora exibe a nova URL na barra de endereços e o conteúdo da página da Web da URL é exibido no controle WebView2 na janela WinForms:
Quando o aplicativo é iniciado, a URL padrão é
https://www.microsoft.com
, e o endereço exibido resultante mostra a localidade, comohttps://www.microsoft.com/en-us/
.Se você inserir
https://www.bing.com
, o endereço resultante será uma variante, comohttps://www4.bing.com/?form=DCDN
.
Parabéns, você criou seu primeiro aplicativo WebView2!
Distribuindo um aplicativo WebView2
Se você distribuir o aplicativo que resulta deste tutorial, precisará distribuir o Runtime do WebView2 junto com seu aplicativo. O Runtime do WebView2 seria instalado automaticamente em computadores de usuário. Para obter mais informações, confira Distribuir seu aplicativo e o Runtime do WebView2.
Confira também
- Distribuir seu aplicativo e o Runtime do WebView2
- Aplicativo de exemplo WinForms – Demonstra mais APIs do WebView2 do que o tutorial atual.
- Referência de API do WebView2