使用greasemonkey或tampermonkey触发键盘事件

时间:2016-03-25 19:41:41

标签: javascript greasemonkey tampermonkey

我创建了一个用户脚本,用于定期从Google Chrome中删除历史记录。我能想到的最简单的方法是安装Clear Cache https://chrome.google.com/webstore/detail/clear-cache/cppjkneekbjaeellbfkmgnhonkkjfpdn?hl=en,它允许您配置用于删除历史记录的键盘快捷键。我设置的快捷方式是alt+9

这是我打开所需网页时用于触发alt+9事件的代码。

var event = document.createEvent('Event'); 
event.initEvent('keydown', true, true); 
event.keyCode = 18&&57;
document.body.dispatchEvent(event);

当我访问目标网站时,历史记录不会被清除,我不知道为什么。我发送的事件与按alt+9的事件不一样吗?手动按alt+9后,快捷方式确实有效。

编辑:也尝试了

// @require      http://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js
// @grant        GM_info

    var press = jQuery.Event("keypress");
press.altKey = true;
press.which = 57;
$("whatever").trigger(press);

function GM_main ($) {
    //alert ('jQuery is installed with no conflicts! The version is: ' + $.fn.jquery);
}

if (typeof jQuery === "function") {
    console.log ("Running with local copy of jQuery!");
    GM_main (jQuery);  
}
else {
    console.log ("fetching jQuery from some 3rd-party server.");
    add_jQuery (GM_main, "2.2.2");
}

function add_jQuery (callbackFn, jqVersion) {
    var jqVersion   = jqVersion || "2.2.2";
    var D           = document;
    var targ        = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
    var scriptNode  = D.createElement ('script');
    scriptNode.src  = 'http://ajax.googleapis.com/ajax/libs/jquery/'
                    + jqVersion
                    + '/jquery.min.js'
                    ;
    scriptNode.addEventListener ("load", function () {
        var scriptNode          = D.createElement ("script");
        scriptNode.textContent  =
            'var gm_jQuery  = jQuery.noConflict (true);\n'
            + '(' + callbackFn.toString () + ')(gm_jQuery);'
        ;
        targ.appendChild (scriptNode);
    }, false);
    targ.appendChild (scriptNode);
}

1 个答案:

答案 0 :(得分:2)

event.keyCode = 18&&57; 工作。这是一个逻辑/布尔操作,实际上是57,因为18的计算结果为true,所以第二个操作数被赋值。

二进制操作18&57也不代表alt+9。要在按住alt键的同时模拟keydown 9,您必须提供57的keycode并将alt-indicator设置为true。

var event = new KeyboardEvent();
event.keyCode = 57;
event.which   = 57;
event.altKey  = true;
event.ctrlKey = false;
event.shiftKey= false;
event.target  = window;
window.dispatchEvent(event);

这样做可以操作web应用程序,但是,您可以访问浏览器功能,因为这可以由任何网站完成,这意味着高安全风险。

用户脚本不比网站更具特权。您可以开发一个插件来全面访问浏览器gui。有用于开发插件的模板/样板。它只是将JavaScript压缩为.xpi文件。