复制剪贴板保护 修改版

管理网页剪贴板的写入行为&禁用音视频内容预载及自动播放。

目前為 2024-06-11 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name          复制剪贴板保护 修改版 
// @author       人民的勤务员 <[email protected]> Sky,仰望星空
// @description     管理网页剪贴板的写入行为&禁用音视频内容预载及自动播放。
// @version         1.2
// @include         *
// @run-at          document-start
// @namespace       https://greasyfork.org/users/1169082
// @license MIT
// ==/UserScript==
//在其他地方下载的脚本,作者不知道是谁很不错,防范牛皮癣 。用Chatgpt修改了下,让脚本在PC端浏览时可以使用快捷键复制
!function () {
  // 定义唯一键,用于防止重复执行
  const key = encodeURIComponent('剪贴板保护&禁用预载:执行判断');

  // 如果已经执行过,直接返回
  if (window[key]) { return; }

  try {
    // 标记已经执行过
    window[key] = true;

    // 初始化变量
    let red = true;
    let green = false;
    let orange = false;

    // 获取页面中的所有视频元素
    var videoTags = document.getElementsByTagName("video");

    // 创建开关按钮元素
    const sw = document.createElement("div");
    // 设置按钮样式
    sw.style = 'position:fixed!important;bottom:30%;right:10px;z-index:2147483647;width:18px;height:18px;opacity:0.4;border-radius:9px;background:red;visibility:hidden';
    // 将按钮添加到页面中
    document.body.appendChild(sw);

    // 对所有视频元素进行处理,禁用预加载和自动播放
    for (var i = 0; i < videoTags.length; i++) {
      videoTags[i].setAttribute("preload", "metadata");
      videoTags[i].removeAttribute("autoplay");
    };

    // 获取页面中的所有音频元素
    var audioTags = document.getElementsByTagName("audio");

    // 对所有音频元素进行处理,禁用预加载和自动播放
    for (var i = 0; i < audioTags.length; i++) {
      audioTags[i].setAttribute("preload", "metadata");
      audioTags[i].removeAttribute("autoplay");
    };

    // 显示提示消息的函数
    function Toast(msg, duration, backgroundColor, textColor) {
    duration = isNaN(duration) ? 3000 : duration;
    backgroundColor = backgroundColor || 'rgba(0, 0, 0, 0.7)';
    textColor = textColor || 'rgb(255, 255, 255)';

    var m = document.createElement('div');
    m.innerHTML = msg;
    m.style.cssText = "max-width:60%;min-width: 150px;padding:0 14px;height: 40px;color: " + textColor + ";line-height: 40px;text-align: center;border-radius: 12px;position: fixed;top: 95%;left: 50%;transform: translate(-50%, -50%);z-index: 2147483647;background: " + backgroundColor + ";font-size: 16px;";
    document.body.appendChild(m);

    setTimeout(function () {
        var d = 0.5;
        m.style.transition = '-webkit-transform ' + d + 's ease-in, opacity ' + d + 's ease-in';
        m.style.opacity = '0';
        setTimeout(function () {
            document.body.removeChild(m)
        }, d * 1000);
    }, duration);
}


// 处理复制事件的函数
function pc(e) {
    if (red) {
    const selection = window.getSelection().toString(); 
  var confirmed = window.confirm('允许网页复制以下内容吗?\n' + selection);
if (confirmed) {
    // 用户点击了确认按钮
    // 执行复制操作
    Toast('已允许网页写入剪贴板', 500, 'rgba(0, 255, 0, 0.7)', 'rgb(255, 255, 255)');
} else {
    // 用户点击了取消按钮
    // 执行阻止写入剪贴板的操作
    e.preventDefault();
    e.stopPropagation();
    sw.style.visibility = "visible";
    Toast('已阻止网页写入剪贴板', 500, 'rgba(255, 0, 0, 0.7)', 'rgb(255, 255, 255)');
}

    }
    setTimeout(function() {
        sw.style.visibility = "hidden";
    }, 4000);
}





    // 添加复制事件监听器
    document.addEventListener('copy', (e) => pc(e), { 'passive': false, 'capture': true });

    // 遍历所有iframe元素,为其内容添加复制事件监听器
    Array.from(document.getElementsByTagName('iframe')).forEach((i) => i.contentDocument.addEventListener('copy', (e) => pc(e), { 'passive': false, 'capture': true }));

    // 点击开关按钮的事件处理
    sw.addEventListener('click', function (e) {
      if (!orange) {
        sw.style.background = red ? 'green' : 'red';
        red = !red;
        green = !green;
      } else {
        sw.style.background = 'red';
        red = !red;
        orange = !orange;
      }
    }, { 'passive': true });

    // 右键菜单事件处理
    document.addEventListener('contextmenu', function (e) {
      if (!green) {
        sw.style.visibility = "visible"
        sw.style.background = 'orange';
        red = false;
        orange = true;
        setTimeout(function () { sw.style.visibility = "hidden"; }, 4000);
      }
    }, { 'passive': true });

    // 复制完成后的事件处理
    document.addEventListener('copy', function (e) {
      if (orange) {
        sw.style.background = 'red';
        red = true;
        orange = false;
        sw.style.visibility = "hidden"
      }
    }, { 'passive': true });

    // 添加键盘事件监听器,支持快捷键复制
    document.addEventListener('keydown', function (e) {
      if (e.ctrlKey && e.key === 'c') {
        sw.style.visibility = "visible"
        sw.style.background = 'orange';
        red = false;
        orange = true;
      }
    }, { 'passive': true });

    // 鼠标按下事件处理
    document.addEventListener('mousedown', function (e) {
      if (orange) {
        sw.style.background = 'red';
        red = true;
        orange = false;
      }
    }, { 'passive': true });

  } catch (err) {
    console.log('剪贴板保护&禁用预载:', err);
  }

}();