// ==UserScript== // @name 释放被网站拦截的浏览器快捷键 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 取消网站的按键捕获,防止用于切换浏览器标签的快捷「cmd+num」被拦截 // @author User // @match *://*/* // @grant GM_log // @run-at document-start // @license MIT // @downloadURL none // ==/UserScript== (function () { 'use strict'; // 添加 document.getEventListeners() Document.prototype._addEventListener = Document.prototype.addEventListener; Document.prototype._removeEventListener = Document.prototype.removeEventListener; Document.prototype.addEventListener = function (type, listener, useCapture = false) { this._addEventListener(type, listener, useCapture); if (!this.eventListenerList) this.eventListenerList = {}; if (!this.eventListenerList[type]) this.eventListenerList[type] = []; this.eventListenerList[type].push({ type, listener, useCapture }); }; Document.prototype.removeEventListener = function (type, listener, useCapture = false) { this._removeEventListener(type, listener, useCapture); if (!this.eventListenerList) this.eventListenerList = {}; if (!this.eventListenerList[type]) this.eventListenerList[type] = []; for (let i = 0; i < this.eventListenerList[type].length; i++) { if ( this.eventListenerList[type][i].listener === listener && this.eventListenerList[type][i].useCapture === useCapture ) { this.eventListenerList[type].splice(i, 1); break; } } if (this.eventListenerList[type].length == 0) { delete this.eventListenerList[type]; } }; Document.prototype.getEventListeners = function (type) { if (!this.eventListenerList) this.eventListenerList = {}; if (type === undefined) return this.eventListenerList; return this.eventListenerList[type]; }; // 移除document上的keydown按键事件 try { var times = 0; var getEventsHandle = setInterval(function () { times++; var events = document.getEventListeners('keydown') || []; GM_log(times + '释放被网站拦截的浏览器快捷键:', events); if (events.length) { for (var i = 0; i < events.length; i++) { document.removeEventListener('keydown', events[i].listener); GM_log('已释放被网站拦截的浏览器快捷键:', i); } clearInterval(getEventsHandle); } if (times > 50) { clearInterval(getEventsHandle); } }, 500); } catch (e) { GM_log('释放被网站拦截的浏览器快捷键出错:', e); } })();