您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Unlock right-click, remove restrictions on copy, cut, select text, right-click menu, text copying, text selection, image right-click
当前为
- // ==UserScript==
- // @name Selection and Copying Restorer
- // @version 0.4
- // @description Unlock right-click, remove restrictions on copy, cut, select text, right-click menu, text copying, text selection, image right-click
- // @namespace https://greasyfork.org/users/1300060
- // @author AstralRift
- // @run-at document-end
- // @match *://*/*
- // @grant GM_registerMenuCommand
- // @grant GM_unregisterMenuCommand
- // @grant GM.setValue
- // @grant GM.getValue
- // @grant GM_addValueChangeListener
- // @grant unsafeWindow
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- function unlockTextSelection() {
- const style = document.createElement('style');
- style.textContent = `
- * {
- user-select: text !important;
- -webkit-user-select: text !important;
- -moz-user-select: text !important;
- }
- `;
- document.head.appendChild(style);
- }
- function hasCopyRestrictions() {
- const testElement = document.createElement('div');
- testElement.style.userSelect = 'none';
- document.body.appendChild(testElement);
- const userSelect = getComputedStyle(testElement).userSelect;
- document.body.removeChild(testElement);
- if (userSelect === 'none') return true;
- const events = ['contextmenu', 'copy', 'cut', 'selectstart'];
- const isBlocked = events.some(event => {
- let blocked = false;
- document.addEventListener(event, function tempListener(e) {
- e.stopImmediatePropagation();
- blocked = true;
- document.removeEventListener(event, tempListener, true);
- }, true);
- const evt = new Event(event, { bubbles: true, cancelable: true });
- document.dispatchEvent(evt);
- return blocked;
- });
- return isBlocked;
- }
- function stopEventPropagation(event) {
- event.stopPropagation();
- }
- function stopEventDefault(event) {
- event.preventDefault();
- }
- function toggleEnabled() {
- GM.getValue('enabled', true).then(enabled => {
- enabled = !enabled;
- GM.setValue('enabled', enabled).then(() => {
- location.reload();
- });
- });
- }
- GM_registerMenuCommand('Toggle Selection and Copying Restorer', toggleEnabled);
- GM.getValue('enabled', true).then(enabled => {
- if (enabled && hasCopyRestrictions()) {
- unlockTextSelection();
- const eventOptions = { capture: true, passive: true };
- const eventOptionsNoPassive = { capture: true };
- document.addEventListener('contextmenu', stopEventPropagation, eventOptions);
- document.addEventListener('copy', stopEventDefault, eventOptionsNoPassive);
- document.addEventListener('cut', stopEventDefault, eventOptionsNoPassive);
- }
- });
- })();