Hatena::Groupjavascript

JavaScriptで遊ぶよ

 | 

2011-04-04

22:08

楽しい。

最初のメールは Microsoft の Jacob Rossi さん。

I've identified some potential conflicts between Web DOM Core and DOM L3 Events:

 1. WDC allows the dispatch of an event without having initialized its event object (e=document.creatEvent("Event"); window.dispatchEvent(e);). No major browser supports this today and there are not any valid use cases for this behavior (that I can think of), so why make implementations change?

2. cancels and bubbles are now optional arguments for initEvent() in WDC.  How does this merge with the other init___Event( ) methods which are have cancels and bubbles in the middle of their methods? I think there's some support for improving how the init methods behave, but this doesn't really solve that problem. I'd rather see D3E keep these are required and then Web DOM Core consider taking the task of event object constructors. [1]

3. Event names can be empty strings but not null in WDC [2]. Why exclude null, it's not any more nonsensical than "". IE9, Chrome, and Opera all allow null as a name.

4. Calls to dispatchEvent(evt) where evt is an event object that's already in the middle of dispatch throw an INVALID_STATE_ERR according to WDC [3], but a DISPATCH_REQUEST_ERR according to D3E [4]. Why change the name/code?
http://lists.w3.org/Archives/Public/www-dom/2011JanMar/0057.html

エディターの Anne van Kesteren さんは、いくつかの点は実装のほうが直感的ではないから仕様でその不備を正したまでだと主張。例えば createEvent して initEvent せずに dispatchEvent したらエラーを出すことになっているが、initEvent しなくても、空文字のイベント名としてそのまま dispatch するべきだと。

Jacob さんは、すべての実装が一致してるのに(注:実際には Firefox はおかしいらしい)、そんなユースケースも無さそうなことのために実装を変えないといけないのは時間の無駄だろと。

Anne さん曰く、initEvent したとしても initEvent("", false, false) の形で呼んだら、何もしなかったこととまったく一緒なんだから、そのためだけに initEventCalled のようなフラグを用意するのはあほらしいと。

ところが、Glenn Maynard さんによると、WebKit では dispatchEvent のときにイベント名が空文字かどうかだけチェックしてて、結果的にそれで initEvent が呼ばれていることを保証していると。(initEvent の第一引数が空文字でないとして)

Olli Pettay さん曰く、Gecko では initEvent 呼ばずに dispatchEvent したときは、なんとこんなことになるらしい。

In Gecko the event is dispatched just normally in that case.
But because the event isn't initialized to "", or null, or anything 
else, no listener for it can be called.
That sounds pretty reasonable to me, although based on
D3E UNSPECIFIED_EVENT_TYPE_ERR should be thrown.
http://lists.w3.org/Archives/Public/www-dom/2011JanMar/0098.html

笑った。"sounds pretty reasonable" ドコガ??


結局 Gecko は WebKit に合わせて空文字のイベント名をエラーにするらしい。

トラックバック - http://javascript.g.hatena.ne.jp/edvakf/20110404
 |