using CefSharp;
|
using CefSharp.WinForms;
|
using TProduct.Model;
|
using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Data;
|
using System.Drawing;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using System.Windows.Forms;
|
|
namespace TProduct.WinFrmUI
|
{
|
public partial class WebBrowserPage : UserControl
|
{
|
public WebBrowserPage()
|
{
|
InitializeComponent();
|
}
|
|
|
public CollapsableChromiumWebBrowser _chromiumWebBrowser = null; //浏览器控件
|
protected TProduct.Model.IWebBrowserEvents _browserEvents;//浏览器事件
|
|
/// <summary>
|
/// 初始化
|
/// </summary>
|
/// <param name="url"></param>
|
public void InitialWebBrower(string url, bool isEnabledJs = true)
|
{
|
if (isEnabledJs)
|
if (!System.IO.File.Exists(url))
|
{
|
MessageBox.Show(string.Format("{0} 文件丢失!", url));
|
return;
|
}
|
WebBrowserManager.Initialize();
|
|
if (_chromiumWebBrowser != null)
|
{
|
//_chromiumWebBrowser.FrameLoadEnd -= Browser_FrameLoadEnd;
|
}
|
|
this.Controls.Clear();
|
_chromiumWebBrowser = new CollapsableChromiumWebBrowser();
|
_chromiumWebBrowser.Dock= DockStyle.Fill;
|
_chromiumWebBrowser.Margin = new Padding(0);
|
_chromiumWebBrowser.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;
|
if (isEnabledJs)
|
{
|
_chromiumWebBrowser.JavascriptObjectRepository.Register("callbackObj", _browserEvents, false, BindingOptions.DefaultBinder);
|
}
|
_chromiumWebBrowser.LoadUrl(url);
|
|
this.Controls.Add(_chromiumWebBrowser);
|
|
|
|
}
|
|
|
//private async void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
|
//{
|
// //CookieVisitor.Html = await _chromiumWebBrowser.GetSourceAsync();
|
// //CookieVisitor visitor = new CookieVisitor();
|
// //visitor.Action += obj =>
|
// //{
|
// // (string html, string cookies) = ((string, string))obj;
|
// //};
|
// //Cef.GetGlobalCookieManager().VisitAllCookies(visitor);
|
//}
|
|
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="script"></param>
|
/// <param name="timeout"></param>
|
/// <returns></returns>
|
public async Task<WebBrowserResponse> EvaluateScriptAsync(string script, TimeSpan? timeout = null)
|
{
|
if (_chromiumWebBrowser.IsDisposed)
|
return default;
|
var task = _chromiumWebBrowser.EvaluateScriptAsync(script, timeout);
|
await task;
|
return task.Result.ToBrowserResponse();
|
}
|
public async Task<WebBrowserResponse> EvaluateScriptAsync(TimeSpan? timeout, string methodName, params object[] args)
|
{
|
if (_chromiumWebBrowser.IsDisposed)
|
return default;
|
var task = _chromiumWebBrowser.EvaluateScriptAsync(timeout, methodName, args);
|
await task;
|
return task.Result.ToBrowserResponse();
|
}
|
public async Task<WebBrowserResponse> EvaluateScriptAsync(string methodName, params object[] args)
|
{
|
if (_chromiumWebBrowser.IsDisposed)
|
return default;
|
var task = _chromiumWebBrowser.EvaluateScriptAsync(methodName, args);
|
await task;
|
return task.Result.ToBrowserResponse();
|
}
|
|
|
/// <summary>
|
/// 执行js
|
/// </summary>
|
/// <param name="script">要执行的js代码</param>
|
public void ExecuteScriptAsync(string script)
|
{
|
if (_chromiumWebBrowser.IsDisposed)
|
return;
|
_chromiumWebBrowser.ExecuteScriptAsync(script);
|
}
|
|
/// <summary>
|
/// 执行js
|
/// </summary>
|
/// <param name="methodName">执行的方法名</param>
|
/// <param name="args"></param>
|
public void ExecuteScriptAsync(string methodName, params object[] args)
|
{
|
if (_chromiumWebBrowser.IsDisposed)
|
return;
|
_chromiumWebBrowser.ExecuteScriptAsync(methodName, args);
|
}
|
|
public new void Disposed()
|
{
|
if (_chromiumWebBrowser != null)
|
{
|
this.Controls.Clear();
|
_chromiumWebBrowser.Dispose();
|
}
|
}
|
|
public new bool IsDisposed()
|
{
|
return _chromiumWebBrowser.IsDisposed;
|
}
|
}
|
}
|