(第三章)浏览器插件开发(附源码):实战-破解CSDN禁止复制
一 CSDN无法复制的实现原理
- 复制文字弹出登录弹窗是因为劫持了copy事件并重写了copy事件。
点击进入函数,我们可以看到被重写的函数逻辑,先检测权限,如果没有权限,则弹出登录弹窗
- 代码无法选中是因为给pre、code元素增加了user-select:none样式控制
二 破解办法
利用静态注入的方式注入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
}
],