Force Enable Copy/Paste/Select

Automatically enable copy, paste, and text selection on websites that block them.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         Force Enable Copy/Paste/Select
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Automatically enable copy, paste, and text selection on websites that block them.
// @author       (Based on bookmarklet)
// @match        *://*/*
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    "use strict";

    var t = ["copy", "cut", "paste", "selectstart", "contextmenu", "dragstart", "mousedown", "mouseup", "keydown", "keyup"],
        e = function(t) {
            return t.stopImmediatePropagation(), !0;
        };

    t.forEach(function(t) {
        document.addEventListener(t, e, !0);
    });

    document.oncopy = null;
    document.oncut = null;
    document.onpaste = null;
    document.onselectstart = null;
    document.oncontextmenu = null;
    document.ondragstart = null;
    document.onmousedown = null;

    var n = ["oncopy", "oncut", "onpaste", "onselectstart", "oncontextmenu", "ondragstart", "onmousedown"];

    function o(t) {
        n.forEach(function(e) {
            t.hasAttribute && t.hasAttribute(e) && t.removeAttribute(e);
        });
        t.hasAttribute && t.hasAttribute("unselectable") && t.removeAttribute("unselectable");
        t.style && (t.style.userSelect = "",
                    t.style.webkitUserSelect = "",
                    t.style.MozUserSelect = "",
                    t.style.msUserSelect = "",
                    t.style.webkitTouchCallout = "",
                    "none" === t.style.pointerEvents && (t.style.pointerEvents = ""));
        t.oncopy && (t.oncopy = null);
        t.oncut && (t.oncut = null);
        t.onpaste && (t.onpaste = null);
        t.onselectstart && (t.onselectstart = null);
        t.oncontextmenu && (t.oncontextmenu = null);
        t.ondragstart && (t.ondragstart = null);
    }

    for (var c = document.querySelectorAll("*"), r = 0; r < c.length; r++) o(c[r]);
    o(document.documentElement);
    o(document.body);

    var u = "__force_copy_style__";
    if (!document.getElementById(u)) {
        var l = document.createElement("style");
        l.id = u;
        l.textContent = [
            "*, *::before, *::after {",
            "  -webkit-user-select: auto !important;",
            "  -moz-user-select: auto !important;",
            "  -ms-user-select: auto !important;",
            "  user-select: auto !important;",
            "  -webkit-touch-callout: default !important;",
            "}",
            "html, body {",
            "  -webkit-user-select: auto !important;",
            "  user-select: auto !important;",
            "  pointer-events: auto !important;",
            "}"
        ].join("\n");
        (document.head || document.documentElement).appendChild(l);
    }

    try {
        for (var a = document.styleSheets, s = 0; s < a.length; s++)
            try {
                var i = a[s].cssRules || a[s].rules;
                if (!i) continue;
                for (var d = i.length - 1; d >= 0; d--) {
                    var m = i[d].cssText || "";
                    (/user-select\s*:\s*none/i.test(m) || /pointer-events\s*:\s*none/i.test(m)) && a[s].deleteRule(d);
                }
            } catch (t) {}
    } catch (t) {}

    try {
        if (!window.getSelection || -1 === window.getSelection.toString().indexOf("native")) {
            var p = document.createElement("iframe");
            p.style.display = "none";
            document.body.appendChild(p);
            p.contentWindow && p.contentWindow.getSelection && (window.getSelection = p.contentWindow.getSelection.bind(p.contentWindow));
            document.body.removeChild(p);
        }
    } catch (t) {}

    document.addEventListener("copy", function(t) {
        var e = window.getSelection();
        e && e.toString();
    }, !1);

    try {
        if (document.execCommand) {
            var y = document.execCommand.bind(document);
            document.execCommand = function(t) {
                return y.apply(document, arguments);
            };
        }
    } catch (t) {}

    new MutationObserver(function(t) {
        t.forEach(function(t) {
            t.addedNodes && t.addedNodes.forEach(function(t) {
                if (1 === t.nodeType) {
                    o(t);
                    for (var e = t.querySelectorAll ? t.querySelectorAll("*") : [], n = 0; n < e.length; n++) o(e[n]);
                }
            });
            "attributes" === t.type && 1 === t.target.nodeType && o(t.target);
        });
    }).observe(document.documentElement, {
        childList: !0,
        subtree: !0,
        attributes: !0,
        attributeFilter: n.concat(["style", "unselectable", "class"])
    });

    try {
        for (var f = document.querySelectorAll("iframe"), b = 0; b < f.length; b++)
            try {
                var h = f[b].contentDocument || f[b].contentWindow.document;
                if (h) {
                    t.forEach(function(t) {
                        h.addEventListener(t, e, !0);
                    });
                    h.oncopy = null;
                    h.oncut = null;
                    h.onpaste = null;
                    h.onselectstart = null;
                    h.oncontextmenu = null;
                    for (var v = h.querySelectorAll("*"), g = 0; g < v.length; g++) o(v[g]);
                    var w = h.createElement("style");
                    w.textContent = "* { -webkit-user-select: auto !important; user-select: auto !important; -webkit-touch-callout: default !important; }";
                    (h.head || h.documentElement).appendChild(w);
                }
            } catch (t) {}
    } catch (t) {}

    var x = document.createElement("div");
    x.textContent = "✅ Copy/Paste/Select enabled!";
    x.style.cssText = "position:fixed;top:8px;left:50%;transform:translateX(-50%);background:#222;color:#5fb950;padding:10px 24px;border-radius:8px;font:600 14px/1.4 system-ui,sans-serif;z-index:2147483647;box-shadow:0 4px 24px rgba(0,0,0,0.5);border:1px solid #5fb950;pointer-events:none;opacity:0;transition:opacity .3s ease;";
    document.body.appendChild(x);
    setTimeout(function() {
        x.style.opacity = "1";
    }, 50);
    setTimeout(function() {
        x.style.opacity = "0";
        setTimeout(function() {
            x.remove();
        }, 400);
    }, 2500);
})();