- From: Arthur Stolyar <nekr.fabula@gmail.com>
- Date: Wed, 8 Apr 2015 19:14:02 +0300
- To: Rick Byers <rbyers@chromium.org>
- Cc: Olli Pettay <olli@pettay.fi>, "public-touchevents@w3.org" <public-touchevents@w3.org>, Jared Duke <jdduke@chromium.org>
- Message-ID: <CAPAD5+D9pss13+sh3MikiuyRn52Yrt6T9RrAkkvry7zfrnhSZA@mail.gmail.com>
Seems like Webkit also should fix that bug if they did not it already (latest build, etc. who knows). 2015-04-08 19:07 GMT+03:00 Rick Byers <rbyers@chromium.org>: > On Wed, Apr 8, 2015 at 5:12 AM, Olli Pettay <olli@pettay.fi> wrote: > >> On 04/08/2015 05:57 AM, Rick Byers wrote: >> >>> [Trying again to get the pain-text code snippet formatted correctly in >>> the archives (sorry for the spam)] >>> >>> Here's a funny pattern we just noticed <https://code.google.com/p/ >>> chromium/issues/detail?id=474436#c12> for code attempting to handle >>> both touch and >>> mouse events with the same code: >>> >>> getPointerPosition = function(j) { >>> if (j.hasOwnProperty("touches")) { >>> return {x: j.changedTouches[0].pageX,y: j.changedTouches[0].pageY} } >>> else { >>> return {x: j.pageX,y: j.pageY} } } >>> ... >>> g._onPointerDown = function(k) { >>> if (!k.hasOwnProperty("touches")) { >>> k.preventDefault() >>> } >>> this.mouse = h.getPointerPosition(k); >>> this.prevMouse = {x: this.mouse.x,y: this.mouse.y}; >>> this._isDragging = true; >>> this._onWillBeginTracking(); >>> document.addEventListener("mousemove", this._boundFunctions.onPointerDrag, >>> false); >>> document.addEventListener("touchmove", this._boundFunctions.onPointerDrag, >>> false); >>> document.addEventListener("mouseup", this._boundFunctions.onPointerUp, >>> false); >>> document.addEventListener("touchend", this._boundFunctions.onPointerUp, >>> false); >>> document.addEventListener("touchcancel", this._boundFunctions.onPointerUp, >>> false) >>> }; >>> >>> This used to work to identify TouchEvents in Chrome (and Safari) due a >>> longstanding bug >>> <https://code.google.com/p/chromium/issues/detail?id=43394>where DOM >>> attributes were incorrectly exposed on the instance >>> <https://docs.google.com/document/d/1yeHTCHhulVIlrKyx9_ >>> gCguAhLfcefVOa9uxxfW2LVG0/edit>, instead of on the prototype chain (as >>> required by WebIDL >>> <http://heycam.github.io/webidl/#es-operations>). The code should >>> really be using '"touches" in j' instead of using hasOwnProperty here. >>> >>> Ironically, the site that has this code attempting (but failing) to >>> handle mouse and touch events with the same event handlers: >>> http://www.apple.com/watch/gallery/ >>> >>> We're trying to ship our fix for the DOM attributes bug now (but may >>> resort to a temporary compat hack to avoid breaking such sites). I assume >>> such >>> pages are be broken on IE and Firefox (which have correctly implementing >>> DOM attributes on the prototype chain for some time), right? >>> >> >> Pages tend to have separate code paths for different browsers :/ >> > > I've verified this page is similarly broken on Firefox for Android and a > recent (touch events enabled) build of IE for Windows Phone. We've > submitted a bug report to Apple and will avoid adding a hack to blink to > work around this bug (unless we uncover a broader usage of this pattern). > > The only, IIRC, event handling related hack we had to add when >> implementing webidl stuff was, >> onmouseenter/leave[1] requiring [LenientThis], and that had to be added >> to the spec too. >> >> And more like a feature is then [Unforgeable] in Event's isTrusted[2]. >> >> >> Have folks seen >> >>> other sites with this problem (searching github I see this pattern in a >>> few places)? >>> >> >> Haven't heard of that issue before. >> >> >> (So great to see Blink getting better webidl implementation!) >> >> -Olli >> >> [1] https://html.spec.whatwg.org/multipage/webappapis.html# >> globaleventhandlers >> [2] https://dom.spec.whatwg.org/#interface-event >> >> >> >>> Rick >>> >> >> > -- @nekrtemplar <https://twitter.com/nekrtemplar>
Received on Wednesday, 8 April 2015 16:14:31 UTC