On Dec 11, 2008, at 2:27 AM, Thomas Gutteridge wrote:

Hello

Can you help me? I'm using WebKit's JavaScriptCore from within an
application to allow some logic to be implemented in script and
therefore modified without recompilation. Although, I can create
JavaScript functions and objects using the C API, I can't see how to
give them names that can be used to reference them from script.

For example, I'm trying to use JSObjectMakeFunctionWithCallback to
create a JavaScript function with a native implementation. Crucially,
I'd like to then invoke this function from a script. However, the
"name" parameter is apparently only "used when converting the function
to string". The name I give is undefined if I use it in a script.

Is what I'm trying to do possible?


The "name" property that you're specifying is what will be used if you want to do myFunction.toString(). Accessing a function by name requires the function (or other object) being on an object in scope.

The easiest way to achieve this is by putting it on the global object. This will let you call it in the same way people use 'alert', 'document', etc on js in a web page.

Something akin to the following should work (assuming jsFunction is your JSC function wrapper, and context is your JSC context):
JSValueRef exception = 0;
JSObjectRef global = JSContextGetGlobalObject(context);
JSObjectSetProperty(context, global, JSStringCreateWithUTF8CString("myCFunction"), jsFunction, kJSPropertyAttributeDontDelete | kJSPropertyAttributeReadOnly, &exception);
if (exception)
    printf("Argh! an exception!!!!");

Now your function will be available in JS as "myCFunction" on the global object.

--Oliver


_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to