Проблемы с WebKit с event.layerX и event.layerY

Я только заметил, что получаю тонну устаревших предупреждений в последней (канареечной) сборке Chrome.

event.layerX и event.layerY нарушены и устарели в WebKit. Они будут удалены с двигателя в ближайшем будущем.

Похоже, что jQuery закручивает вещи.

Я использую: jquery-1.6.1.min.js.

Помогло бы ли оно обновиться до последней версии jQuery или еще не исправлено или это ошибка Chrome или это что-то еще.

PS

Я не могу показать вам код, потому что я думаю, что это общая ошибка, но я подозреваю, что предупреждения возникают, когда я пытаюсь получить доступ к объекту jQuery или когда jQuery пытается получить доступ к layerX/layerY (ну, я уверен, что случай с учетом ошибки: P).

jQuery, вероятно, копирует эти свойства в объект jQuery.

Итак...

Что происходит?

ИЗМЕНИТЬ

jQuery 1.7 вышел и исправляет эту проблему.

Подробнее в своем блоге, здесь.

Ответ 1

Что происходит!?

"jQuery, вероятно, копирует эти свойства в объект jQuery." Ты точно прав, так что, похоже, ты уже знаешь!:)

Надеюсь, что jQuery обновит свой код, чтобы не дотрагиваться до этого, но в то же время WebKit должен был знать лучше, чем регистрировать предупреждение о задержке на мероприятии (по крайней мере, на мой взгляд). Один mousemove обработчик и ваша консоль взрывается.:)

Вот недавний билет jQuery: http://bugs.jquery.com/ticket/10531

UPDATE: теперь это исправлено, если вы обновляетесь до jQuery 1.7.

Обратите внимание, что если обновление jQuery не поможет вам решить проблему, возможно, что-то связано с используемыми расширениями/плагинами, как заявил Джейк в своем answer.

Ответ 2

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

Временное исправление заключается в том, чтобы запустить этот код, прежде чем выполнять привязку события через 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

Посмотрите последние тесты производительности, чтобы узнать, какой самый быстрый способ - удалить реквизиты событий.

Ответ 3

Самое короткое решение этого - это однострочный:

$.event.props = $.event.props.join('|').replace('layerX|layerY|', '').split('|');

Ответ 4

Огромное количество этих сообщений (у меня только 80000 из них при использовании gmail) действительно является ошибкой в ​​Chrome.

Вам следует нажать кнопку на Chromium.

Ответ 5

Это также может быть вызвано расширениями Chrome, поэтому проверьте их, если обновление jQuery не работает.

Ответ 6

Я использовал это после вызова любого события:

$.event.props.splice($.event.props.indexOf("layerY"),1);
$.event.props.splice($.event.props.indexOf("layerX"),1);

Это сработало для меня, у меня нет предупреждающих сообщений, так как я сделал этот патч в своем коде.

Ответ 7

Вот еще одно исправление одной строки, не заменяя исходный экземпляр $.event.props(который может быть или не быть массивом), на всякий случай: -)

$.each(["layerX","layerY"], function(i,v) { if((i=p.indexOf(v)) > -1) $.fn.splice.call($.event.props,i,1) })

Ответ 8

Как и проблемы с конфигурацией, перечисленные в других ответах, эта ошибка может быть вызвана простой ошибкой в ​​вашем собственном коде: забыть "#" из селектора идентификаторов jQuery.

У меня был код, похожий на

$('datenotset_2341').click(function(){
 ....etc....
});

(пропускает # перед "datenotset" )

Как и (очевидно) не работает, он вызвал это сообщение об ошибке в Chrome.

Ответ 9

Я столкнулся с этой проблемой в своем собственном коде. Оказывается, я выполнял итерацию по всем свойствам объекта события как часть инструмента отладки/проверки, который я использовал. В этом конкретном случае я использовал jQuery $.extend для клонирования объекта для последующей проверки, но я считаю, что любой из стандартных методов итерации в различных инструментариях также вызвал бы предупреждение.

Я упоминаю это здесь, потому что моя первоначальная мысль о простом поиске базы кода для экземпляров layerX или layerY не помогла - свойство ссылалось в общем случае не по имени.