ChromiumWebBrowser 为什么打开空白表单?

ChromiumWebBrowser opens blank form why?

提问人:Furkan Ergut 提问时间:4/16/2022 更新时间:4/17/2022 访问量:325

问:

我创建了一个项目,并在其中添加了来自 nuget 的 CefSharp.WinForms。

我给了一个地址,然后 ChromiumWebBrowser 打开了它。当我在这个地址周围导航时,我点击了一个下载链接。没问题,文件已下载。但随之而来的是一个空表单。

这个空表单是什么,为什么会打开它,我怎样才能从代码中关闭它?

空白表格附带链接

C# Web浏览器控件 Chromium Cefsharp

评论


答:

0赞 amaitland 4/17/2022 #1

如果您单击的链接打开了一个弹出窗口,则预计会出现一个空白窗口。您可以隐藏窗口,直到下载完成,然后将其关闭。以下代码将所有文件保存到临时文件夹。您可以将文件夹更改为用户配置文件中的路径,或者代替 UseFolder 调用 AskUser。

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool IsWindowVisible(IntPtr hWnd);

[DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

var tempPath = System.IO.Path.GetTempPath();

browser.DownloadHandler =
    Fluent.DownloadHandler.UseFolder(tempPath,
        (chromiumBrowser, browser, downloadItem, callback) =>
        {
            if (downloadItem.IsComplete || downloadItem.IsCancelled)
            {
                if (browser.IsPopup && !browser.HasDocument)
                {
                    browser.GetHost().CloseBrowser(true);
                }
            }
            //TODO: You may wish to customise this condition to better suite your
            //requirements. 
            else if(downloadItem.ReceivedBytes < 100)
            {
                var popupHwnd = browser.GetHost().GetWindowHandle();

                var visible = IsWindowVisible(popupHwnd);
                if(visible)
                {
                    const int SW_HIDE = 0;
                    ShowWindow(popupHwnd, SW_HIDE);
                }
            }
        });

评论