๐Ÿ”“ Enable Copy & Selection Everywhere โ€” Tampermonkey Script

enable-copy.user.js
// ==UserScript==
// @name         Enable Copy & Selection Everywhere
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  แƒแƒฆแƒแƒ“แƒ’แƒ”แƒœแƒก แƒ›แƒแƒœแƒ˜แƒจแƒ•แƒœแƒแƒก, แƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒแƒก แƒ“แƒ แƒฉแƒแƒกแƒ›แƒแƒก แƒงแƒ•แƒ”แƒšแƒ แƒกแƒแƒ˜แƒขแƒ–แƒ” (แƒ’แƒแƒ›แƒแƒ แƒ—แƒฃแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ)
// @match        *://*/*
// @run-at       document-start
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    const blockedEvents = [
        'copy', 'cut', 'paste',
        'contextmenu',
        'selectstart',
        'dragstart',
        'keydown', 'keyup', 'keypress'
    ];

    blockedEvents.forEach(function (evt) {
        window.addEventListener(evt, function (e) {
            e.stopImmediatePropagation();
        }, true);
    });

    // --- CSS แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒฎแƒ”แƒš ---
    function injectStyleOnce() {
        if (document.getElementById('tm-unlock-style')) return;
        const style = document.createElement('style');
        style.id = 'tm-unlock-style';
        style.innerHTML = `
            * {
                -webkit-user-select: text !important;
                -moz-user-select: text !important;
                -ms-user-select: text !important;
                user-select: text !important;
                -webkit-touch-callout: default !important;
            }
        `;
        (document.head || document.documentElement).appendChild(style);
    }

    // --- แƒแƒขแƒ แƒ˜แƒ‘แƒฃแƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒฌแƒ›แƒ”แƒœแƒ“แƒ, debounce-แƒ˜แƒ— ---
    let debounceTimer = null;
    function unlockElements() {
        clearTimeout(debounceTimer);
        debounceTimer = setTimeout(function () {
            document.querySelectorAll('[oncopy], [oncut], [onpaste], [oncontextmenu], [onselectstart], [ondragstart], [unselectable]')
                .forEach(function (el) {
                    el.oncopy = null;
                    el.oncut = null;
                    el.onpaste = null;
                    el.oncontextmenu = null;
                    el.onselectstart = null;
                    el.ondragstart = null;
                    el.removeAttribute('unselectable');
                });
        }, 300); // 300ms-แƒจแƒ˜ แƒ”แƒ แƒ—แƒฎแƒ”แƒš แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒฃแƒ›
    }

    injectStyleOnce();
    unlockElements();

    window.addEventListener('DOMContentLoaded', function () {
        injectStyleOnce();
        unlockElements();
    });

    // observer แƒแƒฎแƒšแƒ แƒ”แƒซแƒ”แƒ‘แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒฎแƒแƒš แƒแƒขแƒ แƒ˜แƒ‘แƒฃแƒขแƒ”แƒ‘แƒก/แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒก, แƒแƒ แƒ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก แƒงแƒแƒ•แƒ”แƒš แƒฌแƒแƒ›แƒก
    const observer = new MutationObserver(function (mutations) {
        // แƒ•แƒคแƒ˜แƒšแƒขแƒ แƒแƒ•แƒ— แƒฉแƒ•แƒ”แƒœแƒ˜แƒ•แƒ” style แƒขแƒ”แƒ’แƒ–แƒ” แƒ แƒ”แƒแƒฅแƒชแƒ˜แƒแƒก
        const relevant = mutations.some(m =>
            !(m.addedNodes.length === 1 && m.addedNodes[0].id === 'tm-unlock-style')
        );
        if (relevant) unlockElements();
    });

    observer.observe(document.documentElement, {
        childList: true,
        subtree: true,
        attributes: true,
        attributeFilter: ['oncopy', 'oncontextmenu', 'onselectstart', 'style', 'unselectable']
    });

})();
Ultimate Copy Unlock - Tampermonkey Script

๐Ÿ”“ Ultimate Copy Unlock โ€” Tampermonkey Script

