WPF C # Cefsharp Вер. 71, каждая загрузка пользовательского элемента управления создает новый CefSharp.BrowserSubprocess.exe - PullRequest
0 голосов
/ 05 ноября 2019

Пожалуйста, проверьте фрагменты кода ниже, они загружаются каждый раз, когда я перехожу к своему представлению (пользовательский элемент управления), и он создает новый 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)
        {

        }
    }

}
...