🔥🔥🔥文本选中复制(通用)🔥🔥🔥

文本选中复制通用版本,适用于大多数网站

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name    🔥🔥🔥文本选中复制(通用)🔥🔥🔥
// @name:en Text Copy Universal
// @name:zh 🔥🔥🔥文本选中复制(通用)🔥🔥🔥
// @description    文本选中复制通用版本,适用于大多数网站
// @description:en Text copy general version, suitable for most websites.
// @description:zh 文本选中复制通用版本,适用于大多数网站
// @namespace  https://github.com/WindrunnerMax/TKScript
// @version    1.1.3
// @author     Czy
// @match      http://*/*
// @match      https://*/*
// @supportURL https://github.com/WindrunnerMax/TKScript/issues
// @license    GPL License
// @run-at     document-end
// @grant      GM_registerMenuCommand
// @grant      GM_unregisterMenuCommand
// @grant      GM_notification
// ==/UserScript==
(function () {
  'use strict';

  function styleInject(css, ref) {
    if ( ref === void 0 ) ref = {};
    var insertAt = ref.insertAt;

    if (!css || typeof document === 'undefined') { return; }

    var head = document.head || document.getElementsByTagName('head')[0];
    var style = document.createElement('style');
    style.type = 'text/css';

    if (insertAt === 'top') {
      if (head.firstChild) {
        head.insertBefore(style, head.firstChild);
      } else {
        head.appendChild(style);
      }
    } else {
      head.appendChild(style);
    }

    if (style.styleSheet) {
      style.styleSheet.cssText = css;
    } else {
      style.appendChild(document.createTextNode(css));
    }
  }

  var css_248z = ".__copy-currency-container{background-color:#4c98f7;border-radius:3px;bottom:0;display:flex;flex-direction:column;left:-150px;position:fixed;transition:all .3s;width:150px;z-index:9999999999}.__copy-currency-container:before{background-color:#4c98f7;border-radius:20px;content:\"\";cursor:pointer;height:20px;position:absolute;right:-6px;top:calc(50% - 10px);width:20px}.__copy-currency-container:hover{left:0}.__copy-currency-container>.__copy-currency-button{border:1px solid #fff;border-radius:3px;color:#fff!important;cursor:pointer;font-size:12px!important;margin:5px;padding:5px 3px 5px 4px;text-align:center;user-select:none;z-index:9999999999}";
  styleInject(css_248z);

  const STORAGE_VALUE = {
    OPEN: "true",
    CLOSE: "false"
  };
  var BUTTON_STATUS = /* @__PURE__ */ ((BUTTON_STATUS2) => {
    BUTTON_STATUS2[BUTTON_STATUS2["OPEN"] = 0] = "OPEN";
    BUTTON_STATUS2[BUTTON_STATUS2["CLOSE"] = 1] = "CLOSE";
    return BUTTON_STATUS2;
  })(BUTTON_STATUS || {});
  const STORAGE_KEY_PREFIX = "copy-currency--";
  const register = (controllers) => {
    const container = document.createElement("div");
    container.className = "__copy-currency-container";
    document.body.appendChild(container);
    controllers.forEach((controller) => {
      const button = document.createElement("div");
      button.className = "__copy-currency-button";
      const localHookInfo = localStorage.getItem(STORAGE_KEY_PREFIX + controller.storageKey);
      controller.status = localHookInfo === STORAGE_VALUE.OPEN ? 1 /* CLOSE */ : 0 /* OPEN */;
      const handler = () => {
        if (controller.status === 1 /* CLOSE */) {
          controller.openFunction();
          controller.status = 0 /* OPEN */;
          button.textContent = controller.closeName;
          localStorage.setItem(STORAGE_KEY_PREFIX + controller.storageKey, STORAGE_VALUE.OPEN);
        } else {
          controller.closeFunction();
          controller.status = 1 /* CLOSE */;
          button.textContent = controller.openName;
          localStorage.setItem(STORAGE_KEY_PREFIX + controller.storageKey, STORAGE_VALUE.CLOSE);
        }
      };
      handler();
      button.addEventListener("click", handler);
      container.appendChild(button);
    });
  };

  const styles = {
    insertCSS: (id, css) => {
      const style = document.createElement("style");
      style.id = id;
      style.innerText = css;
      const [body] = document.getElementsByTagName("body");
      if (body) {
        body.appendChild(style);
      } else {
        window.addEventListener("DOMContentLoaded", () => document.body.appendChild(style));
      }
    },
    removeCSS: (id) => {
      const style = document.getElementById(id);
      style && style.remove();
    }
  };

  const stopNativePropagation = (event) => event.stopPropagation();
  const CONTROLLER_MAP = [
    {
      status: BUTTON_STATUS.CLOSE,
      storageKey: "selectstart-and-copy",
      openName: "✅ 启动解除复制限制",
      closeName: "❌ 关闭解除复制限制",
      openFunction: () => {
        window.addEventListener("selectstart", stopNativePropagation, true);
        window.addEventListener("copy", stopNativePropagation, true);
        styles.insertCSS(
          STORAGE_KEY_PREFIX + "selectstart-and-copy",
          "*{user-select: auto !important;-webkit-user-select: auto !important;}"
        );
      },
      closeFunction: () => {
        window.removeEventListener("selectstart", stopNativePropagation, true);
        window.removeEventListener("copy", stopNativePropagation, true);
        styles.removeCSS(STORAGE_KEY_PREFIX + "selectstart-and-copy");
      }
    },
    {
      status: BUTTON_STATUS.CLOSE,
      storageKey: "contextmenu",
      openName: "✅ 启动解除右键限制",
      closeName: "❌ 关闭解除右键限制",
      openFunction: () => window.addEventListener("contextmenu", stopNativePropagation, true),
      closeFunction: () => window.removeEventListener("contextmenu", stopNativePropagation, true)
    },
    {
      status: BUTTON_STATUS.CLOSE,
      storageKey: "keydown",
      openName: "✅ 启动解除键盘限制",
      closeName: "❌ 关闭解除键盘限制",
      openFunction: () => window.addEventListener("keydown", stopNativePropagation, true),
      closeFunction: () => window.removeEventListener("keydown", stopNativePropagation, true)
    }
  ];
  (function() {
    register(CONTROLLER_MAP);
  })();

}());