什么是 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 逻辑?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)