แƒ‘แƒšแƒแƒ™แƒแƒ•แƒก แƒกแƒแƒ˜แƒขแƒ˜แƒก แƒ›แƒชแƒ“แƒ”แƒšแƒแƒ‘แƒแƒกแƒแƒช แƒ™แƒ˜, แƒ“แƒแƒแƒงแƒ”แƒœแƒแƒก แƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ–แƒฆแƒฃแƒ“แƒ•แƒ”แƒšแƒ˜ event-แƒ”แƒ‘แƒ˜
ultimate-copy-unlock.user.js
// ==UserScript==
// @name         Ultimate Copy Unlock
// @namespace    http://tampermonkey.net/
// @version      2.0
// @description  แƒกแƒ แƒฃแƒšแƒแƒ“ แƒฎแƒกแƒœแƒ˜แƒก แƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก, แƒ›แƒแƒœแƒ˜แƒจแƒ•แƒœแƒ˜แƒก แƒ“แƒ แƒ›แƒแƒ แƒฏแƒ•แƒ”แƒœแƒ-แƒ™แƒšแƒ˜แƒ™แƒ˜แƒก แƒ‘แƒšแƒแƒ™แƒก โ€” แƒ›แƒแƒ— แƒจแƒแƒ แƒ˜แƒก แƒกแƒแƒ˜แƒขแƒ˜แƒก แƒ›แƒชแƒ“แƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒก แƒแƒฎแƒแƒšแƒ˜ แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒ–แƒ”
// @match        *://*/*
// @run-at       document-start
// @grant        unsafeWindow
// ==/UserScript==

