Files
lserp_cs_5.0/插件库/cwber/common/RenderProcessHandler.cs
T
2026-07-10 15:25:05 +08:00

190 lines
7.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cef3;
namespace Sashulin.common
{
class RenderProcessHandler : CefRenderProcessHandler
{
private ChromeWebBrowser webBrowser;
protected override bool OnProcessMessageReceived(CefBrowser browser, CefProcessId sourceProcess, CefProcessMessage message)
{
string[] items = message.Name.Split(new char[] {'|'} );
if (items.Length == 0) return false;
switch (items[0])
{
case "GetElementValue":
{
string elementID = items[1];
long[] frameIDs = browser.GetFrameIdentifiers();
foreach (long frameID in frameIDs)
{
CefFrame frame = browser.GetFrame(frameID);
if (frame == null) continue;
frame.VisitDom(new CwbDOMVisitor(browser, CwbBusinStyle.bsGetElementValue, elementID));
}
browser.GetMainFrame().VisitDom(new CwbDOMVisitor(browser, CwbBusinStyle.bsGetElementValue, elementID));
return true;
}
case "SetElementValue":
{
string elementID = items[1];
string elementValue = items[2];
long[] frameIDs = browser.GetFrameIdentifiers();
foreach (long frameID in frameIDs)
{
CefFrame frame = browser.GetFrame(frameID);
if (frame == null) continue;
frame.VisitDom(new CwbDOMVisitor(browser, CwbBusinStyle.bsGetElementValue, elementID, elementValue));
}
browser.GetMainFrame().VisitDom(new CwbDOMVisitor(browser, CwbBusinStyle.bsSetElementValue, elementID, elementValue));
return true;
}
case "EvaluateScript":
{
CefV8Value value = CefV8Value.CreateString("t");
CefV8Exception exp;
browser.GetMainFrame().V8Context.TryEval(items[1], out value, out exp);
Global.JsEvaResult = null;
if (value.IsString)
{
Global.JsEvaResult = value.GetStringValue();
}
if (value.IsInt)
{
Global.JsEvaResult = value.GetIntValue();
}
if (value.IsDouble)
{
Global.JsEvaResult = value.GetDoubleValue();
}
if (value.IsBool)
{
Global.JsEvaResult = value.GetBoolValue();
}
if (value.IsDate)
{
Global.JsEvaResult = value.GetDateValue();
}
Global.flag = true;
return true;
}
case "AppendListener":
{
CwbBusinStyle cbStyle = CwbBusinStyle.bsAddElementEvent;
if (items.Length > 2)
cbStyle = CwbBusinStyle.bsAttachElementEvent;
string elementID = items[1];
long[] frameIDs = browser.GetFrameIdentifiers();
foreach (long frameID in frameIDs)
{
CefFrame frame = browser.GetFrame(frameID);
if (frame == null) continue;
frame.VisitDom(new CwbDOMVisitor(browser, cbStyle, webBrowser.getEventListener(elementID)));
}
browser.GetMainFrame().VisitDom(new CwbDOMVisitor(browser, cbStyle, webBrowser.getEventListener(elementID)));
return true;
}
case "GetDocument":
{
browser.GetMainFrame().VisitDom(new CwbDOMVisitor(browser, CwbBusinStyle.bsVisitDocument, ""));
return true;
}
}
return false;
}
protected override void OnContextCreated(CefBrowser browser, CefFrame frame, CefV8Context context)
{
/*缓存数据库*/
string extensionCode =
"var cachedb;" +
"if(!cachedb)" +
" cachedb={};" +
"(function() {" +
" cachedb.Connect = function(dbName) {" +
" native function Connect(dbName);" +
" return Connect(dbName);" +
" };" +
" cachedb.Execute = function(commandText) {" +
" native function Execute(commandText);" +
" return Execute(commandText);" +
" };" +
" cachedb.Query = function(commandText) {" +
" native function Query(commandText);" +
" return Query(commandText);" +
" };" +
" cachedb.Close = function() {" +
" native function Close();" +
" return Close();" +
" };"+
"})();";
CefV8Handler ExtendsionHandler = new CwbJsExtendHandler(browser);
CefRuntime.RegisterExtension("v8/cachedb", extensionCode, ExtendsionHandler);
/*屏幕分辨率设置*/
int w = webBrowser.screenWidth;
int h = webBrowser.screenHeight;
if (w > 0 && h > 0)
{
string jscode =
"Object.defineProperty(window.screen, 'height', {" +
" get: function() {"+
" return "+h+";"+
" }"+
"});"+
"Object.defineProperty(window.screen, 'width', {"+
" get: function() {"+
" return "+w+";"+
" }"+
"});";
frame.ExecuteJavaScript(jscode,frame.Url,0);
}
/*注册执行C#方法*/
CefV8Value globalValue = context.GetGlobal();
CefV8Handler callHandler = new CwbJsExtendHandler(browser);
CefV8Value callMethod = CefV8Value.CreateFunction("CallCSharpMethod", callHandler);
globalValue.SetValue("CallCSharpMethod", callMethod, CefV8PropertyAttribute.None);
callHandler = new CwbJsExtendHandler(browser);
callMethod = CefV8Value.CreateFunction("PageFinished", callHandler);
globalValue.SetValue("PageFinished", callMethod, CefV8PropertyAttribute.None);
base.OnContextCreated(browser, frame, context);
}
protected override CefLoadHandler GetLoadHandler()
{
return base.GetLoadHandler();
}
protected override void OnWebKitInitialized()
{
base.OnWebKitInitialized();
}
protected override void OnBrowserCreated(CefBrowser browser)
{
base.OnBrowserCreated(browser);
}
protected override bool OnBeforeNavigation(CefBrowser browser, CefFrame frame, CefRequest request, CefNavigationType navigation_type, bool isRedirect)
{
return base.OnBeforeNavigation(browser, frame, request, navigation_type, isRedirect);
}
public void SetBrowserControl(ChromeWebBrowser browser)
{
webBrowser = browser;
}
}
}