programing

event.layerX 및 event.layer 관련 WebKit 문제y

stoneblock 2023. 5. 24. 21:39

event.layerX 및 event.layer 관련 WebKit 문제y

저는 방금 제가 최신 (카나리아) 빌드의 크롬에서 사용되지 않는 경고를 많이 받는다는 것을 알아차렸습니다.

event.layerX 및 event.layerY가 손상되어 WebKit에서 사용되지 않습니다.그것들은 가까운 미래에 엔진에서 제거될 것입니다.

jQuery가 일을 망치는 것 같습니다.

사용 중:jquery-1.6.1.min.js.

최신 jQuery 버전으로 업그레이드하는 것이 도움이 될까요, 아니면 아직 수정되지 않았나요, 아니면 크롬 버그인가요, 아니면 다른 것인가요?

PS

일반적인 오류라고 생각하기 때문에 코드를 보여줄 수는 없지만, jQuery 개체에 액세스하려고 할 때 또는 jQuery가 레이어 X/레이어 Y에 액세스하려고 할 때 경고가 발생하는 것이 의심됩니다(글쎄요, 오류:P를 고려하면 그렇습니다).

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

그래서...

무슨 일이야?

편집

jQuery 1.7은 출시되었으며 이 문제를 해결합니다.

블로그에서 자세히 읽어보십시오.

무슨 일이에요?

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

jQuery가 코드를 업데이트하여 그것을 건드리지 않기를 바라지만, 동시에 WebKit는 이벤트에 대한 사용 중지 경고를 기록하지 말았어야 했습니다(적어도 제 생각에는).마우스 이동 핸들러 하나로 콘솔이 폭발합니다.:)

여기 최근 jQuery 티켓이 있습니다: http://bugs.jquery.com/ticket/10531

업데이트: jQuery 1.7로 업그레이드하면 이 문제가 해결됩니다.

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

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

갱신하다

이벤트 소품을 제거하는 가장 빠른 방법은 무엇인지 알아보려면 최신 성능 테스트를 참조하십시오.

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

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

이러한 엄청난 양의 메시지는 크롬의 버그입니다.

당신은 크롬에 대한 이슈를 시작해야 합니다.

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

만약을 위해 $.event.props(어레이일 수도 있고 아닐 수도 있음)의 원래 인스턴스를 교체하지 않고 다른 한 줄 수정이 있습니다. :-)

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

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

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

그것은 저에게 효과가 있었습니다. 저는 제 코드에 이 패치를 적용했기 때문에 경고 메시지가 없습니다.

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

다음과 같은 코드가 있었습니다.

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

("datenotset" 앞에 #을 표시합니다.)

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

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

단순히 코드 기반에서 레이어 X 또는 레이어 Y의 인스턴스를 검색하는 것이 도움이 되지 않았기 때문에 여기서 언급합니다. 속성은 이름이 아닌 일반적으로 참조되고 있었습니다.

언급URL : https://stackoverflow.com/questions/7825448/webkit-issues-with-event-layerx-and-event-layery