2010-12-07 5 views
3

Google 문서 도구에 사용할 greasemonkey 스크립트/북마크릿/글을 쓰려고합니다. 추가하고자하는 기능에는 keypress/keyup/keydown 이벤트 핸들러가 필요합니다 (그 중 하나). 불행히도 Javascript는 제 포르테가 아니므로 편집 창에서 키 누르기 이벤트를 캡처 할 수 없습니다 (?). (... 대부분의 다른 사이트에 작동하는 것 같다 있지만) 더 성가신 경고 -자바 스크립트에서 키 누르기 캡처 (Google 문서 도구)

javascript:(function(){ 
    els = document.getElementsByTagName("*"); 
    for(i=0;i<els.length;i++){ 
    els[i].onkeypress=function(){alert("hello!");}; 
    els[i].onkeyup=function(){alert("hello2!");}; 
    els[i].onkeydown=function(){alert("hello3!");}; 
    } 
})(); 

그러나이 여전히 편집 창에서 키 누름을 캡처하지 않습니다 : 최후의 수단으로, 나는 다음 시도했다 . 나는 크롬과 파이어 폭스를 모두 체크했다. (둘 중 하나에서 작동하도록 할 수는 없다.)

Firebug에서 "Log Events"를 시도했는데 (Firebug, Eventbug에 대한 간단한 확장을 통해 등록 된 모든 이벤트를 체크 아웃했습니다); 그 사건들이 keypresses에서 발사되는 것처럼 보이지 않았습니다.

편집 :
내가 얘기 해요 "편집 창"이 보인다 screenshot

이 Javascripted 업 된 div의 무리로 ... [팀이, 나는 몇 가지 주석이 screenshot을 만들어 명확히하기 위해 내가 무엇을 입력했는지 표시.

아이디어가 있으십니까? 감사!

+0

당신은 "편집 창"에 의해 무엇을 의미합니까? 그것은 iframe입니까? 텍스트 영역? –

+0

@Jacob 프로필 이메일 계정을 확인하십시오. – Will

답변

3

Google 문서에서 수정하는 것은 iframe을 사용합니다. iframe의 문서에 리스너를 연결해야합니다. 내가 아직 완전히 해결하지 못하고 iframe을 동반하는 일을 할 것 같다,하지만, 다음은 파이어 폭스를 위해 작동하는 것 같다 :

var iframe = document.getElementsByTagName("iframe")[0]; 
if (iframe) { 
    iframe.contentDocument.addEventListener("keypress", function(evt) { 
     console.log("iframe keypress: " + evt.which); 
    }, false); 
} 
+0

아, 나는 그것에 대해 생각하지 않았으며, 실제로 내가 원했던 것을 정확하게 수행합니다 - 감사합니다! – Jacob

0

나를 위해 일하는 것 같아요.하지만 jQuery $ (document) .ready()를 사용하여 내 페이지가 어떤 이벤트를 첨부하기 전에로드되었는지 확인합니다.

for(i=0;i<els.length;i++){ 
    els[i].onkeypress=function(){alert("hello!");}; 
    els[i].onkeypress=function(){alert("hello2!");}; 
    els[i].onkeypress=function(){alert("hello3!");}; 
} 

이 요소는 마지막 하나를 등록합니다 : 당신이 이벤트에 하나 개 이상의 기능을 첨부 할 수 없습니다 그런데

window.onload = function() 
{ 
    els = document.getElementsByTagName("*"); 
    for(i=0;i<els.length;i++) { 
    els[i].onkeypress=function(){alert("hello!");}; 
    } 
} 

: 나는 당신이 맨 손으로 자바 스크립트에서 그것을 할 수 있다고 생각 (이전 함수를 덮어 씀),이 경우 "alert ("hello3! ");"

+0

오타, 오타되었습니다 (위의 문제를 해결할 것입니다), 감사합니다! "onkeypress", "onkeyup"및 "onkeydown"의 세 가지를 모두 사용해 보았습니다. – Jacob

0

페이지의 모든 요소에 수신기를 연결할 필요는 없습니다. 문서에 첨부하는 것으로 충분합니다.

window.addEventListener('load', function() { 
    document.addEventListener('keypress', function() { alert("hello!"); }); 
} 

당신이 IE에 대해 걱정할 필요가 없습니다와 addEventListener 방법을 사용할 수있는 Greasemonkey와 스크립트이기 때문에.

+0

그래, 그게 내가 먼저 시도한거야 ... 내 문제는 Google 문서 도구에 특정 것 같습니다. 위 코드는 문서를 수정할 때 Google 문서 도구가 아닌 다른 사이트에서 정상적으로 작동합니다. 이 경우이 방법이 효과가 있습니까? – Jacob

+0

나는 이벤트 처리기를 추가로 실행하기 위해 이벤트를 중단한다고 생각합니다. 나는 그것을 스스로 할 수 없었다. 이벤트 리스너를 제거하고 수동으로 호출해야한다고 생각합니다. 그들이 사용하는 closure js 라이브러리를 살펴볼 수있다. –