您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Unblock text selection, copy, right‑click but leave video clicks intact
// ==UserScript== // @name Copy & Select Unlocker // @namespace http://shinobu-scripts.local/ // @version 2.2 // @description Unblock text selection, copy, right‑click but leave video clicks intact // @author Shinobu // @match *://*/* // @run-at document-end // @license GPLv3 // ==/UserScript== (function() { 'use strict'; function injectSelectionStyles() { const css = ` * { user-select: text !important; -webkit-user-select: text !important; } [style*="user-select: none"] { user-select: text !important; } `; const s = document.createElement('style'); s.textContent = css; document.head.appendChild(s); } function removeOverlays() { document.querySelectorAll('div, section').forEach(el => { if (el.querySelector('video')) return; // don’t touch video holders const st = getComputedStyle(el); const z = parseInt(st.zIndex, 10) || 0; if ((st.position==='fixed'||st.position==='absolute') && z > 1000 && el.offsetWidth >= innerWidth * .9 && el.offsetHeight>= innerHeight * .9) { el.style.pointerEvents = 'none'; // let clicks pass through } }); } function observeOverlays() { const mo = new MutationObserver(removeOverlays); mo.observe(document, { childList: true, subtree: true }); removeOverlays(); } function restoreEvents() { ['onselectstart','onmousedown','ondragstart'].forEach(e => { document[e]=null; }); if (window.getSelection().empty) window.getSelection().empty = ()=>{}; } function stopProp(e) { e.stopImmediatePropagation(); } function init() { injectSelectionStyles(); ['contextmenu','selectstart','copy'].forEach(evt=>{ document.addEventListener(evt, stopProp, true); }); document.addEventListener('keydown', e => { if ((e.ctrlKey||e.metaKey) && e.key==='c') e.stopImmediatePropagation(); }, true); restoreEvents(); observeOverlays(); console.log('Copy & Select Unlocker v2.2 running'); } if (document.readyState==='loading') window.addEventListener('load', init); else init(); })();