Files
lserp_cs_6.0/插件库/Lskj.Control/FrmWebBrowser.cs
T
tdx d3587a16f1 chore(browser): sync current working implementation
Rollback tag: pre-current-browser-sync-20260818
2026-08-18 14:30:23 +08:00

170 lines
6.7 KiB
C#

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<string, string> dataDic = new Dictionary<string, string>();
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<string> qpLS = new List<string>();
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;
}
}
}