11

我想为某个网页添加一些自定义键盘快捷键。

使用从这个问题中接受的答案作为指导:如何将 JavaScript 键盘快捷键添加到现有的 JavaScript 函数?

我做了自己的小函数并添加了一个监听器:

// ==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 允许我在特定页面上自动运行该脚本,这些页面与 .on 表达式匹配@match。代码确实可以运行,但没有键盘快捷键功能。

从 Chrome 控制台和 Tampermonkey 等扩展程序运行 javascript 代码缺少什么或有什么不同?

4

1 回答 1

10

该代码在用户脚本中不起作用,因为它正在调用目标页面定义的 javascript 函数。用户脚本在各种沙箱中运行,因此无法轻易看到目标页面的 JS。

Tampermonkey(和 Greasemonkey)通过unsafeWindow. (普通的 Chrome 用户脚本不支持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在这种情况下使用该方法。

于 2012-11-13T22:06:41.163 回答