VM Userscript to disable website right-click and copy-blocking

From Lucca's Wiki
Revision as of 20:40, 17 November 2025 by 50.220.241.211 (talk)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search
// ==UserScript==
// @name         Force Enable Right Click, Copy & Paste
// @version      3.0
// @description  Re-enables right click, text selection, and copying/pasting on all sites
// @author       You
// @match        https://www.netacad.com/*
// @grant        none
// @run-at       document-start
// ==/UserScript==
(function() {
    'use strict';
    // Re-enable text selection and right-click
    const styles = `* { user-select: auto !important; -webkit-user-select: auto !important; pointer-events: auto !important; }`;
    const styleSheet = document.createElement('style');
    styleSheet.textContent = styles;
    document.head.appendChild(styleSheet);
    // Prevent right-click blocking
    document.addEventListener('contextmenu', e => e.stopPropagation(), true);
    // Prevent text selection blocking
    document.addEventListener('selectstart', e => e.stopPropagation(), true);
    // Prevent dragstart blocking
    document.addEventListener('dragstart', e => e.stopPropagation(), true);
    // Stop blocking copy and cut events
    document.addEventListener('copy', e => e.stopPropagation(), true);
    document.addEventListener('cut', e => e.stopPropagation(), true);
    // Prevent scripts from blocking pasting
    document.addEventListener('paste', e => e.stopPropagation(), true);
    // Optional: Override any inline scripts that may be preventing user actions
    const scriptOverride = setInterval(() => {
        const blockers = document.querySelectorAll('script');
        blockers.forEach(script => {
            if (script.innerHTML.includes('event.preventDefault()') || script.innerHTML.includes('return false;')) {
                script.innerHTML = script.innerHTML.replace(/event.preventDefault\(\)/g, ).replace(/return false;/g, );
            }
        });
    }, 1000);
    // Stop the interval once all blockers are cleared
    setTimeout(() => clearInterval(scriptOverride), 5000);
})();