繁体   English   中英

用滑脂猴子或篡改猴子触发键盘事件

[英]Trigger keyboard event with greasemonkey or tampermonkey

我创建了一个用户脚本,用于定期从Google Chrome浏览器中删除历史记录。 我能想到的最简单的方法是安装“ Clear Cache https://chrome.google.com/webstore/detail/clear-cache/cppjkneekbjaeellbfkmgnhonkkjfpdn?hl=zh-CN ,该工具可让您配置用于删除历史记录的键盘快捷键。 我设置的快捷键是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);
}

event.keyCode = 18&&57; 工作。 这是一个逻辑/布尔运算,实际上结果为57,因为18的计算结果为true,因此分配了第二个操作数。

同样,二进制运算18&57将不表示alt+9 要在按住alt键的同时模拟keydown 9 ,您必须输入57的keycode并将alt- keycode设置为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文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM