You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何存储prompt输入的按键并实现Tampermonkey自定义快捷登出脚本?

自定义按键登出油猴脚本修复方案

原代码核心问题

  • 变量类型不匹配:prompt()返回的是字符串类型的按键字符,原代码用数字类型的event.keyCode做相等判断,永远无法触发条件
  • 无效API调用:<button>元素没有submit()方法,该方法仅属于表单元素,调用会抛出错误阻塞代码运行
  • 作用域问题:油猴运行在独立沙箱中,直接调用页面定义的logout()函数会报未定义错误,需要通过unsafeWindow访问页面全局作用域
  • 执行时机错误:如果脚本在DOM渲染完成前运行,document.getElementById("logoutButton")会返回null,后续操作全部失效
  • 逻辑冗余:按键触发后同时执行点击、调用登出函数,重复操作容易引发异常

完整可用代码

// ==UserScript==
// @name         自定义快捷键登出
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  按下预设按键快速登出网站
// @match        *://你的目标网站域名/* (请替换为实际要适配的网站规则)
// @grant        unsafeWindow
// @run-at       document-end
// ==/UserScript==

(function () {
  'use strict';

  // 等待DOM完全加载
  document.addEventListener('DOMContentLoaded', () => {
    // 获取用户设置的触发按键
    const triggerKey = prompt('请输入任意按键作为登出快捷键');
    // 用户点击取消则终止脚本执行
    if (!triggerKey) return;
    // 统一转小写避免大小写敏感
    const matchKey = triggerKey.toLowerCase();
    // 获取登出按钮元素
    const logoutBtn = document.getElementById('logoutButton');

    // 监听全局按键事件
    document.addEventListener('keydown', (e) => {
      if (e.key.toLowerCase() === matchKey) {
        // 方案1:模拟点击登出按钮(优先使用,复用页面原有逻辑)
        if (logoutBtn && logoutBtn.style.display !== 'none') {
          logoutBtn.click();
        }
        // 方案2:直接调用页面登出函数,不需要模拟点击的话开启这个,注释方案1即可
        // if (typeof unsafeWindow.logout === 'function') {
        //   unsafeWindow.logout();
        // }
      }
    });
  });
})();

使用注意事项

  • 必须替换脚本头中@match字段的域名规则为你要适配的网站,否则脚本不会生效
  • 如果选择使用方案2直接调用登出函数,@grant unsafeWindow配置不能删除
  • 脚本默认不区分按键大小写,如需区分可以删除代码中两处.toLowerCase()调用

内容的提问来源于stack exchange,提问作者LightLord

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 23:45:02