簡體   English   中英

如何在 DotNetBrowser 的新選項卡/窗口/winform 中檢測和打開鏈接

[英]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時,它會使用CreatePopupHandlerOpenPopupHandler處理程序的默認實現自動配置給定的IBrowser實例。

在這種情況下,在新的 window(彈出)中打開鏈接有兩種情況:

  1. window.open() JavaScript function:
window.open("https://www.google.com", "_blank", 
    "resizable=yes, top=500, left=500, width=400, height=400");
  1. 帶有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM