WPF C#Cefsharp版本71,每次用户控件加载都会创建新的CefSharp.BrowserSubprocess.exe

请检查下面的代码段,每次我导航到我的视图(用户控件)时都会加载此代码段,它在每次加载时创建新的CefSharp.BrowserProcess.exe并呈现上一次访问的URL。 问题在于它不维护站点(URL)的会话存储,并且由于数据丢失而导致加载不正确。

viewModel(主)代码:

private void OnLoad()
    {
        IsBusy = true;
        try
        {
            if (string.IsnullOrEmpty(TieAddress))
            {
                TieAddress = _serviceJournalsBaseSettings.GetTieUrl();
            }

            var cookieManager = Cef.GetGlobalCookieManager();
            Cookie cookie = new Cookie
            {
                Name = BaseSettings.GetTieCookieName(),Value = BaseSettings.GetTieCookie()
            };
            cookieManager.SetCookie(BaseSettings.GetTieCookieUrl(),cookie);

        }
        catch (Exception ex)
        {
            ShowErrorNotification(ex.Message);
        }
        finally
        {
            IsBusy = false;
        }
    }

查看(用户控制)代码:

 <wpf:ChromiumWebBrowser 
 Grid.Row="1" Grid.ColumnSpan="2" 
 x:Name="BrowserTieView"

                            Address="{Binding TieAddress,Mode=TwoWay}"
                            Title="Browser Tie View"
                            AllowDrop="True"/>

View.Xaml.cs

public partial class ServiceJournalsView : UserControl
{
    public ServiceJournalsView()
    {
        InitializeComponent();
        BrowserTieView.DownloadHandler = new DownloadHandler();
        BrowserTieView.BrowserSettings = new BrowserSettings()
        {
            ApplicationCache = CefState.Enabled,FileaccessFromFileUrls = CefState.Enabled,Javascript = CefState.Enabled,LocalStorage = CefState.Enabled,WebSecurity = CefState.Disabled,JavascriptCloseWindows = CefState.Enabled,JavascriptDomPaste = CefState.Enabled,};

        BrowserTieView.LoadError += (sender,args) =>
        {
            // Don't display an error for downloaded files.
            if (args.ErrorCode == CefErrorCode.Aborted)
            {
                return;
            }


            // Display a load error message.
            var errorBody = string.Format(
                "<html><body bgcolor=\"white\"><h2>Failed to load URL {0} with error {1} ({2}).</h2></body></html>",args.FailedUrl,args.ErrorText,args.ErrorCode);

            args.Frame.LoadHtml(errorBody,base64Encode: true);
        };
        Unloaded += async delegate (object sender,RoutedEventArgs args)
        {
            BrowserTieView.WebBrowser.Dispose();
            BrowserTieView.Dispose();
            await Task.Delay(10);
        };


    }

    public ServiceJournalsViewModel VMServiceJournalsViewModel
    {
        get => (ServiceJournalsViewModel) DataContext;
        set { DataContext = value; }
    }

    private void UserControl_Loaded(object sender,RoutedEventArgs e)
    {
        try
        {
            BrowserTieView.RegisterJsObject("serviceJournalsJsModel",VMServiceJournalsViewModel.ServiceJournalsJsModel);
        }
        catch (Exception ex)
        {

        }
    }

}
lk2009xx 回答:WPF C#Cefsharp版本71,每次用户控件加载都会创建新的CefSharp.BrowserSubprocess.exe

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3159498.html

大家都在问