2016-11-05 8 views
0

ねえ、私の友人と私はJavaScriptに新しく、いくつかのコードで問題が発生しています。 現在、Googleでは、特定のGoogleドキュメントでいつ、どのくらいユーザーが作業するかを検出するクロム拡張機能を作成しようとしています。クローム拡張:Googleドキュメントで検出するキー押下

我々の現在の方法は、「キープレス」イベントリスナを作成する必要があります。どのdocs.googleウェブページでも動作するcontent.jsファイルに入れます。問題は、タイトル/その他の編集ページにいるときに機能しますが、ユーザーが実際にドキュメントを編集しているときに何らかの理由で登録されません。私たちは他のウェブサイトで試してみましたが、うまくいきました。それをbackground.jsに追加することはできません。

var divs = document.getElementsByTagName("iframe"); 
for(var i = 0; i < divs.length; i++){ 
divs[i].sandbox = 'allow-scripts' 
divs[i].addEventListener('keydown', handler, true); 

var handler = function (e) { 
    handler.data.push(e); 
    console.log("success"); 
    console.log(handler.data); 
} 
handler.data = []; 
window.addEventListener("keydown", handler); 
document.addEventListener("keydown", handler); 

だから我々は、コンテンツのスクリプトを使用できるように、Googleドキュメントの文書の「IFRAME」に関する権限を変更しようとしたが、それはまだ動作しませんでした(ここではコードです)何か助けていただきありがとうございます

答えて

2

g-docsまたはg-sheetのメインコンテンツに使用されているiframeは表示されませんが、manifest.jsonコンテンツスクリプトの宣言で"all_frames": true"match_about_blank": trueを使用すると、 iframeが自動的に表示されます。

もう一つのアイデアは、サイトがそれらを見て前にイベントをキャプチャすることです:manifest.jsonをして、あなたのコンテンツスクリプトの"run_at": "document_start"を宣言し、addEventListenerをのuseCaptureパラメータにtrueを使用します。document.addEventListener("keydown", handler, true); - このラインはあなたのコンテンツスクリプトのメインコードで実行する必要がありますページのDOMが構築される前にリスナーを登録するには、それはいくつかのloadまたはDOMContentLoadedコールバックの内側に入れないでください。

+0

我々は、我々のコードを編集してみました(http://imgur.com/a/wWNqS)我々はまだ、エラーメッセージ(http://imgur.com/a/9KbbR) –

+0

はあなたに感謝を取得しています。あなたはちょうど私達の夜を救った –

+0

これは本当に素晴らしい答えです(いつものように)、残念ながら私のために今働いていないようです。 'getEventListeners(ドキュメント)を見てから、[「のkeydown」];'デベロッパーツールでは、私はそれが私がdoc_start' 'で、私たちは過去を得れば、それらを作成するときに、私のリスナーが存在しloads-たらGDocsページが実際にイベントリスナーを削除していると思います'ロード'、彼らはなくなった。答えは動作するはずですので –

0

私は同じ質問を持っていた(Googleドキュメントでのキー入力を検出し、使用)と、そのページが私に与えたソリューション:http://features.jsomers.net/how-i-reverse-engineered-google-docs/

var editingIFrame = $('iframe.docs-texteventtarget-iframe')[0]; 
     if (editingIFrame) { 
     editingIFrame.contentDocument.addEventListener("keydown", hook, false); 
     } 
    function hook(e){ 
     var keyCode = e.keyCode; 
     console.log("keycode:" + keyCode);  
} 

は、それが他の誰かを助けることができると思います。

関連する問題