private MessageBridgeResponse OnExecuteExtensionFunction(MessageBridgeRequest request) { if (request.Name == EXECUTE_EXT_JAVASCRIPT_FUNCION) { var owner = BrowserSideBridge.Owner; var extensionName = request.Arguments[0].GetString(); var functionName = request.Arguments[1].GetString(); var arguments = JavaScriptValue.FromJson(request.Arguments[2].GetString()).ToArray(); var uuid = new Guid(request.Arguments[3].GetString()); var extension = WinFormium.Runtime.Container.GetInstance <JavaScriptExtensionBase>(extensionName); if (extension == null) { return(MessageBridgeResponse.CreateFailureResponse($"JavaScript extension handler is not found.")); } var function = extension.FunctionHandlers.SingleOrDefault(x => x.FuntionName.Equals(functionName)); if (function == null) { return(MessageBridgeResponse.CreateFailureResponse($"{functionName} is not defined.")); } if (function.FunctionType == JavaScriptExtensionFunctionHandlerType.BrowserSideFunction && function.BrowserSideFunction != null) { JavaScriptValue retval = null; owner.InvokeIfRequired(() => { retval = function.BrowserSideFunction.Invoke(owner, arguments); }); retval = retval ?? JavaScriptValue.CreateNull(); var response = MessageBridgeResponse.CreateSuccessResponse(); response.Arguments.Add(MessageValue.CreateString(retval.ToDefinition())); return(response); } else if (function.FunctionType == JavaScriptExtensionFunctionHandlerType.BrowserSideAsyncFunction && function.BrowserSideAsyncFunction != null) { owner.InvokeIfRequired(() => { function.BrowserSideAsyncFunction.Invoke(owner, arguments, new JavaScriptAsyncFunctionCallback(owner.GetMainFrame(), uuid, this)); }); var response = MessageBridgeResponse.CreateSuccessResponse(); return(response); } return(MessageBridgeResponse.CreateFailureResponse($"{functionName} is not defined.")); } //return MessageBridgeResponse.CreateFailureResponse("Function is not defined."); return(null); }
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); }
private MessageBridgeResponse OnExecuteFunction(MessageBridgeRequest request) { if (request.Name == EXECUTE_JAVASCRIPT_FUNCTION) { var objectKey = request.Arguments[0].GetString(); var propertyName = request.Arguments[1].GetString(); var arguments = JavaScriptValue.FromJson(request.Arguments[2].GetString()).ToArray(); if (RegisteredJavaScriptObjects.ContainsKey(objectKey)) { var targetObject = RegisteredJavaScriptObjects[objectKey]; if (targetObject != null && targetObject.HasValue(propertyName)) { var value = targetObject.GetValue(propertyName); if (value.IsFunction) { var functionInfo = value.JSFunctionDescriber; if (functionInfo != null) { if (functionInfo.IsAsync) { var uuid = new Guid(request.Arguments[3].GetString()); var frame = BrowserSideBridge.Owner.GetMainFrame(); value.AsyncMethod?.Invoke(arguments, new JavaScriptAsyncFunctionCallback(frame, /* objectKey, propertyName,*/ uuid, this)); var response = MessageBridgeResponse.CreateSuccessResponse(); return(response); } else { var retval = value.Method?.Invoke(arguments) ?? JavaScriptValue.CreateNull(); var response = MessageBridgeResponse.CreateSuccessResponse(); response.Arguments.Add(MessageValue.CreateString(retval.ToDefinition())); return(response); } } } } } } //return MessageBridgeResponse.CreateFailureResponse("Function is not defined."); return(null); }