2016-11-05 55 views
0

嘿,我的朋友和我剛接觸javascript並遇到一些代碼問題。 目前我們正試圖通過檢測按鍵來檢測用戶在特定Google文檔上工作的時間和數量。Chrome擴展程序:在Google文檔中檢測按鍵問題

我們當前的方法涉及到創建一個'按鍵'事件監聽器。我們將其放入可在任何docs.google網頁上運行的content.js文件。事情是,它在你編輯標題/其他內容的頁面上工作,但由於某種原因,當用戶實際編輯文檔時,它不會註冊。我們在其他網站上嘗試過它,並將其添加到background.js中不起作用。

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); 

因此,我們試圖改變對谷歌的文檔文件的「IFRAME」的權限,這樣我們就可以使用內容腳本,但它仍然沒有工作(這裏的代碼)

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

任何幫助表示讚賞

回答

2

我沒有看到用於在G-文檔或G表的主要內容I幀,但如果你堅持,你可以在manifest.json的內容腳本聲明中使用"all_frames": true"match_about_blank": true,使其運行在所有iframes自動。

另一個想法是網站看到之前捕捉到事件:manifest.json中聲明"run_at": "document_start"爲您的內容腳本,並使用true爲使用addEventListener useCapture參數:document.addEventListener("keydown", handler, true); - 這條線應該在你的內容腳本的主代碼執行要在構建頁面DOM之前註冊監聽器,請勿將其放入一些loadDOMContentLoaded回調中。

+0

我們嘗試編輯我們的代碼(http://imgur.com/a/wWNqS),但我們仍然收到錯誤消息(http://imgur.com/a/9KbbR) –

+0

謝謝;你只是保存了我們的夜晚 –

+0

這是一個非常好的答案(一如既往),不幸的是,它現在似乎不適合我。從devtools中的'getEventListeners(document)[「keydown」];''我認爲GDocs頁面實際上是在移除事件監聽器時 - 當我在'doc_start'創建監聽器時存在監聽器,但是一旦我們過去'負載',他們走了。 –

0

我有同樣的問題(檢測和谷歌文檔使用按鍵)和頁面給我的解決方案: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);  
} 

希望它可以幫助別人。