init lserp cs 5.0
This commit is contained in:
@@ -0,0 +1,189 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user