[英]how to detect and open link in new tab/window/winform in DotNetBrowser
我使用DotNetBrowser並希望在單擊鏈接時在新窗口/winform/選項卡中打開鏈接但是當我們單擊任何鏈接時DotNetBrowser在當前 window 中打開它們我知道我應該覆蓋DotNetBrowser事件但是我不知道哪個事件,另外我嘗試使用CreatePopupHandler
並不起作用,我也無法在任何地方找到任何示例DotNetBrowser希望你們能幫助我。
當引擎想知道是否可以創建彈出窗口時, 會調用CreatePopupHandler
處理程序。 基本上,您通常可以使用它來允許或禁止創建彈出窗口。
如果CreatePopupHandler
處理程序允許創建彈出窗口,則調用OpenPopupHandler
處理程序。 在此處理程序中,您可以訪問創建的彈出窗口並在必要時顯示它。
當您初始化 WinForms BrowserView
時,它會使用CreatePopupHandler
和OpenPopupHandler
處理程序的默認實現自動配置給定的IBrowser
實例。
在這種情況下,在新的 window(彈出)中打開鏈接有兩種情況:
window.open()
JavaScript function: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>
要將任何 URL 加載到單獨的 window 或導航嘗試(例如單擊鏈接)的選項卡中,您將需要使用StartNavigationHandler攔截所有或所需的導航請求。 在處理程序實現中,您需要創建一個新的 window 或瀏覽器選項卡,將這個 URL 加載到其中,並在原始瀏覽器中取消其加載。 例如:
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");
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.