[webkit-dev] Attaching property to external (Obj-c) synthetic event

Ross Lillie ross.lillie at motorola.com
Wed Jun 17 14:29:54 PDT 2009


I need to generate a synthetic event (DOM Level 2) from external (native)
code and inject into the current DOM structure.  Furthermore, this event
needs to have a custom property attached, to pass external data into the
current Javascript context.

Generating and dispatching the event from external code is straightforward.
>From the delegate method (didFinishLoadForFrame) of the WebFrame, I can
access the DOMDocument as well as the JSGlobalContextRef.  Using the
DOMDocument reference I create a new Event instance via the createEvent()
method and initialize to the desired type.  This event can then be
dispatched to a specified target in the DOM without any problems.

However, at this point (before dispatch) I would like to attach a JavaScript
property to the corresponding JSObject of the DOMEvent.  I assumed that this
could be accomplished by retrieving the JSObject reference from the
DOMEvent, but this appears not to work, as calling the [(DOMEvent)ev
JSObject] method returns NULL. Has the corresponding Javascript Object been
created yet, or is it created when dispatched to the desired target?

What am I missing?  It appears that my understanding of the
WindowScriptObject interface is not what it should be.  Any insight would be

Thanks in advance, and regards

Example (abbreviated) code snippet:

>From the window didFinishLoadForFrame method:

    JSGlobalContextRef ctx = [frame globalContext];
    DOMDocument *doc = [frame DOMDocument];

    DOMEvent *ev = [doc createEvent:@"Events"];
    [ev initEvent:@"eventType" canBubbleArg:YES cancelableArg:NO];

// At this point I can select the event target via the DOMDocument
// getElementByID method and dispatch my custom event without problems.
// However, I'm trying to attach a custom property to the event as
// follows:

    JSObjectRef evObj = [ev JSObject];  // THIS RETURNS NULL!!

// Intent was to use the JavaScriptCore APIs to add a custom property to the
// DOMEvent object created above

More information about the webkit-dev mailing list