개발자 도구를 사용하여 Chrome에서 버튼 또는 요소로 실행되는 코드를 찾는 방법 도구 를 사용하여 찾을 수 있습니다. 요소가

Chrome과 내 웹 사이트를 사용하고 있습니다.

내가 내부에서 아는 것 :

1 )이 주황색 이미지 버튼을 클릭하여 사람들이 가입하는 양식이 있습니다.

2 ) 나는 그것을 검사하고 이것이 전부입니다.
<img class="formSend" src="images/botoninscribirse2.png">

3 ) 소스 코드 상단에는 수많은 스크립트 소스가 있습니다. 나는 그것을 코딩했기 때문에 어떤 버튼을 호출하는지 알고있다<script src="js/jquery2.js" type="text/javascript"></script>

4 ) 해당 파일에서 찾을 수 있습니다 : $(".formSend").click(function() { ... });버튼으로 트리거되는 것 (상당히 복잡한 양식 유효성 검사 및 제출)과 원하는 것은 모든 웹 사이트에서 크롬 개발 도구 사용하여 찾을 수 있습니다.

요소가 어디에서 호출하는지 어떻게 알 수 있습니까?

청취자 탭이 작동하지 않았습니다. 그런 다음 클릭 이벤트 리스너를 보았습니다. 안전한 내기처럼 보이지만 거기에는 없습니다 jquery2.js(그리고 코드가 어떤 파일인지 실제로 알지 못 하므로이 모든 것을 확인하는 데 시간을 낭비합니다 .. .) :

파일 내 $(".formSend").click(function() { ... });기능 jquery2.js이 없습니다.

제시이유를 설명합니다 .

“마지막으로, 함수가 click 이벤트 핸들러에 직접 바인딩되지 않은 이유는 jQuery가 바인딩 된 함수를 리턴하기 때문입니다. jQuery의 함수는 일부 추상화 계층과 검사를 거쳐서 어딘가에서 함수를 실행합니다. “


귀하 중 일부가 제안한대로 아래의 한 가지 답변으로 작동하는 방법을 수집했습니다 .



답변

Alexander Pavlov의 답변 은 원하는 것에 가장 가깝습니다.

jQuery의 추상화와 기능이 광범위하기 때문에 이벤트의 핵심에 도달하기 위해서는 많은 후프가 필요합니다. 이 jsFiddle 을 설정 하여 작업을 시연했습니다.


1. 이벤트 리스너 중단 점 설정

당신은 이것에 가까웠습니다.

  1. Chrome 개발자 도구 (F12)를 열고 소스 탭으로 이동하십시오.
  2. 마우스로 드릴 다운-> 클릭 (확대 하려면 클릭)


2. 버튼을 클릭하십시오!

Chrome 개발자 도구는 스크립트 실행을 일시 중지하고 다음과 같이 축소 된 코드를 아름답게 묶습니다.


(확대하려면 클릭)


3. 영광스러운 코드를 찾으십시오!

이제, 여기에 트릭을하는 것입니다 흥분하지 키를 누르면 화면에 밖으로 눈을 유지.

  1. F11원하는 소스 코드가 나타날 때까지 키 (Step In)를 누릅니다.
  2. 소스 코드가 마침내 도달
    • 에서 jsFiddle의 샘플이 상기 제공된 난 프레스했다 F11 108 번 원하는 이벤트 핸들러 / 기능에 도달하기 전에
    • 이벤트를 바인딩하는 데 사용되는 jQuery (또는 프레임 워크 라이브러리) 버전에 따라 마일리지가 다를 수 있습니다
    • 충분한 헌신과 시간으로 모든 이벤트 핸들러 / 함수를 찾을 수 있습니다


4. 설명

jQuery가 추상화의 여러 계층을 통과하는 이유에 대한 정확한 대답이나 설명이 없습니다. 제안 할 수있는 것은 코드를 실행하는 브라우저에서 사용법을 추상화하는 작업 때문입니다. .

다음은 jQuery의 디버그 버전을 가진 jsFiddle 입니다 (즉, 축소되지 않음). 첫 번째 (최소화되지 않은) 중단 점의 코드를 보면 코드가 많은 작업을 처리하고 있음을 알 수 있습니다.

    // ...snip...

    if ( !(eventHandle = elemData.handle) ) {
        eventHandle = elemData.handle = function( e ) {
            // Discard the second event of a jQuery.event.trigger() and
            // when an event is called after a page has unloaded
            return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?
                jQuery.event.dispatch.apply( elem, arguments ) : undefined;
        };
    }

    // ...snip...

