/// <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())
                    );
            }
        }
Example #2
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: &lt;pre&gt;
        ///   /// 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;
        ///     };
        ///   })();
        /// &lt;/pre&gt; Example usage in the page: &lt;pre&gt;
        ///   /// 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();
        /// &lt;/pre&gt;
        /// </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;
            }
        }