CefSharpWrapBrowserBase.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using CefSharp;
  2. using CefSharp.WinForms;
  3. using System;
  4. using System.Windows.Forms;
  5. namespace CefSharpWrap
  6. {
  7. public abstract class CefSharpWrapBrowserBase : IDisposable
  8. {
  9. protected readonly ChromiumWebBrowser Underlying;
  10. public bool IsReady { get; private set; }
  11. public event EventHandler Ready;
  12. protected internal CefSharpWrapBrowserBase(string url)
  13. {
  14. Underlying = new ChromiumWebBrowser(url) { Dock = DockStyle.Fill };
  15. Underlying.LoadingStateChanged += Underlying_LoadingStateChanged;
  16. }
  17. private void Underlying_LoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
  18. {
  19. IsReady = true;
  20. OnReady();
  21. Underlying.LoadingStateChanged -= Underlying_LoadingStateChanged;
  22. }
  23. public void FillToControl(Control to) => to.Controls.Add(Underlying);
  24. public void ShowF12() => Underlying.ShowDevTools();
  25. public void ExecuteJsAsync(string js)
  26. {
  27. if (false == IsReady) return;
  28. if (Underlying.IsLoading) Underlying.ExecuteScriptAsyncWhenPageLoaded(js);
  29. else Underlying.ExecuteScriptAsync(js);
  30. }
  31. public string GetHtml()
  32. {
  33. var task = Underlying.GetBrowser().MainFrame.GetSourceAsync();
  34. task.Wait();
  35. return task.Result;
  36. }
  37. public void ExportAsPdf(string path, CefSharpWrapPdfExportSetting setting)
  38. {
  39. Underlying.PrintToPdfAsync(path, setting.ToCefSharpSetting()).Wait();
  40. }
  41. protected virtual void OnReady()
  42. {
  43. Ready?.Invoke(this, EventArgs.Empty);
  44. }
  45. public void Dispose()
  46. {
  47. if (false == Underlying.IsDisposed) Underlying.Dispose();
  48. }
  49. }
  50. }