실행이 일시 정지되고 한 줄씩 점프 “할 때 시도에서 놓친 것으로 생각하는 이유 는 Step In 대신 “Step Over”기능을 사용했기 때문입니다. 차이점을 설명 하는 StackOverflow 답변 입니다.

마지막으로 함수가 click 이벤트 핸들러에 직접 바인딩 되지 않은 이유 는 jQuery가 바인딩 된 함수를 반환하기 때문입니다. jQuery의 기능은 추상화 계층과 검사를 거치며, 어딘가 에서 함수를 실행합니다.


답변

해결 방법 1 : 프레임 워크 블랙 박스

훌륭하고 최소한의 설정으로 작동하며 타사는 없습니다.

Chrome의 설명서 에 따르면 :

스크립트를 블랙 박스에 추가하면 어떻게됩니까?

라이브러리 코드에서 발생한 예외는 일시 중지 되지 않습니다 (예외에서 일시 중지가 활성화 된 경우), 스테핑 시작 / 종료 / 초과는 라이브러리 코드를 무시하고, 이벤트 리스너 중단 점은 라이브러리 코드에서 중단되지 않습니다. 디버거는 라이브러리에 설정된 중단 점에서 일시 중지되지 않습니다. 암호. 최종 결과는 타사 리소스 대신 응용 프로그램 코드디버깅하는 것 입니다.

업데이트 된 워크 플로는 다음과 같습니다.

  1. Chrome 개발자 도구 ( F12또는 + + i)를 열고 설정 (오른쪽 상단 또는 F1)으로 이동합니다. 왼쪽에서 ‘ 블랙 박스 ‘ 라는 탭을 찾습니다.

  1. 디버깅하는 동안 Chrome에서 무시하려는 파일 의 RegEx 패턴 을 넣는 위치 입니다. 예를 들면 : jquery\..*\.js(글로브 패턴 / 인간의 번역 : jquery.*.js)
  2. 여러 패턴 을 가진 파일을 건너 뛰려면 파이프 문자를 사용하여 다음 |과 같이 추가 할 수 있습니다 jquery\..*\.js|include\.postload\.js.
  3. 이제 아래 설명 된 해결 방법 3으로 계속 진행하십시오 .

