复制剪贴板保护 修改版

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

当前为 2024-07-13 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

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

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name          复制剪贴板保护 修改版 
// @namespace    https://github.com/10086100886
// @author       人民的勤务员 <[email protected]> Sky,仰望星空
// @description     管理网页剪贴板的写入行为&禁用音视频内容预载及自动播放。
// @version 1.2.2.1
// @include         *
// @run-at          document-start
// @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);
  }

}();