2

我想向某個網頁添加一些定製鍵盤快捷鍵。使用userscript將定製鍵盤快捷鍵添加到使用Tampermonkey的Chrome

從這個問題爲導向,以公認的答案:How can I add a JavaScript keyboard shortcut to an existing JavaScript Function?

我做我自己的小功能,並增加了一個監聽器:

// ==UserScript== 
// @name  ChartGame 
// @namespace http://www.chartgame.com/ 
// @version 0.1 
// @description enter something useful 
// @match  http://www.chartgame.com/play* 
// @copyright 2012+, You 
// ==/UserScript== 
function doc_keyUp(e) { 
    switch(e.keyCode) 
    { 
    case 49: //1 
    mon_clk(3); 
    break; 
    case 50: 
    mon_clk(6); 
    break; 
    case 83: //s 
    BuySell(0); 
    break; 
    case 68: //d 
    BuySell(1); 
    break; 
    case 70: //f 
    TimelapseDwn(); 
    TimelapseUp(); 
    break; 
    default: 
    break; 
    } 
} 
document.addEventListener('keyup', doc_keyUp, false); 

,如果我將其輸入此代碼運行得完全正常Chrome瀏覽器的JavaScript控制檯,而在適當的網頁上。我可以按照我的意圖使用鍵盤快捷鍵。唯一的問題是,如果我去下一個遊戲(即圖表),我必須重新輸入包含監聽器的JavaScript代碼。

我的印象是,Tampermonkey會允許我在與@match上的表達式匹配的特定頁面上自動運行此腳本。代碼似乎運行,但沒有鍵盤快捷鍵功能。

從Chrome控制檯和Tampermonkey等擴展程序運行JavaScript代碼時缺少什麼或有什麼不同?

回答

5

該代碼在用戶腳本中不起作用,因爲它調用目標頁面定義的JavaScript函數。 Userscripts在各種沙箱中運行,因此無法輕鬆查看目標頁面的JS。

Tampermonkey(和Greasemonkey)提供了一種解決方法,與unsafeWindow。 (平原鉻userscripts不支持unsafeWindow任何有用的方式。)

因此,要使用這些功能,可以在前面他們就像這樣:

// ==UserScript== 
// @name  ChartGame 
// @namespace http://www.chartgame.com/ 
// @version 0.1 
// @description enter something useful 
// @match  http://www.chartgame.com/play* 
// @copyright 2012+, You 
// ==/UserScript== 
function doc_keyUp(e) { 
    switch (e.keyCode) { 
     case 49: 
      //1 
      unsafeWindow.mon_clk(3); 
      break; 
     case 50: 
      unsafeWindow.mon_clk(6); 
      break; 
     case 83: 
      //s 
      unsafeWindow.BuySell(0); 
      break; 
     case 68: 
      //d 
      unsafeWindow.BuySell(1); 
      break; 
     case 70: 
      //f 
      unsafeWindow.TimelapseDwn(); 
      unsafeWindow.TimelapseUp(); 
      break; 
     default: 
      break; 
    } 
} 
document.addEventListener('keyup', doc_keyUp, false); 


的另一種方法,和一個作品在簡單的Chrome用戶腳本,是Inject your code。但是由於您使用的是Tampermonkey,因此在這種情況下請使用unsafeWindow方法。

+0

謝謝,你的建議工作完美!我將不得不在Chrome瀏覽器的代碼注入一段時間,但快速,骯髒和工作是我現在喜歡的。 – Sint

+0

不客氣,樂意效勞! –