/// <summary> /// Returns the function handler or NULL if not a CEF-created function. /// </summary> public CefV8Handler GetFunctionHandler() { ThrowIfObjectIsInvalid(); return(CefV8Handler.FromOrDefault( cef_v8value_t.invoke_get_function_handler(this.ptr) )); }
/// <summary> /// Create a new CefV8Value object of type function. /// </summary> public static CefV8Value CreateFunction(string name, CefV8Handler handler) { fixed(char *name_str = name) { var n_name = new cef_string_t(name_str, name != null ? name.Length : 0); return(CefV8Value.From( NativeMethods.cef_v8value_create_function(&n_name, handler.GetNativePointerAndAddRef()) )); } }
/// <summary> /// Create a new CefV8Value object of type function. /// </summary> public static CefV8Value CreateFunction(string name, CefV8Handler handler) { fixed (char* name_str = name) { var n_name = new cef_string_t(name_str, name != null ? name.Length : 0); return CefV8Value.From( NativeMethods.cef_v8value_create_function(&n_name, handler.GetNativePointerAndAddRef()) ); } }
/// <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 be called on any 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 CefV8Handler::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 CefV8Handler::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 CefV8Handler::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> public static bool RegisterExtension(string extensionName, string javascriptCode, CefV8Handler handler) { fixed (char* extensionName_str = extensionName) fixed (char* javasriptCode_str = javascriptCode) { var n_extensionName = new cef_string_t(extensionName_str, extensionName.Length); var n_javascriptCode = new cef_string_t(javasriptCode_str, javascriptCode.Length); return NativeMethods.cef_register_extension( &n_extensionName, &n_javascriptCode, handler.GetNativePointerAndAddRef() ) != 0; } }
/// <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 be called on any 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 CefV8Handler::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 CefV8Handler::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 CefV8Handler::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> public static bool RegisterExtension(string extensionName, string javascriptCode, CefV8Handler handler) { fixed(char *extensionName_str = extensionName) fixed(char *javasriptCode_str = javascriptCode) { var n_extensionName = new cef_string_t(extensionName_str, extensionName.Length); var n_javascriptCode = new cef_string_t(javasriptCode_str, javascriptCode.Length); return(NativeMethods.cef_register_extension( &n_extensionName, &n_javascriptCode, handler.GetNativePointerAndAddRef() ) != 0); } }