2009-10-26 3 views
7

내가 조사하고있는 페이지에는 숨겨진 <input type="hidden" name="Foo" value="123 /> 요소가 있습니다. 여기에 Javascript/AJAX가 값을 수정합니다. Javascript에서이 값을 수시로 변경하는 코드가 어디에 있는지 찾으려고합니다.요소를 수정하는 자바 스크립트 스 니펫을 찾는 방법은 무엇입니까?

자바 스크립트에서 해당 요소를 사용/수정하는 데 도움이되는 도구가 있습니까? Firebug가 이것을 제공합니까?

참고 : 코드에서 "Foo"를 찾으려고했지만 일치하는 제목을 찾지 못했습니다. JSON과 Mootools가로드되고 응용 프로그램 별 코드가 생성되어 수천 줄의 코드가 생성됩니다. 요소는 아마도 간접적으로 액세스됩니다.

답변

1

어떻게 자바 스크립트가이 값을 수정하고 있음을 알고 있습니까? 그것은 당신이 이미 변경된 것을 알기 때문에 호출 된 시점을 이미 알고 있기 때문에 변경을 시작한 첫 번째 이벤트에서 Firebug에 중단 점을 제안합니다 (다른 요소의 onclick 특성 일 가능성이 있음).

자바 스크립트에서 푸코의 가치를 바꾸는 "일반적인"방법을 말하는 것이 어렵습니다. 다양한 접근 방식, 라이브러리, 구문을 가진 라이브러리가 많기 때문입니다.

예를 들어, "Foo"검색을 시도했지만 찾지 못하면 스크립트가 DOM을 탐색하여 입력 값을 "무언가의 첫 번째 자식"으로 변경할 수 있습니다. 입력의 부모 요소의 이름이나 ID를 검색하고 거기에서 코드를 이해하려고합니다.

나는 보통 파이어 버그의 디버깅 기술과 함께 사용하는 모든 스크립트의 자바 스크립트 로직을 이해하려고 노력하지만 보통 라이브러리를 사용하는 스크립트에서만 그렇다. 방화범은 당신이 어떤 값을 설정하는 방법에 중단 점을 정의 할 수없는 경우

+0

+1 변경을하는 후보자의 원본을 grep하는 일반적인 방법입니다. 다행히도 다른 답변에서 설명한대로 중단 점을 설정하는 더 좋은 방법이 있어야합니다. – GuruM

0

, 페이지에 이런 식으로 뭔가를 삽입 할 수 있습니다 (파이어 폭스 전용) :

$("textarea")[0].__defineSetter__("value", function(val) { 
    alert("called"); 
}) 

그리고 방화범 또는 사용하고있는 기능에 대한 중단 점 중 하나를 console.log 또는 무엇이든 스택을 방화 켓 콘솔에 덤프 할 수 있습니다.

다양한 종류의 중단 점을 지원하는 방화범 플랜에 대한 프레젠테이션을 보았지만 지금은 링크를 찾을 수 없습니다. .value = ... :


[편집] 위의 값은 값 속성에 할당하여 설정되는 경우에 대한 것이다. 속성이 인 순간을 잡으려면 (.setAttribute("value", ...)) DOM 변경 루틴을 사용할 수 있습니다.

+0

+1 정보. __how__에 대한 정보를 DOM mutation 리스너를 사용하여 공유 할 수 있습니까? 링크 또는 아마도 2? 감사. – GuruM

+1

@ GuruM : 이벤트 이름이 DOMAttrModified 인 addEventListener를 사용하십시오 (https://developer.mozilla.org/en-US/docs/DOM/Mutation_events 참조). 돌연변이 청취자는 다른 메커니즘을 선호하여 단계적으로 폐지되고 있습니다. 변이 관찰자 (해당 MDN 페이지에서도 언급 됨) – Nickolay

+0

+1 @ 니콜라이. 링크를 가져 주셔서 감사합니다. – GuruM

8

방화 광 1.5는 HTML 패널에서 "중단시 수정"됩니다. http://getfirebug.com/doc/breakpoints/demo.html#html - DOM (HTML) 돌연변이 이벤트 중단을 참조하십시오.

+0

+1 정보. breakpoint를 설정하는 break-on-modify 기능이 존재합니다.그러나 그러한 중단 점을 설정하려고 시도했을 때 작동하지 않았습니다. 즉, 단추 제목/상태가 변경되었다고 말하는 코드를 변경하지 않았습니다. 따라서 중단 점 설정과는 별도로 수행해야 할 작업에 대해 확신하지 못합니다. – GuruM