tx
2025-04-09 fa7510e1ed63df0366787fa4ed1b3db6426d2b46
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
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;
        }
    }
}