Introdução
Instalação
Guias
- Engine
- Perfil
- Navegador
- BrowserView
- Navegação
- Conteúdo
- Menu de contexto
- DOM
- JavaScript
- Pop-ups
- Diálogos
- Downloads
- Rede
- Cache
- Cookies
- Proxy
- Autenticação
- Permissões
- Plugins
- Impressão
- Senhas
- Perfis de dados do usuário
- Cartões de crédito
- Mídia
- Zoom
- Corretor ortográfico
- Implantação
- Chromium
Resolução de problemas
- Registro
- Exceções comuns
- A aplicação não termina
- O vídeo não é reproduzido
- Não é possível iniciar sessão na conta Google
- Os dados do usuário não são armazenados
- Esquema de cores
- Falha no início
- Início lento no Windows
- Aplicação .NET que não responde
- Encerramento inesperado do processo Chromium
- Comportamento inesperado
- Fim do suporte do Windows 7/8/8.1
Migração
Pop-ups
Esta página descreve como trabalhar com pop-ups, apresentá-los ou suprimi-los.
Visão geral
Qualquer página Web pode apresentar janelas pop-up utilizando uma das seguintes formas:
-
A função JavaScript
window.open()
. Por exemplo:window.open("https://www.google.com", "_blank", "resizable=yes, top=500, left=500, width=400, height=400");
-
Um link com o atributo
target
:<a href="https://www.google.com" target="_blank">Abrir o Google</a>
Por padrão, todos os pop-ups são suprimidos para a instância IBrowser
. Se uma instância IBrowserView
for inicializada a partir da instância IBrowser
que não possui tratamento de pop-up personalizado, o handler de pop-up padrão é registrado. Os pop-ups são apresentados numa janela ou formulário separado.
Abrir pop-ups
Para alterar o comportamento predefinido e assumir o controle da criação de pop-ups, utilize os handlers CreatePopupHandler
e OpenPopupHandler
.
O handler CreatePopupHandler
é invocado quando o engine pretende saber se o pop-up pode ser criado ou não. O seguinte exemplo de código mostra como permitir a criação de um pop-up:
browser.CreatePopupHandler =
new Handler<CreatePopupParameters, CreatePopupResponse>(p =>
{
return CreatePopupResponse.Create();
});
browser.CreatePopupHandler =
New Handler(Of CreatePopupParameters, CreatePopupResponse)(Function(p)
Return CreatePopupResponse.Create()
End Function)
Se o handler CreatePopupHandler
permitir criar uma janela pop-up, o handler OpenPopupHandler
é invocado. Neste handler, é possível acessar o pop-up criado e exibi-lo, se necessário. Veja o exemplo de código abaixo:
browser.OpenPopupHandler =
new Handler<OpenPopupParameters>(p =>
{
// Acessar o navegador popup criado.
IBrowser popup = p.PopupBrowser;
});
browser.OpenPopupHandler =
New Handler(Of OpenPopupParameters)(Sub(p)
' Acessar o navegador popup criado.
Dim popup As IBrowser = p.PopupBrowser
End Sub)
A instância popup
no exemplo acima não tem nenhuma página da Web carregada no momento em que o handler é chamado. A página Web será carregada mais tarde. Neste momento, é possível registrar todos os ouvintes e handlers de eventos necessários, mas não é possível acessar o DOM ou JavaScript, porque o popup
ainda não tem um IFrame
.
Supressão de pop-ups
Para suprimir os pop-ups, utilize a seguinte abordagem:
browser.CreatePopupHandler =
new Handler<CreatePopupParameters, CreatePopupResponse>(p =>
{
return CreatePopupResponse.Suppress();
});
browser.CreatePopupHandler =
New Handler(Of CreatePopupParameters, CreatePopupResponse)(Function(p)
Return CreatePopupResponse.Suppress()
End Function)
Carregando a URL do pop-up no navegador principal
Para suprimir a criação de um pop-up separado e carregar o URL do pop-up no navegador principal, utilize a seguinte abordagem:
browser.CreatePopupHandler =
new Handler<CreatePopupParameters, CreatePopupResponse>(p =>
{
browser.Navigation.LoadUrl(p.TargetUrl);
return CreatePopupResponse.Suppress();
});
browser.CreatePopupHandler =
New Handler(Of CreatePopupParameters, CreatePopupResponse)(Function(p)
browser.Navigation.LoadUrl(p.TargetUrl)
Return CreatePopupResponse.Suppress()
End Function)
Exibindo pop-ups
Quando você inicializa um WinForms ou WPF BrowserView
, você configura automaticamente a instância IBrowser
com a implementação predefinida dos handlers CreatePopupHandler
e OpenPopupHandler
.
A implementação predefinida do CreatePopupHandler
permite criar todos os pop-ups:
browser.CreatePopupHandler =
new Handler<CreatePopupParameters, CreatePopupResponse>(p =>
{
return CreatePopupResponse.Create();
});
browser.CreatePopupHandler =
New Handler(Of CreatePopupParameters, CreatePopupResponse)(Function(p)
Return CreatePopupResponse.Create()
End Function)
Veja os detalhes sobre a implementação padrão do handler OpenPopupHandler
para WinForms e WPF abaixo.
WinForms
A implementação predefinida para WinForms BrowserView
é a seguinte:
using System;
using System.Windows.Forms;
using DotNetBrowser.Browser;
using DotNetBrowser.Browser.Events;
using DotNetBrowser.Browser.Handlers;
using DotNetBrowser.Geometry;
using DotNetBrowser.Handlers;
using DotNetBrowser.WinForms;
namespace Popups.WinForms
{
public class OpenPopupHandler : IHandler<OpenPopupParameters>
{
private readonly Control parent;
public OpenPopupHandler(Control parent)
{
this.parent = parent;
}
public void Handle(OpenPopupParameters parameters)
{
Action showPopupAction = () =>
{
ShowPopup(parameters.PopupBrowser,
parameters.Rectangle);
};
parent.BeginInvoke(showPopupAction);
}
private void ShowPopup(IBrowser popupBrowser, Rectangle rectangle)
{
BrowserView browserView = new BrowserView
{
Dock = DockStyle.Fill
};
browserView.InitializeFrom(popupBrowser);
// Define o mesmo handler de popup para o próprio navegador de popup.
popupBrowser.OpenPopupHandler = new OpenPopupHandler(browserView);
Form form = new Form();
if(!rectangle.IsEmpty)
{
form.StartPosition = FormStartPosition.Manual;
form.Location = new System.Drawing.Point(rectangle.Origin.X,
rectangle.Origin.Y);
form.ClientSize = new System.Drawing.Size((int)rectangle.Size.Width,
(int)rectangle.Size.Height);
browserView.Width = (int)rectangle.Size.Width;
browserView.Height = (int)rectangle.Size.Height;
}
else
{
form.Width = 800;
form.Height = 600;
}
form.Closed += delegate
{
form.Controls.Clear();
if(!popupBrowser.IsDisposed)
{
popupBrowser.Dispose();
}
};
popupBrowser.TitleChanged += delegate (object sender, TitleChangedEventArgs e)
{
form.BeginInvoke((Action)(() => { form.Text = e.Title; }));
};
popupBrowser.Disposed += delegate
{
Action formCloseAction = () =>
{
form.Controls.Clear();
form.Hide();
form.Close();
form.Dispose();
};
form.BeginInvoke(formCloseAction);
};
form.Controls.Add(browserView);
form.Show();
}
}
}
Imports DotNetBrowser.Browser
Imports DotNetBrowser.Browser.Handlers
Imports DotNetBrowser.Geometry
Imports DotNetBrowser.Handlers
Imports DotNetBrowser.WinForms
Public Class OpenPopupHandler
Implements IHandler(Of OpenPopupParameters)
Private ReadOnly parent As Control
Public Sub New(parent As Control)
Me.parent = parent
End Sub
Public Sub Handle(p As OpenPopupParameters) _
Implements IHandler(Of OpenPopupParameters).Handle
Dim showPopupAction As Action = Sub()
ShowPopup(p.PopupBrowser, p.Rectangle)
End Sub
parent.BeginInvoke(showPopupAction)
End Sub
Private Sub ShowPopup(popupBrowser As IBrowser, rectangle As Rectangle)
Dim browserView As New BrowserView With {.Dock = DockStyle.Fill}
browserView.InitializeFrom(popupBrowser)
' Define o mesmo handler de popup para o próprio navegador de popup.
popupBrowser.OpenPopupHandler = New OpenPopupHandler(browserView)
Dim form As New Form()
If Not rectangle.IsEmpty Then
form.StartPosition = FormStartPosition.Manual
form.Location =
New Drawing.Point(rectangle.Origin.X, rectangle.Origin.Y)
form.ClientSize =
New Drawing.Size(rectangle.Size.Width, rectangle.Size.Height)
browserView.Width = CInt(rectangle.Size.Width)
browserView.Height = CInt(rectangle.Size.Height)
Else
form.Width = 800
form.Height = 600
End If
AddHandler form.Closed, Sub()
form.Controls.Clear()
If Not popupBrowser.IsDisposed Then
popupBrowser.Dispose()
End If
End Sub
AddHandler popupBrowser.TitleChanged, Sub(sender, e)
form.BeginInvoke(CType(Sub()
form.Text = e.Title
End Sub, Action))
End Sub
AddHandler popupBrowser.Disposed, Sub()
Dim formCloseAction As Action = Sub()
form.Controls.Clear()
form.Hide()
form.Close()
form.Dispose()
End Sub
form.BeginInvoke(formCloseAction)
End Sub
form.Controls.Add(browserView)
form.Show()
End Sub
End Class
WPF
A implementação predefinida para o WPF BrowserView
é a seguinte:
using System;
using System.Windows;
using System.Windows.Threading;
using DotNetBrowser.Browser;
using DotNetBrowser.Browser.Handlers;
using DotNetBrowser.Geometry;
using DotNetBrowser.Handlers;
using DotNetBrowser.Wpf;
namespace Popups.Wpf
{
public class OpenPopupHandler : IHandler<OpenPopupParameters>
{
private readonly FrameworkElement parent;
private Dispatcher Dispatcher => parent?.Dispatcher
?? Application.Current.Dispatcher;
public OpenPopupHandler(FrameworkElement parentElement)
{
parent = parentElement;
}
public void Handle(OpenPopupParameters parameters)
{
Action showPopupAction = () =>
{
ShowPopup(parameters.PopupBrowser,
parameters.Rectangle);
};
Dispatcher.BeginInvoke(showPopupAction);
}
private void ShowPopup(IBrowser popupBrowser, Rectangle rectangle)
{
BrowserView browserView = new BrowserView();
browserView.InitializeFrom(popupBrowser);
// Define o mesmo handler de popup para o próprio navegador de popup.
popupBrowser.OpenPopupHandler = new OpenPopupHandler(browserView);
Window window = new Window {Owner = Window.GetWindow(parent)};
if (!rectangle.IsEmpty)
{
window.Top = rectangle.Origin.Y;
window.Left = rectangle.Origin.X;
window.SizeToContent = SizeToContent.WidthAndHeight;
browserView.Width = rectangle.Size.Width;
browserView.Height = rectangle.Size.Height;
}
else
{
window.Width = 800;
window.Height = 600;
}
window.Closed += (sender, args) =>
{
window.Content = null;
if (!popupBrowser.IsDisposed)
{
popupBrowser.Dispose();
}
};
popupBrowser.TitleChanged += (sender, e) =>
{
Dispatcher?.BeginInvoke((Action) (() => window.Title = e.Title));
};
popupBrowser.Disposed += delegate
{
Dispatcher?.Invoke(() =>
{
window.Content = null;
window.Hide();
window.Close();
});
};
window.Content = browserView;
window.Show();
}
}
}
Imports System.Windows.Threading
Imports DotNetBrowser.Browser
Imports DotNetBrowser.Browser.Handlers
Imports DotNetBrowser.Geometry
Imports DotNetBrowser.Handlers
Imports DotNetBrowser.Wpf
Public Class OpenPopupHandler
Implements IHandler(Of OpenPopupParameters)
Private ReadOnly parent As FrameworkElement
Private ReadOnly Property Dispatcher As Dispatcher
Get
Return If(parent?.Dispatcher, Application.Current.Dispatcher)
End Get
End Property
Public Sub New(parentElement As FrameworkElement)
parent = parentElement
End Sub
Public Sub Handle(p As OpenPopupParameters) _
Implements IHandler(Of OpenPopupParameters).Handle
Dim showPopupAction As Action =
Sub()
ShowPopup(p.PopupBrowser, p.Rectangle)
End Sub
Dispatcher.BeginInvoke(showPopupAction)
End Sub
Private Sub ShowPopup(popupBrowser As IBrowser, rectangle As Rectangle)
Dim browserView As New BrowserView()
browserView.InitializeFrom(popupBrowser)
' Define o mesmo handler de popup para o próprio navegador de popup.
popupBrowser.OpenPopupHandler = New OpenPopupHandler(browserView)
Dim window As New Window With {.Owner = Window.GetWindow(parent)}
If Not rectangle.IsEmpty Then
window.Top = rectangle.Origin.Y
window.Left = rectangle.Origin.X
window.SizeToContent = SizeToContent.WidthAndHeight
browserView.Width = rectangle.Size.Width
browserView.Height = rectangle.Size.Height
Else
window.Width = 800
window.Height = 600
End If
AddHandler window.Closed, Sub(sender, args)
window.Content = Nothing
If Not popupBrowser.IsDisposed Then
popupBrowser.Dispose()
End If
End Sub
AddHandler popupBrowser.TitleChanged, Sub(sender, e)
Dispatcher?.BeginInvoke(CType(Sub() window.Title = e.Title, Action))
End Sub
AddHandler popupBrowser.Disposed, Sub()
Dispatcher?.Invoke(Sub()
window.Content = Nothing
window.Hide()
window.Close()
End Sub)
End Sub
window.Content = browserView
window.Show()
End Sub
End Class
Avalonia UI
A implementação padrão para Avalonia BrowserView
é a seguinte:
using Avalonia;
using Avalonia.Controls;
using Avalonia.Threading;
using DotNetBrowser.AvaloniaUi;
using DotNetBrowser.Browser;
using DotNetBrowser.Browser.Handlers;
using DotNetBrowser.Geometry;
using DotNetBrowser.Handlers;
namespace Popups
{
public class OpenPopupHandler : IHandler<OpenPopupParameters>
{
public void Handle(OpenPopupParameters parameters)
{
Dispatcher.UIThread.InvokeAsync(() =>
{
ShowPopup(parameters.PopupBrowser,
parameters.Rectangle);
});
}
private void ShowPopup(IBrowser popupBrowser, Rectangle rectangle)
{
BrowserView browserView = new BrowserView();
browserView.InitializeFrom(popupBrowser);
// Set the same popup handler for the popup browser itself.
popupBrowser.OpenPopupHandler = new OpenPopupHandler();
Window window = new Window();
if (!rectangle.IsEmpty)
{
window.Position = new PixelPoint(rectangle.Origin.X, rectangle.Origin.Y);
window.SizeToContent = SizeToContent.WidthAndHeight;
browserView.Width = rectangle.Size.Width;
browserView.Height = rectangle.Size.Height;
}
else
{
window.Width = 800;
window.Height = 600;
}
window.Closed += (sender, args) =>
{
window.Content = null;
if (!popupBrowser.IsDisposed)
{
popupBrowser.Dispose();
}
};
popupBrowser.TitleChanged += (sender, e) =>
{
Dispatcher.UIThread.InvokeAsync(() => window.Title = e.Title);
};
popupBrowser.Disposed += delegate
{
Dispatcher.UIThread.InvokeAsync(() =>
{
window.Content = null;
window.Hide();
window.Close();
});
};
window.Content = browserView;
window.Show();
}
}
}
Fechando pop-ups
A janela pop-up aberta pode ser fechada utilizando o método IBrowser.Dispose()
ou window.close()
do JavaScript. Em ambos os casos, o evento Disposed
é ativado.
Recomendamos que registre sempre o listener do evento Disposed
para receber notificações quando um pop-up é fechado. Isto permitir-lhe-á ocultar a janela de contexto, caso a tenha apresentado.
popupBrowser.Disposed += delegate
{
// Esconde a janela pop-up.
};
AddHandler popupBrowser.Disposed, Sub()
' Esconde a janela pop-up.
End Sub