使用greasemonkey或tampermonkey触发键盘事件

问题描述 投票:0回答:2

我创建了一个用户脚本,用于定期从 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);
}
javascript greasemonkey tampermonkey
2个回答
2
投票

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

二元运算

18&57

也不会代表
alt+9
。要在按住 alt 键时模拟 
keydown 9
,您必须将 
keycode
 设置为 57 并将 alt 指示器设置为 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);

这样做你可以操纵网络应用程序,但是,你

不能访问浏览器功能,因为任何网站都可以这样做,这意味着很高的安全风险。

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


0
投票
我将这段代码添加到 Greasemonkey 中的 min 脚本中

function End(){ var event = new KeyboardEvent('keydown', { key: 'End', code: 'End', which: 35, keyCode: 35, }); window.dispatchEvent(event); }
在脚本中任意位置调用

End();

时,都会模拟按下END键

© www.soinside.com 2019 - 2024. All rights reserved.