(function () {
    'use strict';

    const win = (typeof unsafeWindow !== 'undefined') ? unsafeWindow : window;
    const BLOCKED = new Set([
        'copy', 'cut', 'paste',
        'contextmenu',
        'selectstart',
        'dragstart',
        'keydown', 'keyup', 'keypress'
    ]);

    /* ---------- 1. แƒ‘แƒšแƒแƒ™แƒแƒ•แƒก แƒฃแƒ™แƒ•แƒ” แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒš listener-แƒ”แƒ‘แƒก (capture แƒคแƒแƒ–แƒแƒจแƒ˜ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜) ---------- */
    BLOCKED.forEach(function (evt) {
        win.addEventListener(evt, function (e) {
            e.stopImmediatePropagation();
        }, true);
        document.addEventListener(evt, function (e) {
            e.stopImmediatePropagation();
        }, true);
    });

    /* ---------- 2. Patch: addEventListener โ€” แƒกแƒแƒ˜แƒขแƒก แƒ•แƒฃแƒ™แƒ แƒซแƒแƒšแƒแƒ•แƒ— แƒแƒฎแƒแƒšแƒ˜ แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒแƒก ---------- */
    const origAdd = EventTarget.prototype.addEventListener;
    EventTarget.prototype.addEventListener = function (type, listener, options) {
        if (BLOCKED.has(type)) {
            // แƒกแƒแƒ˜แƒขแƒ˜แƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ listener แƒกแƒแƒ”แƒ แƒ—แƒแƒ“ แƒแƒ  แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ
            return;
        }
        return origAdd.call(this, type, listener, options);
    };

    /* ---------- 3. Patch: oncopy/oncut/onpaste/oncontextmenu/onselectstart property-แƒ”แƒ‘แƒ˜ ---------- */
    ['oncopy', 'oncut', 'onpaste', 'oncontextmenu', 'onselectstart', 'ondragstart',
     'onkeydown', 'onkeyup', 'onkeypress'].forEach(function (prop) {
        try {
            Object.defineProperty(HTMLElement.prototype, prop, {
                configurable: true,
                get() { return null; },
                set(_) { /* แƒ•แƒ˜แƒ’แƒœแƒแƒ แƒ˜แƒ แƒ”แƒ‘แƒ— แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒ›แƒ˜แƒœแƒ˜แƒญแƒ”แƒ‘แƒแƒก */ }
            });
            Object.defineProperty(Document.prototype, prop, {
                configurable: true,
                get() { return null; },
                set(_) { }
            });
        } catch (e) { /* แƒ–แƒแƒ’ แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒจแƒ˜ property แƒฃแƒ™แƒ•แƒ” แƒ“แƒแƒชแƒฃแƒšแƒ˜แƒ โ€” แƒ’แƒแƒ•แƒแƒ’แƒ แƒซแƒ”แƒšแƒแƒ— */ }
    });

    /* ---------- 4. execCommand-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— disable-แƒ˜แƒก แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ•แƒ ---------- */
    const origExecCommand = document.execCommand;
    document.execCommand = function (cmd, ...args) {
        if (['copy', 'cut', 'paste'].includes(String(cmd).toLowerCase())) {
            return true; // แƒ•แƒแƒชแƒ แƒฃแƒ”แƒ‘แƒ— "แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒš" แƒžแƒแƒกแƒฃแƒฎแƒก, แƒ—แƒฃ แƒกแƒแƒ˜แƒขแƒ˜ cmd-แƒก แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ“แƒ false-แƒ–แƒ” แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ˜แƒ—
        }
        return origExecCommand.call(document, cmd, ...args);
    };

    /* ---------- 5. CSS: user-select แƒ“แƒ ::selection แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ ---------- */
    function injectStyleOnce() {
        if (document.getElementById('tm-unlock-style')) return;
        const style = document.createElement('style');
        style.id = 'tm-unlock-style';
        style.innerHTML = `
            *, *::before, *::after {
                -webkit-user-select: text !important;
                -moz-user-select: text !important;
                -ms-user-select: text !important;
                user-select: text !important;
                -webkit-touch-callout: default !important;
                pointer-events: auto !important;
            }
            ::selection {
                background: #3399FF !important;
                color: #fff !important;
            }
        `;
        (document.head || document.documentElement).appendChild(style);
    }

    /* ---------- 6. แƒแƒขแƒ แƒ˜แƒ‘แƒฃแƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒฃแƒคแƒ—แƒแƒ•แƒ”แƒ‘แƒ, debounce-แƒ˜แƒ— ---------- */
    let debounceTimer = null;
    function unlockElements() {
        clearTimeout(debounceTimer);
        debounceTimer = setTimeout(function () {
            document.querySelectorAll(
                '[oncopy], [oncut], [onpaste], [oncontextmenu], [onselectstart], [ondragstart], [unselectable]'
            ).forEach(function (el) {
                el.removeAttribute('oncopy');
                el.removeAttribute('oncut');
                el.removeAttribute('onpaste');
                el.removeAttribute('oncontextmenu');
                el.removeAttribute('onselectstart');
                el.removeAttribute('ondragstart');
                el.removeAttribute('unselectable');
            });
        }, 300);
    }

    injectStyleOnce();
    unlockElements();

    window.addEventListener('DOMContentLoaded', function () {
        injectStyleOnce();
        unlockElements();
    });

    /* ---------- 7. MutationObserver แƒแƒฎแƒแƒšแƒ˜/แƒ“แƒ˜แƒœแƒแƒ›แƒ˜แƒฃแƒ แƒ˜ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก ---------- */
    const observer = new MutationObserver(function (mutations) {
        const relevant = mutations.some(m =>
            !(m.addedNodes.length === 1 && m.addedNodes[0].id === 'tm-unlock-style')
        );
        if (relevant) unlockElements();
    });

    observer.observe(document.documentElement, {
        childList: true,
        subtree: true,
        attributes: true,
        attributeFilter: ['oncopy', 'oncontextmenu', 'onselectstart', 'style', 'unselectable']
    });

})();
โš ๏ธ แƒจแƒ”แƒœแƒ˜แƒจแƒ•แƒœแƒ: แƒ—แƒฃ แƒขแƒ”แƒฅแƒกแƒขแƒ˜ แƒกแƒแƒ”แƒ แƒ—แƒแƒ“ แƒแƒ  แƒแƒ แƒ˜แƒก แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ˜ HTML แƒขแƒ”แƒฅแƒกแƒขแƒ˜ (แƒ›แƒแƒ’. แƒ“แƒแƒฎแƒแƒขแƒฃแƒšแƒ˜แƒ <canvas>-แƒ–แƒ”, แƒแƒ แƒ˜แƒก แƒกแƒฃแƒ แƒแƒ—แƒ˜ แƒแƒœ PDF viewer-แƒ˜แƒก แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒ แƒ”แƒœแƒ“แƒ”แƒ แƒ˜), แƒ›แƒแƒจแƒ˜แƒœ แƒแƒ แƒช แƒ”แƒ แƒ—แƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜ แƒ•แƒ”แƒ  แƒ“แƒแƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ โ€” แƒแƒกแƒ”แƒ— แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒกแƒแƒญแƒ˜แƒ แƒแƒ OCR แƒแƒœ แƒกแƒฎแƒ•แƒ แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒ. แƒแƒกแƒ”แƒ•แƒ”, patch-แƒ˜ #2 (addEventListener-แƒ˜แƒก แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ•แƒ) แƒ–แƒแƒ’ แƒกแƒแƒ˜แƒขแƒ–แƒ” (แƒ›แƒแƒ’. Google Docs) แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒแƒ แƒฆแƒ•แƒ˜แƒแƒก แƒกแƒฎแƒ•แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒแƒšแƒ˜แƒช, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ˜แƒกแƒ˜แƒœแƒ˜ keydown-แƒก แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ”แƒœ แƒšแƒ”แƒ’แƒ˜แƒขแƒ˜แƒ›แƒฃแƒ แƒ˜ แƒ›แƒ˜แƒ–แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒกแƒแƒช.