2012-10-02 3 views
0

타사 사이트에 할당 된 자바 스크립트 이벤트 및 동작을 감지 할 수있는 방법이 있습니까 (구현되었거나 이론상으로)?타사 사이트에서 자바 스크립트 이벤트를 감지하는 방법

외국 사이트에 javascript를 주입하고 onsubmit, onclick, onfocus 및 다른 이벤트를 덮어 쓰지 않으려는 경우 이러한 콜백을 감지하여이를 덮어 쓰지 않고 확장 할 수 있습니까?

아이디어는 내가 했어 :

  • 은 머리가없는 브라우저에서 사이트를 실행하거나 손 전에 자바 스크립트 엔진 즉석에서 자바 스크립트 구문 분석 실행 된 모든 자바 스크립트
  • 를 캡처하고 준수 자바 스크립트 타사 희망 당신은 단지 기존 이벤트 핸들러를 덮어 쓰지 않고 새로운 이벤트 처리기를 추가하려면 내 파서의 기대

답변

3

, 당신은 addEventListener() 또는 attachEvent() 대신 012을 설정 (IE 이전 버전)를 사용할 수 있습니다, .onsubmit 등 ... 이전 이벤트 핸들러에 영향을주지 않고 새 이벤트 핸들러를 추가하십시오.

// add event cross browser 
function addEvent(elem, event, fn) { 
    if (elem.addEventListener) { 
     elem.addEventListener(event, fn, false); 
    } else { 
     elem.attachEvent("on" + event, function() { 
      // set the this pointer same as addEventListener when fn is called 
      return(fn.call(elem, window.event)); 
     }); 
    } 
} 

나는 일반 자바 스크립트는 일반 자바 스크립트 이벤트를 가지고있는 것을 볼 수 DOM 객체를 기존의 심문에서 알고 있어요 더 크로스 브라우저 방법은 없습니다 : 여기

이벤트를 추가하는 간단한 크로스 브라우저 기능입니다 핸들러는 addEventListener 또는 attachEvent을 통해 설치됩니다. 이벤트 처리기가 jQuery와 함께 설치되면 this technique을 통해 조사 할 수 있습니다.

모든 이벤트 처리기를 나열하는 속성을 추가하기 위해 수행 된 향후 사양 작업이 있지만 아직 구현되지 않았는지 확실하지 않습니다. 해당 내용은 here에 대한 자세한 내용을 볼 수 있습니다. 이벤트 핸들러를 들어

onclickonsubmit는, onfocus는, 등등 ..., 당신은 사람들이 이러한 이벤트에 할당 핸들러가 있고 당신이 원하는 경우에 당신이 다음을 연결할 수있는보고 기존의 모든 DOM 요소를 확인할 수 있습니다 설치.

// add other events here you are interested in 
var events = ["onclick", "onsubmit", "onfocus", "onblur"]; 
var elems = document.getElementsByTagName("*"), item; 
for (var i = 0; i < elems.length; i++) { 
    item = elems[i]; 
    for (var j = 0; j < events.length; j++) { 
     if (item[events[j]]) { 
      console.log("event handler for " + events[j]); 
     } 
    } 
} 
+0

문제의 두 번째 부분입니다. 첫 번째 절반은 내 이벤트를 타사 DOM에 연결하기 전에 어떤 DOM 요소에 이벤트가 할당되었는지 파악하는 것입니다. –

+0

@ DanielNill - 내 답변에 더 많은 정보를 추가했습니다. 나는 당신이이 부분을 원한다는 당신의 질문이 명확하지 않다고 말하고, 당신이 정말로 성취하고자하는 것에 대해 더 많이 말하면 도움이 될만한 귀중한 정보를 얻게 될 것입니다. – jfriend00

+0

감사합니다. 귀하의 후속 조치는 훌륭하고 정확하게 제가 찾고있는 것입니다. 원래의 질문이 분명하지 않은 것을 유감스럽게 생각합니다. –

0

당신은 실제로 addEventListener의 프로토 타입과 attachEvent 변경하여 당신이 원하는 것을 얻을 수 있습니다 물론

// intercept events cross browser 
var method; 
if (HTMLElement.prototype.addEventListener) { 
    method = 'addEventListener'; 
} else { 
    method = 'attachEvent'; 
} 
HTMLElement.prototype.realAddEventListener = HTMLElement.prototype[method]; 
HTMLElement.prototype[method] = function(a,b,c) { 
    console.log('here are all the events being added:', arguments); 
    this.realAddEventListener(a,b,c); 
}; 

, 그것은이 다른 페이지 스크립트 전에 페이지에 추가하는 것이 중요을하지만, jQuery와 같은 라이브러리의 앞이나 뒤에 올 수 있지만 prototype.js가있는 프로토 타입에는 충돌이있을 수 있습니다.

또한 onclicks과 전체 이벤트 집합을 확인하는 것이 좋습니다.이 이벤트는 자바 스크립트 콘솔에서 console.dir(document.createElement('a'))을 실행하여 찾을 수 있습니다.

관련 문제