[webkit-dev] Javascript / Obj-c object property mismatch
Rudi Sherry
rsherry at adobe.com
Thu Oct 26 09:16:07 PDT 2006
Thanks! I figured it was something simple that I had wrong conceptually.
On Oct 26, 2006, at 9:12 AM, Timothy Hatcher wrote:
> A JavaScript property is not the same as an element attribute.
>
> It is unfortunate that some attributes like "onclick" get mapped
> from attributes to properties, but this is a special case for
> compatibility. But if you later change the onclick property the
> attribute doesn't change.
>
> The equivalent of 'myObject.command = value' in ObjC is '[myObject
> setValue:value forKey:@"command"]'. Then the matching call
> '[myObject valueForKey:@"command"]' to get the value back.
>
> JavaScript has the same setAttribute and getAttribute methods if
> you do want to change an attribute. Hope this helps.
>
> — Timothy Hatcher
>
>
> On Oct 26, 2006, at 8:47 AM, Rudi Sherry wrote:
>
>> I'm working with a WebView where I use DOM object manipulation in
>> objective-c combined with javascript.
>>
>> I have the dom document and I add an object with some attributes
>> like this:
>>
>> DOMNodeList *list = [ domDoc getElementsByTagName: @"BODY" ];
>> DOMNode *body = [ list item: 0 ];
>> myObject = (DOMHTMLObjectElement *) [ [ domDoc createElement:
>> @"OBJECT" ] retain ];
>> [ myObject setAttribute: @"ID" : @"MyObjectName" ];
>> [ myObject setAttribute: @"NAME" : @"MyObjectName" ];
>> <snip>
>> [ myObject setAttribute: @"command" : @"xxx" ];
>> [ body appendChild: myObject ];
>>
>> In the javascript, I can get the object with this and check its
>> value (this is in a javascript function that gets called):
>>
>> var myObject = document.body.children['MyObjectName'];
>> alert(myObject.command);
>> myObject.command = "abcdef";
>> alert(myObject.command);
>>
>> I have a WebUIDelegate with the runJavaScriptAlertPanelWithMessage
>> that prints out the alert value and compares it against myObject:
>>
>> - (void)webView:(WebView *)sender
>> runJavaScriptAlertPanelWithMessage:(NSString *)message
>> {
>> NSLog (@"alert: %@", message);
>> NSLog( @"command attribute: %@", [ mSwfObject getAttribute:
>> @"command" ] );
>> }
>>
>>
>> In the above example, it prints out:
>>
>> 2006-10-26 08:44:29.771 TestInsideWebKit[9235] alert: xxx
>> 2006-10-26 08:44:29.771 TestInsideWebKit[9235] command attribute: xxx
>> 2006-10-26 08:44:29.771 TestInsideWebKit[9235] alert: abcdef
>> 2006-10-26 08:44:29.771 TestInsideWebKit[9235] command attribute: xxx
>>
>>
>> Why isn't the command attribute changed in the objective-c object
>> when it's changed in the javascript function? It must be the same
>> object since it started as 'xxx'.
>>
>> Any help would be appreciated,
>>
>> Thanks,
>> Rudi
>>
>> _______________________________________________
>> webkit-dev mailing list
>> webkit-dev at opendarwin.org
>> http://www.opendarwin.org/mailman/listinfo/webkit-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/webkit-dev/attachments/20061026/7089adb6/attachment.html
More information about the webkit-dev
mailing list