event.layerX 및 event.layerY와 관련된 WebKit 문제


507

방금 최신 (카나리아) Chrome 빌드에서 더 이상 사용되지 않는 경고가 표시됩니다.

event.layerX 및 event.layerY는 WebKit에서 중단되어 더 이상 사용되지 않습니다. 머지 않아 엔진에서 제거 될 것입니다.

jQuery가 문제를 일으키는 것처럼 보입니다.

사용하고 있습니다 : jquery-1.6.1.min.js.

최신 jQuery 버전으로 업그레이드하는 데 도움이되거나 아직 수정되지 않았거나 Chrome 버그이거나 다른 것입니다.

추신

일반적인 오류라고 생각하기 때문에 코드를 표시 할 수 없지만 jQuery 객체에 액세스하려고 할 때 또는 jQuery가 layerX / layerY에 액세스하려고 할 때 경고가 발생하는 것으로 의심됩니다 (잘 모르겠습니다. 오류 : P).

jQuery는 이러한 속성을 jQuery 객체에 복사합니다.

그래서...

무슨 일이야?

편집하다

jQuery 1.7이 출시되었으며이 문제가 해결되었습니다.

블로그에서 자세한 내용 을 확인하십시오 (여기) .


1
오늘도 이것에 주목했습니다.
Dusda

5
jQuery 1.7은 여전히 ​​경고가 아직 수정되지 않은 것 같습니다 .......
Krish

3
@ Stuart.Sklinar PHP로 코딩할지 여부는 알지 못하지만 그렇게하면 @오류를 억제 하는데도 사용 됩니다.
PeeHaa

1
중간에 중간 오류가없는 경우 Chrome은 유사한 오류 만 그룹화합니다. 따라서 문제는 실제로 콘솔을 디버깅에 사용하는 것이 더 번거 롭다는 것입니다. 그 아직 내가 생각 해달라고으로 자극,하지만 어떤 jQuery를 기능은 실제로 고장
carpii

2
후손에 대한 지적이의 가치, 그 웹킷 ( 버그 86264는 ) 더 이상 사용하기 위해 자신의 결정에서 물러했다 layerXlayerY적어도 그들은 더 신중하게 고려를 할 때까지. 그것은 IE 최근에 있음을 주목할 가치 를 추가 layerX 하고 layerY곧되지 않습니다 적절한 W3C의 교체,이 적어도까지 - 9 버전까지 그것을 가지고 있지 후에 내 생각 엔 이러한 속성 멀리 갈 수 없습니다입니다. 경고는 최신 버전의 WebKit에서 사라졌습니다.
Nathan Wall

답변:


463

무슨 일이야!?

"jQuery는 아마도 이러한 속성을 jQuery 객체에 복사합니다." 당신은 정확히 맞으므로 이미 알고있는 것처럼 들립니다! :)

잘만되면 jQuery가 코드를 업데이트하여 해당 항목을 중지하지만 동시에 WebKit은 이벤트에 대한 지원 중단 경고를 기록하는 것보다 더 잘 알고 있어야합니다 (적어도 제 의견으로는). 하나의 mousemove 핸들러와 콘솔이 폭발합니다. :)

최근 jQuery 티켓은 다음과 같습니다. http://bugs.jquery.com/ticket/10531

업데이트 : jQuery 1.7로 업그레이드하면 이제 수정되었습니다.

jQuery를 업그레이드해도 문제가 해결되지 않으면 Jake가 답변 에서 언급 한대로 사용 된 확장 / 플러그인과 관련이있을 수 있습니다 .


8
jQuery 1.7의 @Neal 티켓에 따라 제거됩니다
센서

7
나는 여전히 jQ 1.7에서 그들을 본다
Victor S

22
그리고 여전히 jQ 1.7.1에서 볼 수 있습니다. 따라서 수정되지 않은 것 같습니다.
Paparappa

3
1.7.1에 동의합니다. 경고가 사라졌습니다! 감사.
Jk_

3
내 모든 확장 기능을 비활성화하고 난 여전히 1.7.2 이러한 경고를 얻을
basZero

74

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;
}());

최신 정보

이벤트 소품을 제거하는 가장 빠른 방법은 최신 성능 테스트 를 참조하십시오 .


좋은 링크! 성능 테스트를 수정했습니다. 정규식을 사용하면 일부 테스트가 느려지는 것처럼 보입니까? 내가 파산하지 않으면 모든 테스트에서 === 또는! ==을 사용하는 것이 가장 좋은 옵션을 삭제하는 동안 보입니다. jsperf.com/removing-event-props/3
Adam A

추가 코드를 다운로드하여 실행하는 오버 헤드 외에? 아니.
David Murdoch

솔루션이 한 번만 실행될 때 다른 솔루션을 벤치마킹 할 때 요점이 무엇입니까? 이 경우 단순성과 성능에 비해 코드가 적습니다. 둘 다 원한다면 배열을 layerX / layerY가없는 값으로 바꾸는 것이 어떻습니까? 성능 벤치를 확인하십시오 (어쨌든 중요하지 않음).
mekwall

28

이것에 대한 가장 짧은 해결책은 다음과 같습니다.

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

1
@Louis 나는 prototype.js에 익숙하지 않으므로 도움이 많이 들지 않지만 수정은 이것과 매우 유사해야합니다. 질문을 게시하고 누군가가 알고 있기를 바랍니다 :)
mekwall

21

이 메시지의 엄청난 양 (gmail을 사용하는 동안 방금 80000 개를 얻었습니다) 은 실제로 Chrome의 버그입니다.

Chromium에 문제를 표시 해야합니다 .


1
참고로, 문제는 거의 1 년 동안 수정되었습니다 (예 : WebKit에서 경고가 제거됨). 여전히이 문제가 표시되면 브라우저 업그레이드를 고려하십시오.
törzsmókus

14

Chrome 확장 프로그램으로 인해 발생할 수도 있으므로 jQuery 업데이트가 작동하지 않는지 확인하십시오.


5

다음과 같은 경우에 대비하여 $ .event.props의 원래 인스턴스 (배열 일 수도 있고 아닐 수도 있음)를 바꾸지 않고 또 다른 한 줄 수정이 있습니다.

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

5

이벤트를 호출 한 후 이것을 사용했습니다.

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

내 코드 에서이 패치를 만든 이후 경고 메시지가 없습니다.


4

다른 답변에 나열된 구성 문제뿐만 아니라이 오류는 사용자 코드의 간단한 오류로 인해 발생할 수 있습니다. jQuery ID 선택기에서 '#'을 잊어 버렸습니다.

나는 코드처럼 보인다

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

( "datenotset"앞의 #을 생략 함)

(분명히) 작동하지 않을뿐만 아니라 Chrome 에서이 오류 메시지가 트리거되었습니다.


3

내 코드 에서이 문제가 발생했습니다. 내가 사용하고있는 디버깅 / 검사 도구의 일부로 이벤트 객체의 모든 속성을 반복하고있는 것으로 나타났습니다. 이 특정 인스턴스에서 jQuery의 $ .extend를 사용하여 나중에 검사를 위해 객체를 복제했지만 다양한 툴킷의 표준 반복 기술 중 하나라도 경고를 트리거했을 것으로 생각합니다.

여기서는 layerX 또는 layerY의 인스턴스에 대한 코드베이스를 검색하는 것에 대한 초기 생각이 도움이되지 않았기 때문에 여기에서 언급했습니다. 속성이 이름이 아닌 일반적으로 참조되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.