您需要先安装一个扩展,例如 篡改猴、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); } }); })();