[webkit-dev] Setting event handlers on the global context
Maciej Stachowiak
mjs at apple.com
Sun Jul 19 16:28:52 PDT 2009
On Jul 19, 2009, at 11:10 AM, Adam Barth wrote:
> I think we should do what Firefox does in the window.onload case. :)
>
> I'm not familiar with the history through. Is there some particular
> reason we have our current behavior?
The current behavior is an accident of implementation, but I think the
relevant applicable spec is somewhat ambiguous. A function declaration
creates a new var-like binding which shadows the underlying onmessage
setter.
The relevant spec here is ECMAScript, not HTML5. In ECMA-262, section
10.1.3 is what would apply, I haven't checked the proper reference for
the fifth edition draft. Regarding the declaration of a function with
the same name as an existing property, it says: "If the variable
object already has a property with this name, replace its value and
attributes." So a vanilla property should get replaced with a
DontDelete property, but in the case of a setter it's not clear
whether it should be replaced or shadowed.
It would probably be good to match other browsers. I am curious what
IE and Opera do here. I would also be curious if ECMAScript 5 is more
clear about what to do when a function declaration has the same name
as a setter property, since it supports getters and setters in the spec.
his would be slightly, but not insanely tricky to fix. The relevant
code is all in BytecodeGenerator::BytecodeGenerator(ProgramNode*
programNode....), since this only affects global scope. The change
could have far-reaching consequences so we'd have to be on the lookout
for Web compatibility regressions if we change this.
Regards,
Maciej
>
> Adam
>
>
> On Sun, Jul 19, 2009 at 10:56 AM, Drew Wilson<atwilson at google.com>
> wrote:
>> Yes, it happens with window.onload() too (I didn't mean to imply
>> that it was
>> a worker-only issue).
>> This seems like precisely the type of inoperability that the HTML5
>> spec
>> should address, but I figured I should get some input here before
>> bringing
>> it up there.
>> -atw
>>
>> On Sun, Jul 19, 2009 at 10:31 AM, Adam Barth <abarth at webkit.org>
>> wrote:
>>>
>>> You should test the same thing with window.onload. If I recall
>>> correctly, you'll see similar inoperability.
>>>
>>> Adam
>>>
>>>
>>> On Sun, Jul 19, 2009 at 9:29 AM, Drew Wilson<atwilson at google.com>
>>> wrote:
>>>> I was writing a new worker unit test and I noticed that all of
>>>> our unit
>>>> tests set event handlers in worker global context like so:
>>>> onmessage = function(event) { ... do something ... };
>>>> I note that Firefox also allows setting event handlers like this:
>>>> function onmessage(event) { ... do something ... };
>>>> In WebKit, the latter form creates a function at global scope named
>>>> "onmessage" but does not set it as an event handler.
>>>> I'm trying to figure out what the correct behavior should be - I've
>>>> asked
>>>> IanH, and his response was that he dimly recalls that both forms
>>>> should
>>>> be
>>>> valid "(through a convoluted argument that I forget right now,
>>>> but which
>>>> should be examined carefully by whoever implements this, and which
>>>> requires
>>>> careful examination of at least the ECMAScript spec and maybe
>>>> also the
>>>> WebIDL and HTML5 specs)" - basically, he wasn't entirely certain
>>>> and
>>>> thought
>>>> I should check here and with the Mozilla devs to get your opinions.
>>>> Anyone familiar enough with the various specs to make a definitive
>>>> argument
>>>> one way or the other?
>>>> -atw
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> webkit-dev mailing list
>>>> webkit-dev at lists.webkit.org
>>>> http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
>>>>
>>>>
>>
>>
> _______________________________________________
> webkit-dev mailing list
> webkit-dev at lists.webkit.org
> http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
More information about the webkit-dev
mailing list