繁体   English   中英

如何正确初始化 CefSharp web 浏览器

[英]How to properly initialize CefSharp web browser

我在我的项目中使用 CefSharp web 浏览器。 但是当我在两个 WinForms 之间切换时,我得到了这个异常。

System.Exception: 'CEF 每个进程只能初始化一次。 这是底层 CEF/Chromium 框架的限制。 您可以在运行时通过 RequestContext.SetPreference 更改许多(不是全部)设置。 请参阅https://github.com/cefsharp/CefSharp/wiki/General-Usage#request-context-browser-isolation使用 Cef.IsInitialized 来防范此异常。 如果您意外地看到这个,那么您很可能在创建 ChromiumWebBrowser 实例之后调用 Cef.Initialize,它必须在创建第一个实例之前。

这是代码。

public ChromiumWebBrowser browser;


    public void InitBrowser()
    {
        Cef.Initialize(new CefSettings());
        browser = new ChromiumWebBrowser(Settings.Default.SetLink);
        this.GpBrwsr.Controls.Add(browser);
        browser.Dock = DockStyle.Fill;
    }
    public Form3()
    {
    
        InitBrowser();
    }

    private void browser_LoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
    {
        if (e.IsLoading == false)
        {
            browser.ExecuteScriptAsync("alert('All Resources Have Loaded');");
        }
    }

这就是我在 forms 之间切换的方式。

LoginToSettings Login = new LoginToSettings();
Login.Show();
this.Hide();

异常图像

我的问题是如何初始化它,这样我就不会偶然发现这个异常? 我也尝试了“表单最小化”选项而不是“表单隐藏”但仍然是同样的问题。

我已使用此链接来使用 CefSharp 浏览器。 CefSharp 的代码源

对于未来来到这里的人:

如果你确实想调用Cef.Initialize(....); (当然有一些参数,如 CefSettings obj 等。)

您必须在创建new ChromiumWebBrowser()之前调用,因为创建浏览器将使用默认设置初始化Cef,并且您可能会猜测,一旦您再次尝试调用 Initialize,它就会出现错误,因为它只能是初始化一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM