コード例 #1
0
        public static object GetValue(this CefV8Value val)
        {
            if (val.IsNull || val.IsUndefined)
            {
                return(null);
            }

            if (val.IsArray)
            {
                return(new V8Array(val));
            }
            if (val.IsBool)
            {
                return(val.GetBoolValue());
            }
            if (val.IsDouble)
            {
                return(val.GetDoubleValue());
            }
            if (val.IsInt)
            {
                return(val.GetIntValue());
            }
            if (val.IsString)
            {
                return(val.GetStringValue());
            }
            if (val.IsUInt)
            {
                return(val.GetUIntValue());
            }

            return(null);
        }
コード例 #2
0
        public bool GetSimpleValue(IJavascriptObject ijsvalue, out object res, Type iTargetType = null)
        {
            res = null;
            CefV8Value value = CefV8_JavascriptObject.Convert(ijsvalue);

            if ((value.IsUndefined) || (value.IsNull))
            {
                return(true);
            }

            if (value.IsString)
            {
                res = ijsvalue.GetStringValue();
                return(true);
            }

            if (value.IsBool)
            {
                res = value.GetBoolValue();
                return(true);
            }

            if (IsUnsigned(iTargetType))
            {
                if (value.IsUInt)
                {
                    res = value.GetUIntValue();
                }
            }
            else
            {
                if (value.IsInt)
                {
                    res = value.GetIntValue();
                }
            }

            if ((res == null) && (value.IsDouble))
            {
                res = value.GetDoubleValue();
            }

            if (res != null)
            {
                if (iTargetType != null)
                {
                    res = Convert.ChangeType(res, iTargetType);
                }

                return(true);
            }

            if (value.IsDate)
            {
                res = value.GetDateValue();
                return(true);
            }

            return(false);
        }
コード例 #3
0
 public dynamic ConvertToV8Value(CefV8Value result)
 {
     if (result != null)
     {
         if (result.IsBool)
         {
             return(result.GetBoolValue());
         }
         else if (result.IsDate)
         {
             return(result.GetDateValue());
         }
         else if (result.IsDouble)
         {
             return(result.GetDoubleValue());
         }
         else if (result.IsInt)
         {
             return(result.GetIntValue());
         }
         else if (result.IsNull || result.IsUndefined)
         {
             return(null);
         }
         else if (result.IsString)
         {
             return(result.GetStringValue());
         }
         else if (result.IsUInt)
         {
             return(result.GetUIntValue());
         }
         else if (result.IsArray)
         {
             var values = new List <dynamic>();
             for (int i = 0; i < result.GetArrayLength(); i++)
             {
                 var value = result.GetValue(i);
                 values.Add(ConvertToV8Value(value));
             }
             return(values);
         }
         else if (result.IsFunction)
         {
         }
         else if (result.IsObject)
         {
         }
     }
     return(null);
 }
コード例 #4
0
        public static object GetClrValue(CefV8Value v)
        {
            if (v.IsArray)
            {
                int      length = v.GetArrayLength();
                object[] objs   = new object[length];
                for (int i = 0; i < length; i++)
                {
                    var value = v.GetValue(i);
                    objs[i] = GetClrValue(value);
                }
                return(objs);
            }

            if (v.IsBool)
            {
                return(v.GetBoolValue());
            }

            if (v.IsDate)
            {
                return(v.GetDateValue());
            }
            if (v.IsInt)
            {
                return(v.GetIntValue());
            }

            if (v.IsDouble)
            {
                return(v.GetDoubleValue());
            }

            if (v.IsFunction)
            {
                throw new NotSupportedException("IsFunction");
            }


            if (v.IsNull)
            {
                return(null);
            }
            if (v.IsObject)
            {
                //throw new NotSupportedException("IsObject");
                //todo:这里可能存在BUG
                var map = v.GetUserData() as UnmanagedWrapper;
                if (map != null)
                {
                    return(map.ClrObject);
                }
                return(null);
            }
            if (v.IsString)
            {
                return(v.GetStringValue());
            }
            if (v.IsUInt)
            {
                return(v.GetUIntValue());
            }
            if (v.IsUndefined)
            {
                return(null);
            }
            if (v.IsUserCreated)
            {
                throw new NotSupportedException("IsUserCreated");
            }
            throw new NotSupportedException("??");
        }
