2015-08-18 57 views
1

我遇到了一個我正在編寫的Chrome擴展的問題。基本上,問題是我需要在輸入字段中模擬keydown事件,以便目標站點將其偵聽器撿起。Chrome擴展程序中的JavaScript - 創建Keydown事件

要找到偵聽器,我爲所有鍵盤事件設置一個事件偵聽器斷點,然後鍵入輸入字段。我必須經歷3個斷點,全部用於Keyboard-> keydown事件。下面是他們的基本信息:

Arguments: Arguments[1] 
E: KeyboardEvent 
This: input#header-search.form-control 

Arguments: Arguments[1] 
E: KeyboardEvent 
This: document 

Arguments: Arguments[1] 
E: KeyboardEvent 
This: Window 

我一直在使用keyboardevents沒有運氣嘗試,也許我只是還沒有正確地完成他們(這是在Chrome keyboardevents很難發現文檔),或者也許我需要去另一條路線。任何幫助將不勝感激,謝謝!

回答

1

你需要在你的擴展工作的網頁上下文中激發事件。這是對我有用的東西。

  1. 在網頁中注入jQuery。
  2. 我正在使用這個jQuery擴展:https://github.com/jquery/jquery-simulate 注入此網頁以及。
  3. 在注入腳本之前,我使用jQuery重命名了所有$事件,原因是不會與網頁腳本產生衝突。

您可以使用以下方式注入腳本(有注入JS的其他方式):

添加以下功能擴展的內容腳本

function injectJQuery() { 
    var s = document.createElement('script'); 
    s.textContent = '(' + function() { 
    //paste jQuery plugin here 
    } + ')()'; 
} 

然後同樣的模式用於注入模擬擴展

function injectJQuerySimulate() { 
    var s = document.createElement('script'); 
    s.textContent = '(' + function() { 
    //paste jQuery simulate plugin here 
    } + ')()'; 
} 

當你的擴展的內容腳本運行時調用這個tw o函數一次,以便在網頁中注入腳本。

現在,您可以發送的keydown事件與jQuery的使用下面的函數模擬插件的網頁:

function sendKeydown(elemId, keyCode) { 
    var s = document.createElement('script'); 
    s.textContent = '(' + function(elemId, keyCode) { 
    jQuery(elemId).simulate('keydown', { 
     keyCode: keyCode 
    }); 
    } + ')("' + elemId + '", "' + keyCode + '");'; 
    (document.head || document.documentElement).appendChild(s); 
    s.parentNode.removeChild(s); 
} 

使用舉例:

爲ASCII鍵碼
sendKeydown('#SomeElementId', 37); //37 is the keyCode for left arrow key 

參考表:http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes