Greasy Fork is available in English.
取消网站的按键捕获,防止用于切换浏览器标签的快捷「cmd+num」被拦截
// ==UserScript==
// @name 释放被网站拦截的浏览器快捷键
// @namespace http://tampermonkey.net/
// @version 0.3
// @description 取消网站的按键捕获,防止用于切换浏览器标签的快捷「cmd+num」被拦截
// @author User
// @match *://*/*
// @grant GM_log
// @run-at document-start
// @license MIT
// ==/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 delay = 200;
var cleanTimes = 0;
var maxCleanTimes = 1000;
var clean = function () {
cleanTimes++;
var events = document.getEventListeners('keydown') || [];
if (events.length) {
delay = delay >= 200 ? delay / 2 : 200;
} else {
delay *= 2;
}
if (events.length) {
GM_log('[' + cleanTimes + '/' + delay + ']释放被网站拦截的浏览器快捷键:', events);
for (var i = events.length - 1; i >= 0; i--) {
document.removeEventListener('keydown', events[i].listener);
GM_log('已释放被网站拦截的浏览器快捷键:', i);
}
// clearInterval(getEventsHandle);
}
if (cleanTimes < maxCleanTimes) {
setTimeout(function () {
clean();
}, delay);
} else {
GM_log('已放弃释放被网站拦截的浏览器快捷键:', events);
}
};
clean();
} catch (e) {
GM_log('释放被网站拦截的浏览器快捷键出错:', e);
}
})();