public static CfrV8Handler Convert(this Action <string, IJavascriptObject, IJavascriptObject[]> function, string name) { var res = new CfrV8Handler(); res.Execute += (o, e) => function(name, e.Object.Convert(), e.Arguments.Convert()); return(res); }
bool BindFunctions(string objName, string[] funcNames) { if (remoteBrowser == null) { return(false); } try { var ctx = remoteBrowser.CreateRemoteCallContext(); ctx.Enter(); try { // if (v8Handler != null) v8Handler.Dispose(); // unbind v8Handler = new CfrV8Handler(); v8Handler.Execute += new CfrV8HandlerExecuteEventHandler(JavascriptCallback); CfrTaskRunner.GetForThread(CfxThreadId.Renderer).PostTask(new BindFunctionsTask(remoteBrowser, objName, funcNames, v8Handler)); return(true); } finally { ctx.Exit(); } } catch (System.IO.IOException) { return(false); } }
public static CfrV8Handler Convert(this Action <IJavascriptObject, IJavascriptObject, IJavascriptObject, IJavascriptObject> function) { var res = new CfrV8Handler(); res.Execute += (o, e) => function(e.Arguments[0].Convert(), e.Arguments[1].Convert(), e.Arguments[2].Convert(), e.Arguments[3].Convert()); return(res); }
public void Bind(HtmlTextureWrapper wrapper, CfrV8Handler v8handler) { Wrapper = wrapper; Wrapper.OnMainLoopBegin += (sender, args) => Executed = false; v8handler.Execute += JavascriptCallback; }
internal ChromiumFxObjectCreationCallBack() { Handler = new CfrV8Handler(); Handler.Execute += (_, e) => { _Result.Add(e.Arguments); }; }
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); } }
public static CfrV8Handler Convert(this Action<string, IJavascriptObject, IJavascriptObject[]> function, string name) { var res = new CfrV8Handler(); res.Execute += (o, e) => { function(name, e.Object.Convert(), e.Arguments.Convert()); }; return res; }
public bool BindObject(JsBinding binding) { if (Closed) { return(false); } if (RemoteBrowser == null) { return(false); } try { var jsBinding = binding; if (JsBindings.ContainsKey(binding.Name)) { jsBinding = JsBindings[binding.Name]; jsBinding.MigrateFunctions(binding); } else { JsBindings.Add(binding.Name, binding); } var remoteCallContext = RemoteBrowser.CreateRemoteCallContext(); remoteCallContext.Enter(); try { V8Handler = new CfrV8Handler(); jsBinding.Bind(this, V8Handler); var taskrunner = CfrTaskRunner.GetForThread((CfxThreadId)6); if (taskrunner == null) { LogError("Unsuccessful Binding, TaskRunner is null"); remoteCallContext.Exit(); return(false); } taskrunner.PostTask(new BindFunctionsTask(RemoteBrowser, jsBinding.Name, jsBinding.Functions.Keys.ToArray(), V8Handler)); remoteCallContext.Exit(); return(true); } catch (Exception ex) { remoteCallContext.Exit(); LogError(ex.Message); VvvvLogger?.Log(ex); return(false); } } catch (Exception ex) { LogError(ex.Message); VvvvLogger?.Log(ex); return(false); } }
internal override CfrV8Value CreateV8Value() { v8Handler = new CfrV8Handler(); v8Handler.Execute += new CfrV8HandlerExecuteEventHandler(handler_Execute); return(CfrV8Value.CreateFunction(Name, v8Handler)); }
internal void SetV8Handler(CfrV8Handler handler) { handler.Execute += new CfrV8HandlerExecuteEventHandler(handler_Execute); }
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(); }; }
/// <summary> /// Register a new V8 extension with the specified JavaScript extension code and /// handler. Functions implemented by the handler are prototyped using the /// keyword 'native'. The calling of a native function is restricted to the scope /// in which the prototype of the native function is defined. This function may /// only be called on the render process main thread. /// Example JavaScript extension code: <pre> /// // create the 'example' global object if it doesn't already exist. /// if (!example) /// example = {}; /// // create the 'example.test' global object if it doesn't already exist. /// if (!example.test) /// example.test = {}; /// (function() { /// // Define the function 'example.test.myfunction'. /// example.test.myfunction = function() { /// // Call CfrV8Handler.Execute() with the function name 'MyFunction' /// // and no arguments. /// native function MyFunction(); /// return MyFunction(); /// }; /// // Define the getter function for parameter 'example.test.myparam'. /// example.test.__defineGetter__('myparam', function() { /// // Call CfrV8Handler.Execute() with the function name 'GetMyParam' /// // and no arguments. /// native function GetMyParam(); /// return GetMyParam(); /// }); /// // Define the setter function for parameter 'example.test.myparam'. /// example.test.__defineSetter__('myparam', function(b) { /// // Call CfrV8Handler.Execute() with the function name 'SetMyParam' /// // and a single argument. /// native function SetMyParam(); /// if(b) SetMyParam(b); /// }); /// // Extension definitions can also contain normal JavaScript variables /// // and functions. /// var myint = 0; /// example.test.increment = function() { /// myint += 1; /// return myint; /// }; /// })(); /// </pre> Example usage in the page: <pre> /// // Call the function. /// example.test.myfunction(); /// // Set the parameter. /// example.test.myparam = value; /// // Get the parameter. /// value = example.test.myparam; /// // Call another function. /// example.test.increment(); /// </pre> /// </summary> /// <remarks> /// See also the original CEF documentation in /// <see href="https://bitbucket.org/chromiumfx/chromiumfx/src/tip/cef/include/capi/cef_v8_capi.h">cef/include/capi/cef_v8_capi.h</see>. /// </remarks> public static bool RegisterExtension(string extensionName, string javascriptCode, CfrV8Handler handler) { var call = new CfxRuntimeRegisterExtensionRenderProcessCall(); call.extensionName = extensionName; call.javascriptCode = javascriptCode; call.handler = CfrObject.Unwrap(handler); call.RequestExecution(CfxRemoteCallContext.CurrentContext.connection); return(call.__retval); }
/// <summary> /// Register a new V8 extension with the specified JavaScript extension code and /// handler. Functions implemented by the handler are prototyped using the /// keyword 'native'. The calling of a native function is restricted to the scope /// in which the prototype of the native function is defined. This function may /// only be called on the render process main thread. /// Example JavaScript extension code: <pre> /// // create the 'example' global object if it doesn't already exist. /// if (!example) /// example = {}; /// // create the 'example.test' global object if it doesn't already exist. /// if (!example.test) /// example.test = {}; /// (function() { /// // Define the function 'example.test.myfunction'. /// example.test.myfunction = function() { /// // Call CfrV8Handler.Execute() with the function name 'MyFunction' /// // and no arguments. /// native function MyFunction(); /// return MyFunction(); /// }; /// // Define the getter function for parameter 'example.test.myparam'. /// example.test.__defineGetter__('myparam', function() { /// // Call CfrV8Handler.Execute() with the function name 'GetMyParam' /// // and no arguments. /// native function GetMyParam(); /// return GetMyParam(); /// }); /// // Define the setter function for parameter 'example.test.myparam'. /// example.test.__defineSetter__('myparam', function(b) { /// // Call CfrV8Handler.Execute() with the function name 'SetMyParam' /// // and a single argument. /// native function SetMyParam(); /// if(b) SetMyParam(b); /// }); /// // Extension definitions can also contain normal JavaScript variables /// // and functions. /// var myint = 0; /// example.test.increment = function() { /// myint += 1; /// return myint; /// }; /// })(); /// </pre> Example usage in the page: <pre> /// // Call the function. /// example.test.myfunction(); /// // Set the parameter. /// example.test.myparam = value; /// // Get the parameter. /// value = example.test.myparam; /// // Call another function. /// example.test.increment(); /// </pre> /// </summary> /// <remarks> /// See also the original CEF documentation in /// <see href="https://bitbucket.org/chromiumfx/chromiumfx/src/tip/cef/include/capi/cef_v8_capi.h">cef/include/capi/cef_v8_capi.h</see>. /// </remarks> public static bool RegisterExtension(string extensionName, string javascriptCode, CfrV8Handler handler) { var call = new CfxRuntimeRegisterExtensionRenderProcessCall(); call.extensionName = extensionName; call.javascriptCode = javascriptCode; call.handler = CfrObject.Unwrap(handler); call.RequestExecution(CfxRemoteCallContext.CurrentContext.connection); return call.__retval; }
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(); }; }