示例#1
0
            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();
                };
            }
示例#4
0
        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);
        }
示例#5
0
        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());
            }
        }
示例#6
0
        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));
        }
示例#7
0
        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);
        }
示例#8
0
 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.");
     }
 }
示例#9
0
        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 });
        }
示例#10
0
        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 });
            }
        }
示例#11
0
        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));
        }
示例#12
0
 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));
 }
示例#13
0
        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));
        }
示例#15
0
 internal CfrV8Value GetV8Value(CfrV8Context context)
 {
     if (v8Value == null || !Object.ReferenceEquals(v8Context, context))
     {
         v8Context = context;
         v8Value   = CreateV8Value();
     }
     return(v8Value);
 }
示例#16
0
        public static IJavascriptObject Convert(this CfrV8Value cfrV8Value)
        {
            if ((cfrV8Value == null) || (!cfrV8Value.IsObject))
            {
                return(ConvertBasic(cfrV8Value ?? CfrV8Value.CreateUndefined()));
            }

            return(ConvertObject(cfrV8Value));
        }
示例#17
0
 /// <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);
     }
 }
示例#19
0
        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);
        }
示例#20
0
        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());
        }
示例#21
0
        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()));
        }
示例#22
0
 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);
     }
 }
示例#23
0
        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));
        }
示例#24
0
        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);
        }
示例#25
0
        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++)));
        }
示例#26
0
        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));
                }
            };
        }
示例#27
0
        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);
        }
示例#28
0
        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());
        }
示例#29
0
        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));
        }
示例#30
0
        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());
            }
        }