public Task <JavaScriptExecutionResult> ExecuteFunctionAsync(CefFrame frame, JavaScriptValue[] arguments = null) { CheckIsRendererFunction(); var tsc = new TaskCompletionSource <JavaScriptExecutionResult>(); if (JavaScriptObjectRepository.JavaScriptExecutionTasks.TryAdd(new Tuple <int, long>(tsc.GetHashCode(), frame.Identifier), tsc)) { var jsvalue = arguments == null?JavaScriptValue.CreateArray() : arguments.ToJSValue(); var message = BridgeMessage.Create(JavaScriptCommunicationBridge.EVALUATE_JS_CALLBACK); message.Arguments.Add(MessageValue.CreateInt(tsc.GetHashCode())); message.Arguments.Add(MessageValue.CreateInt(JSFunctionDescriber.Id)); message.Arguments.Add(MessageValue.CreateString(jsvalue.ToDefinition())); JavaScriptCommunicationBridge.SendProcessMessage(CefProcessId.Renderer, frame, message); return(tsc.Task); } throw new InvalidOperationException("Same function already exists."); }
protected override void Execute() { var cachedFuncInfo = JavaScriptObjectRepository.RenderSideFunctions.SingleOrDefault(x => x.Id == functionId); if (cachedFuncInfo == null) { return; } var func = cachedFuncInfo.Function; var context = cachedFuncInfo.Context; var msg = BridgeMessage.Create(EVALUATE_JS_CALLBACK); msg.Arguments.Add(MessageValue.CreateInt(taskId)); context.Enter(); CefV8Value[] argumentList = null; CefV8Value result = null; try { argumentList = arguments.ToCefV8Arguments(); result = func.ExecuteFunctionWithContext(context, null, argumentList); } finally { if (argumentList != null) { foreach (var value in argumentList) { value.Dispose(); } } context.Exit(); } if (result != null) { var jsvalue = result.ToJSValue(); msg.Arguments.Add(MessageValue.CreateBool(true)); msg.Arguments.Add(MessageValue.CreateString(jsvalue.ToDefinition())); result.Dispose(); } else { msg.Arguments.Add(MessageValue.CreateBool(false)); msg.Arguments.Add(MessageValue.CreateString("Executing function failed.")); } jsbridge.SendProcessMessage(frame, msg); }
public void Success(params JavaScriptValue[] retvals) { if (_isCalled) { throw new InvalidOperationException(); } var message = BridgeMessage.Create(JavaScriptCommunicationBridge.EXECUTE_JAVASCRIPT_FUNCTION); message.Arguments.Add(MessageValue.CreateBool(true)); var retval = retvals?.ToJSValue() ?? JavaScriptValue.CreateArray(); message.Arguments.Add(MessageValue.CreateString(retval.ToDefinition())); message.Arguments.Add(MessageValue.CreateString($"{_uuid}")); _jsBridge.SendProcessMessage(_frame, message); _isCalled = true; }
protected override void Execute() { var message = BridgeMessage.Create(JS_OBJECT_MAPPING_MESSAGE); var args = JavaScriptValue.CreateObject(); foreach (var obj in jsbridge.RegisteredJavaScriptObjects) { if (obj.Value != null) { args.SetValue(obj.Key, obj.Value); } } message.Arguments.Add(MessageValue.CreateString(args.ToDefinition())); jsbridge.SendProcessMessage(frame, message); jsbridge.IsObjectsMapped = true; }