请检查下面的代码段,每次我导航到我的视图(用户控件)时都会加载此代码段,它在每次加载时创建新的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)
{
}
}
}