Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebForm/WebBrowser中的新窗口2和新窗口3是什么_C#_Webforms_Webbrowser Control_Cefsharp_Shdocvw - Fatal编程技术网

C# WebForm/WebBrowser中的新窗口2和新窗口3是什么

C# WebForm/WebBrowser中的新窗口2和新窗口3是什么,c#,webforms,webbrowser-control,cefsharp,shdocvw,C#,Webforms,Webbrowser Control,Cefsharp,Shdocvw,我正在尝试将我们当前的WebForms应用程序转换为使用ChromimumWebBrowser的CefSharp浏览器。我在当前代码中遇到了以下问题: private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (!newWindow3ListenerAdded) { newWindow3ListenerAdded

我正在尝试将我们当前的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)

我想我可以很容易地将浏览器_NewWindow3()转换成现在的样子(检查targetUrl.Contains(“.pdf”)),但在什么条件下我才能处理浏览器_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;
    }
}

但是如何处理浏览器\u NewWindow2逻辑?

我不熟悉SHDocVw.WebBrowser。您的ILifeSpanHandler.OnBeforePopup实现当前是什么样子的?browser_NewWindow2实现了什么功能?用代码运行你的应用程序,然后用代码注释再次运行,找出行为是什么。在问题中更新了我尝试的内容。你认为browserControl.Load(targetUrl)是正确的吗;正确吗?你的预期行为是什么?是否有理由为PDF创建新窗口?默认行为将已打开一个新窗口。