WinBrowser.xaml.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. using System;
  2. using System.Windows;
  3. using System.Windows.Input;
  4. using System.Windows.Interop;
  5. using CefSharp;
  6. using CefSharp.Wpf;
  7. using CEFSharpWPF;
  8. namespace CEFSharpWpf
  9. {
  10. /// <summary>
  11. /// Interaction logic for MainWindow.xaml
  12. /// </summary>
  13. public partial class WinBrowser
  14. {
  15. private static WinBrowser instance;
  16. public static WinBrowser Instance
  17. {
  18. get
  19. {
  20. if (instance == null||instance.IsDisposed())
  21. {
  22. //OneTimeLoad.Init();
  23. SetBrowserEnvironment.SetEnvironment();
  24. instance = new WinBrowser();
  25. }
  26. return instance;
  27. }
  28. }
  29. private WinBrowser()
  30. {
  31. InitializeComponent();
  32. this.Closing += WinBrowser_Closing;
  33. browser.DownloadHandler = new DownloadHandler();
  34. browser.LifeSpanHandler = new OpenPageSelf();
  35. this.CommandBindings.Add(new CommandBinding(ApplicationCommands.Copy, (s, e) =>
  36. {
  37. Clipboard.SetDataObject(URL??string.Empty, false);
  38. }));
  39. }
  40. private void WinBrowser_Closing(object sender, System.ComponentModel.CancelEventArgs e)
  41. {
  42. this.Visibility = Visibility.Collapsed;
  43. e.Cancel = true;
  44. }
  45. /// <summary>
  46. /// 重新加载页面
  47. /// </summary>
  48. /// <param name="url"></param>
  49. private void ReloadUrl(string url)
  50. {
  51. if (browser.IsBrowserInitialized)
  52. {
  53. //browser.Address = url;
  54. browser.Load(url);
  55. //资产详情第一次点不刷新,第二次点才刷新。load两次可以刷新
  56. browser.Load(url);
  57. //browser.Reload(false);
  58. }
  59. }
  60. /// <summary>
  61. /// 强制刷新
  62. /// </summary>
  63. public void Refresh()
  64. {
  65. if (browser.IsBrowserInitialized)
  66. {
  67. browser.Address = URL;
  68. browser.Load(URL);
  69. //browser.Reload(false);
  70. }
  71. }
  72. private int num = 0;
  73. private string URL = "";
  74. public void Show(string url, string title = "")
  75. {
  76. //url = "http://www.baidu.com";
  77. URL = url;
  78. this.Title = title;
  79. if (this.Visibility != Visibility.Visible)
  80. {
  81. base.Show();
  82. }
  83. this.Activate();
  84. ReloadUrl(url);
  85. }
  86. private void Browser_OnIsBrowserInitializedChanged(object sender, DependencyPropertyChangedEventArgs e)
  87. {
  88. if (browser.IsBrowserInitialized)
  89. {
  90. browser.Load(URL);
  91. }
  92. }
  93. }
  94. /// <summary>
  95. /// 下载文件
  96. /// </summary>
  97. public class DownloadHandler : IDownloadHandler
  98. {
  99. public void OnBeforeDownload(IBrowser browser, DownloadItem downloadItem, IBeforeDownloadCallback callback)
  100. {
  101. if (!callback.IsDisposed)
  102. {
  103. using (callback)
  104. {
  105. callback.Continue(@"C:\Users\" +
  106. System.Security.Principal.WindowsIdentity.GetCurrent().Name +
  107. @"\Downloads\" +
  108. downloadItem.SuggestedFileName,
  109. showDialog: true);
  110. }
  111. }
  112. }
  113. public void OnDownloadUpdated(IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback)
  114. {
  115. // return false;
  116. }
  117. public bool OnDownloadUpdated(CefSharp.DownloadItem downloadItem)
  118. {
  119. return false;
  120. }
  121. }
  122. /// <summary>
  123. /// 在自己窗口打开链接
  124. /// </summary>
  125. internal class OpenPageSelf : ILifeSpanHandler
  126. {
  127. public bool DoClose(IWebBrowser browserControl, IBrowser browser)
  128. {
  129. return true;
  130. }
  131. public void OnAfterCreated(IWebBrowser browserControl, IBrowser browser)
  132. {
  133. }
  134. public void OnBeforeClose(IWebBrowser browserControl, IBrowser browser)
  135. {
  136. }
  137. public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl,
  138. string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures,
  139. IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
  140. {
  141. newBrowser = null;
  142. var chromiumWebBrowser = (ChromiumWebBrowser)browserControl;
  143. chromiumWebBrowser.Load(targetUrl);
  144. return true; //Return true to cancel the popup creation copyright by codebye.com.
  145. }
  146. }
  147. }