2010-12-07 7 views
3

私は少しgreasemonkeyのスクリプト/ bookmarklet/Google Docsのために何を書こうとしています。私が追加したい機能は、keypress/keyup/keydownイベントハンドラ(これら3つのうちの1つ)が必要です。残念ながら、Javascriptは私のお気に入りではありません。エディットペインでキー入力イベントをキャプチャすることはできません。最後の手段として、私は次のことを試してみた:JavaScript(Google Docs)でkeypressをキャプチャする

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!");}; 
    } 
})(); 

しかし、これはまだ編集ペインでキー入力をキャプチャしません - 全く迷惑な警告を(他のほとんどのサイトのために働くように見えるものの...) 。私はChromeとFirefoxの両方でチェックしました(いずれかで動作するようにはできません)。

私はFirebugで "Log Events"を試してみました(登録されたすべてのイベントを、Firebug、Eventbugのすっきりした小さな拡張でチェックアウトしました)。それらのイベントがキーを押すと発砲しているようには見えなかった。

編集:
[ティム]を明確にするために、私はいくつかの注釈とともに、このscreenshotを作った...私が話している screenshot

「編集ペインには、」Javascriptedアップのdivの束のようです私が入力したものを表示します。

アイデア?ありがとう!

+0

「編集中」とはどういう意味ですか?それはiframeですか?テキストエリア? –

+0

@Jacobあなたのプロフィールのメールアカウントを確認してください。 – Will

答えて

3

Googleドキュメントの編集ではiframeが使用されます。 iframeのドキュメントにリスナーを添付する必要があります。まだ完成していないiframeで何か複雑なことをしているようですが、Firefoxの場合は以下のように動作します:

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()を使用して、イベントを添付する前にページが読み込まれていることを確認しています。 私はあなたと裸JavaScriptでそれを行うことができると思います:要素は最後のものだけを登録します

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"の3つを無駄にしようとしました。 – Jacob

0

ページ上のすべての要素にリスナーをアタッチする必要はありません。文書に添付するだけで十分です。

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

それはあなたがIEを心配する必要はありませんし、addEventListener方法を使用することができるのGreaseMonkeyスクリプトですので。

+0

これは私が最初に試したことです...私の問題はGoogle Docsに固有のようです。上記のコードは、他のサイトでも正常に動作します。ドキュメントを編集するときは、Googleドキュメントには表示されません。その場合、これはあなたのために機能しますか? – Jacob

+0

私は彼らがイベントハンドラのさらなる実行のためにイベントを停止すると思うでしょう。私はそれが自分で働くことができませんでした。イベントリスナーを削除して手動で呼び出す必要があると思います。彼らが使用するクロージャjsライブラリを見てみることができます。 –

関連する問題