using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Windows.Forms; using Lskj.Control.Model; using Lskj.Model; using Lskj.Business.Impl; using Lskj.Util; using System.Web; using Lskj.Business; using Lskj.Control; using Xilium.CefGlue; using Lskj.Control.BrowserSetting; using System.Net; using System.Collections; using System.Linq; using Lskj.Web.Core.Util; namespace Lskj.Control { public partial class FrmWebBrowser : UserControl { public DynamicPubBrowerModel PubBrowerModel; public CefBrowser cefBrowserSettings; public FrmWebBrowser() { InitializeComponent(); } void Form1_FormClosed(object sender, FormClosedEventArgs e) { //CefRuntime.Shutdown(); } public void FrmLoad(string url, int RightKeyFlag = 0, bool enUrl = true) { var cefWindowInfo = CefWindowInfo.Create(); cefWindowInfo.SetAsChild(this.Handle, new CefRectangle(0, 0, this.Width, this.Height)); var bsClient = new BsClient(RightKeyFlag); bsClient.frmWebBrowser = this; bsClient.OnCreated += bsClient_OnCreated; var cefBrowserSettings = new CefBrowserSettings(); //Url = "https://ie.icoa.cn/"; if (enUrl) { url = ToEnUrl(url); } CefBrowserHost.CreateBrowser(cefWindowInfo, bsClient, cefBrowserSettings, url); //清除所有Cookie var cookieManager = CefCookieManager.GetGlobal(null); cookieManager.DeleteCookies("", "", null); } private void bsClient_OnCreated(object sender, EventArgs e) { cefBrowserSettings = (CefBrowser)sender; var handle = cefBrowserSettings.GetHost().GetWindowHandle(); ResizeWindow(handle, this.Width, this.Height); } protected override void OnResize(EventArgs e) { base.OnResize(e); if (cefBrowserSettings != null) { ResizeWindow(cefBrowserSettings.GetHost().GetWindowHandle(), Width, Height); } } public void ResizeWindow(IntPtr handle, int width, int height) { NativeMethod.SetWindowPos(handle, IntPtr.Zero, 0, 0, width, height, 0x0002 | 0x0004 ); } public void LoadUrl(string url, bool enUrl = true) { if (cefBrowserSettings != null) { if (enUrl) { url = ToEnUrl(url); } cefBrowserSettings.GetMainFrame().LoadUrl(url); } else { if (enUrl) { url = ToEnUrl(url); } FrmLoad(url); } } public void LoadRequest(string url, string dataStr) { BrowserSetting.HttpTools.setting("application/x-www-form-urlencoded", null, null); Dictionary dataDic = new Dictionary(); dataDic.Add("billCode", dataStr); HttpWebResponse webResponse = BrowserSetting.HttpTools.Post(url, "", dataDic, null, HttpTools.Method.POST); if (webResponse != null) { cefBrowserSettings.GetMainFrame().LoadUrl(webResponse.ResponseUri.AbsoluteUri); } } public static string ToEnUrl(string url) { string[] urlParams = url.Split('?'); string enKey = "encrypt", enVal = ""; bool hasEn = false; if (urlParams.Length > 1) { string[] queryParams = string.Join("?", urlParams.Skip(1)).Split('&'); List qpLS = new List(); Hashtable pms = new Hashtable(); hasEn = queryParams.Any(str => str.Trim().StartsWith(enKey, StringComparison.OrdinalIgnoreCase)); foreach (string q in queryParams) { string[] eqParams = q.Split('='); if (eqParams.Length > 1) { if (hasEn && eqParams[0].ToLower() == enKey) { enVal = string.Join("=", eqParams.Skip(1)); continue; } if (hasEn || eqParams[0].ToLower() == "username" || eqParams[0].ToLower() == "password") { pms.Add(eqParams[0], string.Join("=", eqParams.Skip(1))); } else { //string val = HttpUtility.UrlEncode(HttpUtility.UrlDecode(string.Join("=", eqParams.Skip(1)))); //val = val.Replace("+", "%20") // .Replace("%5c", "/") // .Replace("%5C", "/") // .Replace("%2f", "/") // .Replace("%2F", "/") // .Replace("//", "/"); //qpLS.Add(string.Format("{0}={1}", eqParams[0], val)); qpLS.Add(string.Format("{0}={1}", eqParams[0], HttpUtility.UrlEncode(HttpUtility.UrlDecode(string.Join("=", eqParams.Skip(1)))).Replace("%5c", "/").Replace("%2f", "/").Replace("//", "/").Replace("+", "%20"))); } } else { } } if (pms.Count > 0) { DateTime dateTime = DateTime.Now.AddDays(1); DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); long timestamp = (dateTime.Ticks - epoch.Ticks) / TimeSpan.TicksPerSecond; pms.Add("exp", timestamp); } if(url.Contains("pms=")) return $"{urlParams[0]}?{HttpUtility.UrlEncode(hasEn ? Lskj.Web.Core.Util.safety.AESUtil.Encrypt(JSON.Encode(pms), enVal) : Lskj.Web.Core.Util.safety.AESUtil.MobileEncrypt(JSON.Encode(pms)))}&{qpLS.SJoin("&")}"; return $"{urlParams[0]}?pms={HttpUtility.UrlEncode(hasEn ? Lskj.Web.Core.Util.safety.AESUtil.Encrypt(JSON.Encode(pms), enVal) : Lskj.Web.Core.Util.safety.AESUtil.MobileEncrypt(JSON.Encode(pms)))}&{qpLS.SJoin("&")}"; } return url; } } }