(第三章)浏览器插件开发(附源码):实战-破解CSDN禁止复制

304 阅读1分钟

(第三章)浏览器插件开发(附源码):实战-破解CSDN禁止复制

一 CSDN无法复制的实现原理

  1. 复制文字弹出登录弹窗是因为劫持了copy事件并重写了copy事件。

text.png

点击进入函数,我们可以看到被重写的函数逻辑,先检测权限,如果没有权限,则弹出登录弹窗 func.png

  1. 代码无法选中是因为给pre、code元素增加了user-select:none样式控制 css.png

二 破解办法

利用静态注入的方式注入js脚本和css脚本,分别重写copy事件和重置user-select

// scripts/content.js
// 恢复copy事件
document.addEventListener(
    "copy",
    (event) => {
      // 阻止默认行为和事件冒泡
      event.stopPropagation();

      // 获取选中的文本
      const selectedText = window.getSelection().toString();

      // 将选中文本写入剪贴板
      event.clipboardData.setData("text/plain", selectedText);
    },
    true
  );

// scripts/styles.css

pre, code {
    user-select: text !important;
}
// manifest.json
  "content_scripts": [
    {
      "matches": ["https://*.csdn.net/*"],
      "js": ["scripts/content.js"],
      "css": ["scripts/styles.css"],
      "run_at": "document_end", //当文档加载完成后执行脚本
      "all_frames": true //匹配所有frame
    }
  ],

三 示例演示

源码