Uso DotNetBrowser y quiero abrir el enlace en una nueva ventana/winform/pestaña cuando hago clic en el enlace; sin embargo, cuando hacemos clic en cualquier enlace , DotNetBrowser los abre en la ventana actual. Sé que debo anular los eventos de DotNetBrowser , pero no sé qué evento. intente con CreatePopupHandler
y no funciona, tampoco puedo encontrar ningún DotNetBrowser de muestra en ningún lado, espero que puedan ayudarme.
El controlador CreatePopupHandler
se invoca cuando el motor desea saber si se puede crear una ventana emergente o no. Básicamente, puede usarlo para permitir o suprimir la creación de ventanas emergentes en general.
Si el controlador CreatePopupHandler
permite crear una ventana emergente, se invoca el controlador OpenPopupHandler
. En este controlador, puede acceder a la ventana emergente creada y mostrarla si es necesario.
Cuando inicializa un WinForms BrowserView
, configura automáticamente la instancia de IBrowser
dada con la implementación predeterminada de los CreatePopupHandler
y OpenPopupHandler
.
En este caso, hay dos escenarios cuando los enlaces se abren en una nueva ventana (emergente):
window.open()
: window.open("https://www.google.com", "_blank", "resizable=yes, top=500, left=500, width=400, height=400");
target
: <a href="https://www.google.com" target="_blank">Open Google</a>
Para cargar cualquier URL en una ventana o pestaña separada en un intento de navegación (por ejemplo, hacer clic en un enlace), deberá interceptar todas las solicitudes de navegación o las requeridas mediante StartNavigationHandler . En la implementación del controlador, debe crear una nueva ventana o pestaña con el navegador, cargar esta URL en ella y cancelar su carga en el navegador original. Por ejemplo:
browser.Navigation.StartNavigationHandler = new Handler<StartNavigationParameters, StartNavigationResponse>((p) => { // Intercept all navigation requests to the URLs that start // with "https://dotnetbrowser" and load them into a new form if (p.Url.StartsWith("https://dotnetbrowser")) { BeginInvoke((Action)(() => { LoadNewWindow(p.Url); })); return StartNavigationResponse.Ignore(); } return StartNavigationResponse.Start(); }); browser?.Navigation.LoadUrl("https://teamdev.com/dotnetbrowser");
La implementación LoadNewWindow
:
private void LoadNewWindow(string url) { var browser1 = engine.CreateBrowser(); BrowserView browserView = new BrowserView { Dock = DockStyle.Fill }; browserView.InitializeFrom(browser1); Form form = new Form(); form.Width = 800; form.Height = 600; form.Closed += delegate { form.Controls.Clear(); if (!browser1.IsDisposed) { browser1.Dispose(); } }; form.Controls.Add(browserView); form.Show(); browser1.Navigation.LoadUrl(url); }