Debugger.scriptParsed
이벤트를 찾을 각 스크립트에 대한 scriptId
를 생성하는 것입니다. 파싱 된 각 스크립트 파일은 이벤트를 발생시키고 고유 한 ID를 수신해야합니다. 개별 스크립트 파일뿐만 아니라 페이지 소스 내의 <script>
태그의 각 인스턴스는 고유 한 ID를 갖습니다.
이벤트 콜백이 전달되는 매개 변수가 많이 있습니다. arguments
개체를 로그 아웃하여 모든 인수를 검사 할 수 있습니다. 예를 들어, 스크립트 파일의 경우 url
이 반환되고 startLine
은 HTML 리소스에 나타나는 <script>
태그의 오프셋을 제공합니다.
on('Debugger.scriptParsed', function() {
console.log(JSON.stringify(arguments, null, 2)(
});
조사
업데이트 된 질문에 대한 응답에서, 나의 이해는 디버거 모드에서 전체 구문 분석을 시도하고 사전에 구문 분석과 최적화하려고하지 않는 것입니다. v8 코드 기반을 실제로 이해할 수 없었지만 약간의 테스트를 수행했습니다.
버튼과 별도의 스크립트 파일로 HTML 페이지를 만들었습니다. 페이지로드 직후에 하나의 함수를 실행했습니다. 버튼 클릭시 다른 기능이 실행됩니다.
document.addEventListener("DOMContentLoaded",() => {
document.getElementById('clickMe').addEventListener('click',() => clicked);
});
나는 Debugger.scriptParsed
에서 출력을 검사했다. 스크립트 파일을 바로 파싱했습니다. 버튼을 클릭하면 추가 출력 항목이 없습니다. eval
을 사용하여 동적으로 호출되는 clicked
을 호출하도록 처리기를 변경 한 경우 새로운 스크립트 청크가 출력됩니다.
eval('clicked()');
이것은 파서가 실행될 때까지 파서가 그것에 대해 알 수있는 방법이 없으므로 의미가 있습니다. 동일한 내용이 인라인 핸들러에도 적용됩니다. onclick="doSomething()"
다른 확장 기능은 Chrome 확장 URI 및 내부 URL입니다.
이 함수는 [id에 의한 스크립트를 가져옵니다] (https://cs.chromium.org/chromium/src/v8/src/inspector/v8-debugger-agent-impl.cc?l=662&rcl=f212dbeaa1c0b0c97ef1d01c4cf61a2d920157b8) . 따라서 V8 엔진이 어떻게 소스 코드에서 추론 할 수있는 ID를 할당하는지에 대한 질문이 있습니다. – wOxxOm