Disables the ugly feature that disables right click
当前为
// ==UserScript==
// @name Disable 'disable right click'
// @namespace https://github.com/mosaicer
// @author mosaicer
// @description Disables the ugly feature that disables right click
// @version 1.4.4
// @include *
// @run-at document-idle
// ==/UserScript==
(() => {
'use strict';
const EVENT_NAMES = ['oncontextmenu', 'oncopy', 'onpaste', 'onmousedown', 'onselectstart'];
const replaceFalseWithTrue =
function replaceFalseTheFunctionReturnsWithTrue(funcText) {
return funcText.replace(/(return[\s\(]+)false([\s\)]*;?)/, '$1true$2');
};
document.querySelectorAll('*').forEach(node =>
EVENT_NAMES.forEach(name => {
const attr = node.getAttribute(name);
if (attr) {
node.setAttribute(
name,
replaceFalseWithTrue(attr)
);
}
})
);
[window, document].forEach(et =>
EVENT_NAMES.forEach(name => {
const handler = et[name];
if (typeof handler === 'undefined' || handler === null) {
return;
}
const handlerText = handler.toString();
let output;
if (handlerText.startsWith('function')) {
output = replaceFalseWithTrue(handlerText)
.replace(/^function\s*(\(.*?\))/, '$1 =>');
} else if (/^\(?.+?\)?\s*=>\s*\{/.test(handlerText)) {
output = replaceFalseWithTrue(handlerText);
} else {
output = handlerText.replace(/^(\(?.+?\)?\s*=>\s*)false/, '$1true');
}
et[name] = eval(output);
})
);
// TODO: refactor the below codes
try {
$('body')
.off('contextmenu copy paste mousedown selectstart')
.unbind('contextmenu copy paste mousedown selectstart');
} catch (e) {
console.info('JQuery is not available.');
}
})();