Beispiel #1
0
        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.");
        }