보너스 팁! 녹슨 정규식 패턴을 신속하게 테스트하고 단계별 정규식 디버거에 문제가 있는지 확인 하기 위해 정기적으로 Regex101을 사용 합니다 (그러나 다른 많은 것들이 있습니다 🙂 . 정규 표현식에 아직 “유창하지 않은”경우 http://buildregex.com/https://www.debuggex.com/ 과 같이 작성하고 시각화하는 데 도움이되는 사이트를 사용하는 것이 좋습니다.

소스 패널에서 작업 할 때 상황에 맞는 메뉴를 사용할 수도 있습니다. 파일을 볼 때 편집기에서 마우스 오른쪽 버튼을 클릭하고 블랙 박스 스크립트를 선택할 수 있습니다. 그러면 설정 패널의 목록에 파일이 추가됩니다.

솔루션 2 : 비주얼 이벤트

가지고있는 훌륭한 도구입니다 .

Visual Event는 DOM 요소에 첨부 된 이벤트에 대한 디버깅 정보를 제공하는 오픈 소스 Javascript 책갈피입니다. 비주얼 이벤트 쇼 :

  • 이벤트가 첨부 된 요소
  • 요소에 첨부 된 이벤트 유형
  • 이벤트와 함께 실행될 코드가 트리거됩니다
  • 첨부 된 기능이 정의 된 소스 파일 및 라인 번호 (Webkit 브라우저 및 Opera 만 해당)

해결 방법 3 : 디버깅

페이지 어딘가를 클릭하거나 DOM이 수정 될 때, 그리고 다른 종류의 JS 중단 점 을 알아두면 코드를 일시 중지 할 수 있습니다 . 악몽을 피하기 위해 여기에 블랙 박스 를 적용해야합니다 .

이 경우 버튼을 클릭하면 정확히 무슨 일이 일어나는지 알고 싶습니다.

  1. 개발 도구-> 소스 탭을 열고 오른쪽에서 다음을 찾으십시오 Event
    Listener Breakpoints
    .

  2. 확장 Mouse및 선택click

  3. 이제 요소를 클릭하고 (실행이 일시 중지되어야 함) 이제 코드를 디버깅하고 있습니다. 모든 코드 누르기 F11( Step in )를 진행할 수 있습니다 . 또는 스택에서 몇 번의 점프로 돌아갑니다. 많은 점프 가있을 수 있습니다

해결 방법 4 : 낚시 키워드

개발 도구가 활성화 된 상태에서 + + F또는 다음을 사용 하여 전체 코드베이스 (모든 파일의 모든 코드)를 검색 할 수 있습니다 .

검색 #envio또는 태그 / 클래스 / ID가 파티를 시작한다고 생각하면 무엇이든지 예상보다 빨리 도착할 수 있습니다.

때때로 img많은 요소가 쌓여 있을뿐 아니라 어떤 요소가 코드를 트리거하는지 알 수 없습니다.

이것이 당신의 지식이 아닌 경우 디버깅에 대한 Chrome의 자습서를 살펴보십시오 .


답변

(가)와 같은 소리 “… 내가 선으로 선을 뛰어 …” 부분은 잘못된 것입니다. StepOver 또는 StepIn을 사용 중이거나 실수로 관련 통화를 놓치지 않습니까?

즉, 이러한 이유로 프레임 워크 디버깅은 지루할 수 있습니다. 문제점을 완화하기 위해 “프레임 워크 디버깅 지원 사용”실험을 사용할 수 있습니다. 행복한 디버깅! 🙂


답변

findHandlersJS 를 사용할 수 있습니다

크롬 콘솔에서 처리기를 찾을 수 있습니다.

findEventHandlers("click", "img.envio")

크롬 콘솔에 다음 정보가 인쇄됩니다.

  • element
    이벤트 핸들러가 등록 된 실제 요소
  • events
    우리가 관심있는 이벤트 유형에 대한 jquery 이벤트 핸들러에 대한 정보가있는 배열 (예 : 클릭, 변경 등)
  • handler
    마우스 오른쪽 단추로 클릭하고 함수 정의 표시를 선택하여 볼 수있는 실제 이벤트 핸들러 메소드
  • 선택기
    위임 된 이벤트에 제공되는 선택기. 직접 이벤트의 경우 비어 있습니다.
  • targets
    이 이벤트 핸들러가 대상으로하는 요소와 함께 나열하십시오. 예를 들어, 문서 객체에 등록되어 페이지의 모든 버튼을 대상으로하는 위임 된 이벤트 핸들러의 경우이 속성은 페이지의 모든 버튼을 나열합니다. 마우스를 가져 가서 크롬으로 강조 표시된 것을 볼 수 있습니다.

더 많은 정보를 원하시면 여기 당신이 예제 사이트에서 그것을 시도 할 수 있습니다 여기에 .


답변

이 솔루션에는 jQuery의 data 메소드가 필요합니다 .

  1. Chrome 콘솔을 엽니 다 (jQuery가로드 된 모든 브라우저가 작동하지만)
  2. 운영 $._data($(".example").get(0), "events")
  3. 출력을 드릴 다운하여 원하는 이벤트 핸들러를 찾으십시오.
  4. “handler”를 마우스 오른쪽 버튼으로 클릭하고 “기능 정의 표시”를 선택하십시오.
  5. 코드가 소스 탭에 표시됩니다

$._data()jQuery의 데이터 메소드에 액세스하고 있습니다. 더 읽기 쉬운 대안이 될 수 있습니다 jQuery._data().

이 SO 답변의 흥미로운 점 :

jQuery 1.8부터는 이벤트 데이터를 “공용 API”에서 더 이상 사용할 수 없습니다. 이 jQuery 블로그 게시물을 읽으십시오 . 이제 이것을 대신 사용해야합니다.

jQuery._data( elem, "events" ); elem은 jQuery 객체 또는 선택자가 아닌 HTML 요소 여야합니다.

이것은 내부의 ‘비공개’구조이므로 수정해서는 안됩니다. 디버깅 목적으로 만 사용하십시오.

이전 버전의 jQuery에서는 다음과 같은 이전 방법을 사용해야합니다.

jQuery( elem ).data( "events" );

버전에 관계없이 jQuery는 다음과 같습니다. (jQuery._data || jQuery.data)(elem, 'events');


답변