Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WebKit issues with event.layerX and event.layerY

I just noticed that I get tons of deprecated warnings in the latest (canary) build of Chrome.

event.layerX and event.layerY are broken and deprecated in WebKit. They will be removed from the engine in the near future.

Looks like jQuery is screwing thing up.

I'm using: jquery-1.6.1.min.js.

Would it help to upgrade to the latest jQuery version or isn't it fixed yet or is it a Chrome bug or is it something else.

PS

I cannot show you code because I think it's a general error, but I suspect the warnings get thrown when I try to access a jQuery object or when jQuery tries to access the layerX / layerY (well I'm pretty sure that's the case considering the error :P).

jQuery probably copies those properties into the jQuery object.

So...

What's going on?

EDIT

jQuery 1.7 is out and fixes this issue.

Read more at their blog, here.

like image 208
PeeHaa Avatar asked Oct 19 '11 17:10

PeeHaa


2 Answers

What's going on!?

"jQuery probably copies those properties into the jQuery object." You're exactly correct, so it sounds like you already know! :)

Hopefully jQuery will update their code to stop touching that, but at the same time WebKit should have known better than to log a deprecation warning on an event (at least in my opinion). One mousemove handler and your console explodes. :)

Here's a recent jQuery ticket: http://bugs.jquery.com/ticket/10531

UPDATE: This is fixed now if you upgrade to jQuery 1.7.

Please note that if upgrading jQuery doesn't fix the issue for you it may have something to do with used extensions / plugins as Jake stated in his answer.

like image 145
Adam A Avatar answered Oct 02 '22 05:10

Adam A


http://jsperf.com/removing-event-props/2

The temporary fix is to run this code before you do any event binding via jQuery:

(function(){     // remove layerX and layerY     var all = $.event.props,         len = all.length,         res = [];     while (len--) {       var el = all[len];       if (el != 'layerX' && el != 'layerY') res.push(el);     }     $.event.props = res; }()); 

UPDATE

See the latest performance tests to find out what the fastest way is to remove the event props.

like image 39
David Murdoch Avatar answered Oct 02 '22 05:10

David Murdoch