首页 > 解决方案 > 什么是 WebForm/WebBrowser 中的 NewWindow2 和 NewWindow3

问题描述

我正在尝试将我们当前的 WebForms 应用程序转换为使用 ChromimumWebBrowser 的 CefSharp 浏览器。我在当前代码中遇到了以下内容:

private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
    if (!newWindow3ListenerAdded) {        
        newWindow3ListenerAdded = true;
        SHDocVw.WebBrowser browser = (SHDocVw.WebBrowser)webBrowser.ActiveXInstance;        
        browser.NewWindow3 += Browser_NewWindow3;
        browser.NewWindow2 += browser_NewWindow2;
    }
}

private void browser_NewWindow2(ref object ppDisp, ref bool Cancel)
{
    webform.webBrowser.GoBack();
    ppDisp = webform.webBrowser.ActiveXInstance;
    webform.Show();
}

private void Browser_NewWindow3(ref object ppDisp, ref bool cancel, uint dwFlags, string sourceUrl, string targetUrl) 
{
    cancel = true;
    if (targetUrl.Contains(".pdf")) {
        WebForm webForm = new WebForm();
        webForm.Text = targetUrl;
        webForm.Navigate(targetUrl);
        webForm.Show();
    } else {
        webBrowser.Navigate(targetUrl);
    }
}

有人可以指导我将其转换为 Cef。我知道我必须在 ILifeSpanHandler 中实现 OnBeforePopup()。但是,我究竟该如何编写为不同类型的弹出窗口加载 pdf/GoBack/Navigate(targetUrl) 的逻辑。

我想我可以很容易地转换 Browser_NewWindow3() 的方式(检查 targetUrl.Contains(".pdf"))但是在什么条件下我处理 browser_NewWindow2() 逻辑,即 webBrowser.GoBack(); ?

这是我试过的,

OnBeforePopup() {
newBrowser = null;
    if (targetUrl.Contains(".pdf")) {
       CefForm cefForm = new CefForm();
       cefForm.Text = targetUrl;
       cefForm.Navigate(targetUrl);
       cefForm.Show();
       return false;
    } else {
       browserControl.Load(targetUrl);
       return true;
    }
}

但是我该如何处理 browser_NewWindow2 逻辑呢?

标签: c#webformswebbrowser-controlcefsharpshdocvw

解决方案


推荐阅读