2014-09-12 1 views
4

선택한 텍스트를 처리하는 Chrome 확장 프로그램을 만들려고합니다. 일부 웹 사이트 페이지의 선택 가능한 텍스트 컨텐츠에는 새 페이지로 이동하는 클릭/마우스 업/다운 이벤트 핸들러가 있습니다.페이지의 마우스/키보드 이벤트 처리기를 차단 (아마도 취소)

기본 텍스트 선택을 간섭하지 않고 페이지의 임의 이벤트 처리기 을 일시적으로 비활성화 (및 복원)하는 백그라운드 또는 내용 스크립트의 방법이 있습니까??

최악의 경우 나는 분리, 본문 HTML을 복제하고 선택을 허용 한 다음 바인딩 된 원본을 복원하는 것입니다. 문제가 생긴 것 같습니다.

감사합니다.

답변

6

대부분의 HTML DOM 이벤트는 capture-target-bubble event model을 따릅니다. 즉, 예를 들어 버튼을 클릭하면 "클릭"이벤트가 먼저 루트에서 버튼 아래로 발송 된 다음 다시 백업된다는 것을 의미합니다. 이벤트 전파를 중지 할 수 있으므로 다음 레벨의 이벤트 리스너가 이벤트를 통지받지 못합니다.

이벤트를받는 가장 빠른 방법은 루트에 있으며 종종 캡처 단계에서 window입니다. 버블 링 단계에서 이벤트 리스너를 결합

// in a content script, at run_at:document_start 
window.addEventListener('click', function(event) { 
    event.stopImmediatePropagation(); 
}, true); 

많은 웹 페이지 JQuery와 DOM 이벤트를 관리하는 데 사용하는, 그래서 이전 : true로 설정 세 번째 매개 변수로 addEventListener를 사용하여 캡처 단계에 이벤트 리스너를 바인딩하려면 방법은 대부분의 사이트에서 작동합니다. 페이지에서 jQuery를 사용하지 않는 경우 이벤트 수신기를 document_start에 바인딩하여 다른 모든 이벤트 수신기보다 이벤트 수신기가 트리거되도록해야합니다.

+0

죄송합니다. 질문에 적용되지 않습니다. –

+0

@ uosɐs 45 초 내에 대답이 적용되지 않는다는 것을 어떻게 알 수 있었습니까? 페이지가 기본 이벤트를 방해하지 못하게하려는 경우 신뢰할 수있는 유일한 방법은 페이지에서 이러한 이벤트를 보지 못하게하는 것입니다. –

+1

크롬 확장의 고립 된 세계의 미묘한 차이는 고려하지 않았습니다. 이것은 일반적인 DOM 이벤트 정보에 대한 대답입니다. –

관련 문제