Greasy Fork

防止未经授权的自动复制

在非选词复制时提示用户以防止未经授权的自动复制。

目前为 2023-07-23 提交的版本。查看 最新版本

// ==UserScript==
// @name 防止未经授权的自动复制
// @version 8
// @author   ChatGPT
// @description 在非选词复制时提示用户以防止未经授权的自动复制。
// @grant GM_setClipboard
// @run-at document-start
// @match *://*/*
// @namespace https://greasyfork.org/users/452911
// ==/UserScript==

(function() {
  'use strict';

  let hasCopied = false;
  let timeoutId = null;
  
  const handleCopy = function(event) {
    event.preventDefault();
    const selection = window.getSelection().toString();
    if (!hasCopied) {
      hasCopied = true;
      const shouldCopy = confirm('是否复制?\n' + selection);
      if (shouldCopy) {
        GM_setClipboard(selection);
      }
      timeoutId = setTimeout(function() {
        hasCopied = false;
        timeoutId = null;
      }, 2000); // 设置延时时间,单位为毫秒
    }
  };
  
  const handleSelectionChange = function() {
    const selection = window.getSelection().toString();
    if (selection.length === 0) {
      document.addEventListener('copy', handleCopy);
    } else {
      document.removeEventListener('copy', handleCopy);
    }
  };

  document.addEventListener('copy', handleCopy);
  document.addEventListener('selectionchange', handleSelectionChange);

  // 在页面卸载前清除延时器
  window.addEventListener('beforeunload', function() {
    if (timeoutId) {
      clearTimeout(timeoutId);
    }
  });
})();