コード例 #5
0
        public JSValue(CefV8Value value)
        {
            if (value == null)
            {
                return;
            }

            if (value.IsArray)
            {
                var result = new List <Object>();
                for (var i = 0; i < value.GetArrayLength(); i++)
                {
                    result.Add(new JSValue(value.GetValue(i)).Value);
                }
                this.Value = result.ToArray();
            }
            else if (value.IsObject)
            {
                var result = new Dictionary <String, Object>();
                var keys   = value.GetKeys();
                for (var i = 0; i < keys.Length; i++)
                {
                    try
                    {
                        result.Add(keys[i], new JSValue(value.GetValue(keys[i])).Value);
                    }
                    catch (ArgumentException)
                    {
                    }
                }
                this.Value = result;
            }
            else if (value.IsInt)
            {
                this.Value = value.GetIntValue();
            }
            else if (value.IsUInt)
            {
                this.Value = value.GetUIntValue();
            }
            else if (value.IsDouble)
            {
                this.Value = value.GetDoubleValue();
            }
            else if (value.IsBool)
            {
                this.Value = value.GetBoolValue();
            }
            else if (value.IsDate)
            {
                this.Value = value.GetDateValue();
            }
            else if (value.IsString)
            {
                this.Value = value.GetStringValue();
            }
            else if (value.IsNull)
            {
                this.Value = null;
            }
            else if (value.IsUndefined)
            {
                this.Value = null;
            }
        }
コード例 #6
0
ファイル: JavascriptFunction.cs プロジェクト: ulkyome/HtmlUi
        /// <summary>
        /// Parses the cef v8 value.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <returns></returns>
        private JToken ParseCefV8Value(CefV8Value value)
        {
            if (value == null)
            {
                return(null);
            }

            return(CefUtility.RunInContext(Context, () =>
            {
                if (value.IsInt)
                {
                    return JToken.FromObject(value.GetIntValue());
                }

                if (value.IsUInt)
                {
                    return JToken.FromObject(value.GetUIntValue());
                }

                if (value.IsDouble)
                {
                    return JToken.FromObject(value.GetDoubleValue());
                }

                if (value.IsBool)
                {
                    return JToken.FromObject(value.GetBoolValue());
                }

                if (value.IsDate)
                {
                    return JToken.FromObject(value.GetDateValue());
                }

                if (value.IsString)
                {
                    return JToken.FromObject(value.GetStringValue());
                }

                if (value.IsUndefined)
                {
                    return JValue.CreateUndefined();
                }

                if (value.IsArray)
                {
                    var array = new JArray();

                    for (var i = 0; i < value.GetArrayLength(); i++)
                    {
                        array.Add(ParseCefV8Value(value.GetValue(i)));
                    }

                    return array;
                }

                if (value.IsObject)
                {
                    var obj = new JObject();

                    foreach (var propertyName in value.GetKeys())
                    {
                        obj.Add(propertyName, ParseCefV8Value(value.GetValue(propertyName)));
                    }

                    return obj;
                }

                return JValue.CreateNull();
            }));
        }
コード例 #7
0
        public static JavaScriptValue ToJSValue(this CefV8Value source)
        {
            if (source == null || !source.IsValid)
            {
                throw new ArgumentNullException();
            }

            JavaScriptValue target;

            if (source.IsFunction)
            {
                var context = CefV8Context.GetEnteredContext();

                var info = new JavaScriptRenderSideFunction(context, source);

                JavaScriptObjectRepository.RenderSideFunctions.Add(info);

                target = JavaScriptValue.CreateFunction(info);
            }
            else if (source.IsArray)
            {
                target = JavaScriptValue.CreateArray();
                for (int i = 0; i < source.GetArrayLength(); i++)
                {
                    var item = source.GetValue(i);
                    if (item != null && item.IsValid)
                    {
                        target.AddArrayValue(item.ToJSValue());
                    }
                }
            }
            else if (source.IsObject)
            {
                target = JavaScriptValue.CreateObject();
                foreach (var key in source.GetKeys())
                {
                    var item = source.GetValue(key);
                    if (item != null && item.IsValid)
                    {
                        target.SetValue(key, item.ToJSValue());
                    }
                }
            }
            else if (source.IsBool)
            {
                target = JavaScriptValue.CreateBool(source.GetBoolValue());
            }
            else if (source.IsDate)
            {
                target = JavaScriptValue.CreateDateTime(source.GetDateValue());
            }
            else if (source.IsDouble)
            {
                target = JavaScriptValue.CreateNumber(source.GetDoubleValue());
            }
            else if (source.IsInt)
            {
                target = JavaScriptValue.CreateNumber(source.GetIntValue());
            }
            else if (source.IsUInt)
            {
                target = JavaScriptValue.CreateNumber(source.GetUIntValue());
            }
            else if (source.IsString)
            {
                target = JavaScriptValue.CreateString(source.GetStringValue());
            }
            else
            {
                target = JavaScriptValue.CreateNull();
            }


            return(target);
        }