internal BindFunctionsTask(CfrBrowser remoteBrowser, string objName, string[] funcNames, CfrV8Handler v8Handler) { Execute += (s, e) => { var v8Context = remoteBrowser.MainFrame.V8Context; v8Context.Enter(); var cfrV8Value = (CfrV8Value)null; if (!string.IsNullOrEmpty(objName) && !v8Context.Global.HasValue(objName)) { cfrV8Value = CfrV8Value.CreateObject(new CfrV8Accessor()); v8Context.Global.SetValue(objName, cfrV8Value, CfxV8PropertyAttribute.ReadOnly | CfxV8PropertyAttribute.DontDelete); } foreach (var funcName in funcNames) { var function = CfrV8Value.CreateFunction(funcName, v8Handler); if (cfrV8Value != null && !cfrV8Value.HasValue(funcName)) { cfrV8Value.SetValue(funcName, function, CfxV8PropertyAttribute.ReadOnly | CfxV8PropertyAttribute.DontDelete); } else if (!v8Context.Global.HasValue(funcName)) { v8Context.Global.SetValue(funcName, function, CfxV8PropertyAttribute.ReadOnly | CfxV8PropertyAttribute.DontDelete); } } v8Context.Exit(); }; }
private void ChromeFXUIV8Handler_Execute(object sender, Remote.Event.CfrV8HandlerExecuteEventArgs e) { if (e.Name == "GetVersion") { e.SetReturnValue(CfrV8Value.CreateString(System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString())); } }
internal BindFunctionsTask(CfrBrowser remoteBrowser, string objName, string[] funcNames, CfrV8Handler v8Handler) { this.Execute += (s, e) => { var context = remoteBrowser.MainFrame.V8Context; context.Enter(); CfrV8Value obj = null; if (objName != null && objName != "" && !context.Global.HasValue(objName)) { obj = CfrV8Value.CreateObject(new CfrV8Accessor()); context.Global.SetValue(objName, obj, CfxV8PropertyAttribute.DontDelete | CfxV8PropertyAttribute.ReadOnly); //context.Global.DeleteValue(objName); } foreach (string name in funcNames) { // bind CfrV8Value func = CfrV8Value.CreateFunction(name, v8Handler); if (obj != null && !obj.HasValue(name)) { obj.SetValue(name, func, CfxV8PropertyAttribute.DontDelete | CfxV8PropertyAttribute.ReadOnly); } else if (!context.Global.HasValue(name)) { context.Global.SetValue(name, func, CfxV8PropertyAttribute.DontDelete | CfxV8PropertyAttribute.ReadOnly); } } context.Exit(); }; }
public override CfrV8Value OnExtensionExecute(string nativeFunctionName, CfrV8Value[] arguments, CfrV8Value @this, ref string exception) { CfrV8Value retval = null; Console.WriteLine($"[FUNC]:{nativeFunctionName}"); switch (nativeFunctionName) { case nameof(Version): var accessor = new CfrV8Accessor(); var versionObject = CfrV8Value.CreateObject(accessor); versionObject.SetValue("nanui", CfrV8Value.CreateString(Version), CfxV8PropertyAttribute.DontDelete | CfxV8PropertyAttribute.ReadOnly); versionObject.SetValue("cef", CfrV8Value.CreateString(CefVersion), CfxV8PropertyAttribute.DontDelete | CfxV8PropertyAttribute.ReadOnly); versionObject.SetValue("chromium", CfrV8Value.CreateString(ChromiumVersion), CfxV8PropertyAttribute.DontDelete | CfxV8PropertyAttribute.ReadOnly); retval = versionObject; break; } return(retval); }
private void QueryExecute(object sender, CfrV8HandlerExecuteEventArgs e) { try { var qryString = e.Arguments[0].StringValue; var paramObject = ParseParameter(e.Arguments[1]); var counter = 0; using (var connect = GetConnection()) { var reader = connect.Query(qryString, paramObject); var arrObj = CfrV8Value.CreateArray(reader.Count()); foreach (var obj in reader) { var exp_obj = ToExpandoObject(obj); arrObj.SetValue(counter, ConvertValue(exp_obj)); counter++; } e.SetReturnValue(arrObj); } } catch (Exception ex) { e.Exception = ex.Message; e.SetReturnValue(CfrV8Value.CreateUndefined()); } }
public IJavascriptObject CreateObject(ObjectObservability objectObservability) { var readOnly = (int)objectObservability; var id = GetNextId(); return(_ObjectBuilder.Value.ExecuteFunction(null, new[] { CfrV8Value.CreateInt((int)id), CfrV8Value.CreateInt(readOnly) }).ConvertObject(id)); }
public CfrV8Value GetHostWindowState() { var windowStateName = Container.WindowState.ToString().ToLower(); var windowStateCode = (int)Container.WindowState; var clientRect = new RECT(); User32.GetClientRect(ContainerHandle, ref clientRect); var retval = CfrV8Value.CreateObject(new CfrV8Accessor()); var windowState = CfrV8Value.CreateObject(new CfrV8Accessor()); windowState.SetValue("state", CfrV8Value.CreateString(windowStateName), CfxV8PropertyAttribute.ReadOnly | CfxV8PropertyAttribute.DontDelete); windowState.SetValue("code", CfrV8Value.CreateInt(windowStateCode), CfxV8PropertyAttribute.ReadOnly | CfxV8PropertyAttribute.DontDelete); retval.SetValue("windowState", windowState, CfxV8PropertyAttribute.ReadOnly | CfxV8PropertyAttribute.DontDelete); retval.SetValue("clientWidth", CfrV8Value.CreateInt(clientRect.Width), CfxV8PropertyAttribute.ReadOnly | CfxV8PropertyAttribute.DontDelete); retval.SetValue("clientHeight", CfrV8Value.CreateInt(clientRect.Height), CfxV8PropertyAttribute.ReadOnly | CfxV8PropertyAttribute.DontDelete); retval.SetValue("width", CfrV8Value.CreateInt(Container.Width), CfxV8PropertyAttribute.ReadOnly | CfxV8PropertyAttribute.DontDelete); retval.SetValue("height", CfrV8Value.CreateInt(Container.Height), CfxV8PropertyAttribute.ReadOnly | CfxV8PropertyAttribute.DontDelete); return(retval); }
private CfrV8Value CreateV8Value(object value) { if (value is bool) { return(CfrV8Value.CreateBool((bool)value)); } else if (value is DateTime) { return(CfrV8Value.CreateDate(CfrTime.FromUniversalTime((DateTime)value))); } else if (value is double) { return(CfrV8Value.CreateDouble((double)value)); } else if (value is int) { return(CfrV8Value.CreateInt((int)value)); } else if (value is uint) { return(CfrV8Value.CreateUint((uint)value)); } else if (value is string) { return(CfrV8Value.CreateString((string)value)); } else if (value == null) { return(CfrV8Value.CreateUndefined()); } else { throw new ArgumentException($"Type \"{ value.GetType().Name }\" is not supported."); } }
private void SaveDialog(CfrV8Value callback, string Filter) { var oThread = new Thread(() => { var basePath = AppDomain.CurrentDomain.BaseDirectory; var dialog = new SaveFileDialog { Filter = Filter }; if (dialog.ShowDialog() == DialogResult.OK) { originalName = dialog.FileName; retStr = dialog.FileName; } }); oThread.SetApartmentState(ApartmentState.STA); oThread.Start(); var isSafe = oThread.Join(new TimeSpan(2, 0, 0)); var callbackArgs = CfrV8Value.CreateObject(new CfrV8Accessor()); if (isSafe) { oThread.Abort(); } callbackArgs.SetValue("filename", CfrV8Value.CreateString(originalName), CfxV8PropertyAttribute.ReadOnly); callback.ExecuteFunction(null, new CfrV8Value[] { callbackArgs }); }
private void GetCalendar(object sender, CfrV8HandlerExecuteEventArgs e) { using (var context = new HotelContext()) { var year = e.Arguments[0].IntValue; var date_start = new DateTime(year, 1, 1); var date_end = new DateTime(year + 1, 1, 1).AddDays(-1); EventInputObject lastInput = null; var listOut = new List <EventInputObject>(); var calendar = context.RoomCalendars .Include("Kind") .Where(c => c.DateAt >= date_start) .Where(c => c.DateAt <= date_end) .OrderBy(c => c.DateAt) .ToList(); foreach (var item in calendar) { if (lastInput != null) { var dateNext = lastInput.end; var dateDiff = item.DateAt - dateNext; var title = lastInput.title; if (title == item.Kind.KindName && dateDiff.TotalDays == 1) { lastInput.end = item.DateAt; continue; } } lastInput = new EventInputObject { start = item.DateAt, end = item.DateAt, title = item.Kind.KindName, color = "#" + item.Kind.KindColor, }; listOut.Add(lastInput); } foreach (var input in listOut) { var diff = input.end - input.start; if (diff.TotalDays > 0) { input.end = input.end.AddDays(1); } } var callbackArgs = CfrV8Value.CreateObject(new CfrV8Accessor()); var callback = e.Arguments[1]; callbackArgs.SetValue("list", ConvertValue(listOut.ToArray()), CfxV8PropertyAttribute.ReadOnly); callback.ExecuteFunction(null, new CfrV8Value[] { callbackArgs }); } }
public IJavascriptObject CreateArray(IEnumerable <IJavascriptObject> iCollection) { var col = iCollection.ToList(); var res = CfrV8Value.CreateArray(col.Count); col.ForEach((el, i) => res.SetValue(i, el.Convert())); return(UpdateConvert(res)); }
protected override CfrV8Value Function(CfrV8HandlerExecuteEventArgs args, JsBinding binding, HtmlTextureWrapper wrapper) { if (Arguments.Length >= 1 && Arguments[0].IsString) { Selector = Arguments[0].StringValue; } return(CfrV8Value.CreateString(Selector)); }
public void GetFlowPicSize(object func, CfrV8HandlerExecuteEventArgs args) { var jsObjectAccessor = new CfrV8Accessor(); var jsObject = CfrV8Value.CreateObject(jsObjectAccessor); jsObject.SetValue("width", CfrV8Value.CreateInt(GlobDef.sz_image.width), CfxV8PropertyAttribute.ReadOnly); jsObject.SetValue("height", CfrV8Value.CreateInt(GlobDef.sz_image.height), CfxV8PropertyAttribute.ReadOnly); args.SetReturnValue(jsObject); }
public static IJavascriptObject Convert(this CfrV8Value cfrV8Value) { if ((cfrV8Value == null) || (!cfrV8Value.IsObject)) { return(new ChromiumFXJavascriptSimple(cfrV8Value)); } return(new ChromiumFXJavascriptObject(cfrV8Value)); }
internal CfrV8Value GetV8Value(CfrV8Context context) { if (v8Value == null || !Object.ReferenceEquals(v8Context, context)) { v8Context = context; v8Value = CreateV8Value(); } return(v8Value); }
public static IJavascriptObject Convert(this CfrV8Value cfrV8Value) { if ((cfrV8Value == null) || (!cfrV8Value.IsObject)) { return(ConvertBasic(cfrV8Value ?? CfrV8Value.CreateUndefined())); } return(ConvertObject(cfrV8Value)); }
/// <summary> /// Set the return value for the <see cref="CfrV8Handler.Execute"/> render process callback. /// Calling SetReturnValue() more then once per callback or from different event handlers will cause an exception to be thrown. /// </summary> public void SetReturnValue(CfrV8Value returnValue) { if (returnValueSet) { throw new CfxException("The return value has already been set"); } m_returnValue = returnValue; returnValueSet = true; }
private void Bind(CfrV8Handler handler, string functionName) { lock (this) { Functions.Add(handler); var func = CfrV8Value.CreateFunction(functionName, handler); _CfrV8Value.SetValue(functionName, func, CfxV8PropertyAttribute.ReadOnly | CfxV8PropertyAttribute.DontDelete); } }
private void GetConfigFormCSFunc_Execute(object sender, CfrV8HandlerExecuteEventArgs e) { var config = JsonConvert.SerializeObject(CommonUtils.ConfigInstance); var jsObjectAccessor = new CfrV8Accessor(); var jsObject = CfrV8Value.CreateObject(jsObjectAccessor); jsObject.SetValue("config", config, CfxV8PropertyAttribute.DontDelete); e.SetReturnValue(jsObject); }
public IJavascriptObject Invoke(string functionName, IWebView context, params IJavascriptObject[] parameters) { var function = _CfrV8Value.GetValue(functionName); if (function.IsUndefined) { return(CfrV8Value.CreateUndefined().Convert()); } return(function.ExecuteFunctionWithContext(context.Convert().V8Context, _CfrV8Value, parameters.Convert()).Convert()); }
public IEnumerable <IJavascriptObject> CreateBasics(IEnumerable <object> from) { _BasicBulkBuilder.Value.ExecuteFunction(null, new[] { CfrV8Value.CreateString(CreateStringValue(from)), _ObjectCreationCallbackFunction.Value }); var results = _ObjectCallback.GetLastArguments(); return(results.Select(result => result.ConvertBasic())); }
public void Bind(string functionName, IWebView context, Action <string, IJavascriptObject, IJavascriptObject[]> action) { lock (this) { var cfrV8Handler = action.Convert(functionName); Functions.Add(cfrV8Handler); var func = CfrV8Value.CreateFunction(functionName, cfrV8Handler); _CfrV8Value.SetValue(functionName, func, CfxV8PropertyAttribute.ReadOnly | CfxV8PropertyAttribute.DontDelete); } }
private void NewFile(object sender, Chromium.Remote.Event.CfrV8HandlerExecuteEventArgs e) { //新建文档的逻辑与保存文档的逻辑相似,这里就不再阐述 var contents = e.Arguments.FirstOrDefault(p => p.IsString); var result = false; result = MainFrame.NewFile(contents.StringValue); e.SetReturnValue(CfrV8Value.CreateBool(result)); }
void TestDoubleCallback_Execute(object sender, CfrV8HandlerExecuteEventArgs e) { var doubleCallback = e.Arguments[0]; var args = new CfrV8Value[] { "This is the first argument", 123.4567 }; var retval = doubleCallback.ExecuteFunction(null, args); e.SetReturnValue(retval); }
public IEnumerable <IJavascriptObject> CreateArrays(int number) { _ArrayBulkBuilder.Value.ExecuteFunction(null, new[] { CfrV8Value.CreateInt((int)_Count), CfrV8Value.CreateInt(number), _ObjectCreationCallbackFunction.Value }); var results = _ObjectCallback.GetLastArguments(); return(results.Select(result => result.ConvertBasic(_Count++))); }
public Form1() : base("http://tools.greycloud.com/www/new.html") { //加载配置信息 ci = JsonConvert.DeserializeObject <c_info>(info); ct = JsonConvert.DeserializeObject <C_Tools>(tools); InitializeComponent(); //绑定事件 LoadHandler.OnLoadStart += LoadHandler_OnLoadStart; DragHandler.OnDragEnter += DragHandler_OnDragEnter; LoadHandler.OnLoadEnd += LoadHandler_OnLoadEnd; //greyTools_api var greyTools_api = GlobalObject.AddObject("greyTools_api"); var setColor = greyTools_api.AddFunction("setColor"); setColor.Execute += (func, args) => { var stringArgument = args.Arguments.FirstOrDefault(p => p.IsString); if (stringArgument != null) { this.BorderColor = System.Drawing.ColorTranslator.FromHtml(stringArgument.StringValue); } }; //windowsApi var windows_api = GlobalObject.AddObject("windows_api"); var openWeb = windows_api.AddFunction("openWeb"); openWeb.Execute += (func, args) => { var stringArgument = args.Arguments.FirstOrDefault(p => p.IsString); if (stringArgument != null) { System.Diagnostics.Process.Start(stringArgument.StringValue); } }; //Tools管理器 ToolsManager = GlobalObject.AddObject("ToolsManager"); var runTools = ToolsManager.AddFunction("runTools"); runTools.Execute += (func, args) => { var stringArgument = args.Arguments.FirstOrDefault(p => p.IsString); if (stringArgument != null) { bool result = this.runTools(stringArgument.StringValue); args.SetReturnValue(CfrV8Value.CreateBool(result)); } }; }
private static CfrV8Value ClrToV8Value(object clrValue) { var type = clrValue.GetType(); var typeCode = Type.GetTypeCode(type); CfrV8Value value = null; switch (typeCode) { case TypeCode.Boolean: value = CfrV8Value.CreateBool((bool)clrValue); break; case TypeCode.Int16: case TypeCode.Int32: case TypeCode.Int64: value = CfrV8Value.CreateInt((int)clrValue); break; case TypeCode.SByte: case TypeCode.Byte: case TypeCode.UInt16: case TypeCode.UInt32: case TypeCode.UInt64: value = CfrV8Value.CreateUint((uint)clrValue); break; case TypeCode.Single: case TypeCode.Double: value = CfrV8Value.CreateDouble((double)clrValue); break; case TypeCode.Decimal: value = CfrV8Value.CreateDouble((double)Convert.ChangeType(clrValue, TypeCode.Double)); break; case TypeCode.DateTime: value = CfrV8Value.CreateDate(CfrTime.FromUniversalTime((DateTime)clrValue)); break; case TypeCode.Char: case TypeCode.String: value = CfrV8Value.CreateString((string)clrValue); break; } return(value); }
private IJavascriptObject UpdateConvert(CfrV8Value value) { if (value == null) { return(null); } value.SetValue("_MappedId", CfrV8Value.CreateUint(_Count++), CfxV8PropertyAttribute.DontDelete | CfxV8PropertyAttribute.DontEnum | CfxV8PropertyAttribute.ReadOnly); return(value.Convert()); }
public IJavascriptObject CreateObject(bool iLocal) { var rawResult = CfrV8Value.CreateObject(null); if (iLocal) { return(UpdateConvert(rawResult)); } _CfrV8Context.Global.SetValue($"__ChromiumFX_Object_{_GlobalCount++}__", rawResult, CfxV8PropertyAttribute.DontDelete | CfxV8PropertyAttribute.ReadOnly); return(UpdateConvert(rawResult)); }
private void JsCodeEditorObject_ExecuteOpen(object sender, Chromium.Remote.Event.CfrV8HandlerExecuteEventArgs e) { var result = parentForm.OpenFile(); if (result != null) { e.SetReturnValue(CfrV8Value.CreateString(result)); } else { e.SetReturnValue(CfrV8Value.CreateNull()); } }