Post

Web Copy


title: “Copying Text in the Browser” description: “Different approaches to implementing clipboard copy on web pages, including the modern Clipboard API.” date: 2022-03-15 11:33:00 +0800 categories: [JS,Base] tags: [copy] —

你应该遇到过这种情况:在某个网站选中文字,Ctrl+C,结果粘贴出来是一段「请先登录」或者「禁止复制内容」。或者更过分的,你以为复制成功了,粘贴才发现内容被偷换成了他们的推广文字。

这是用了 copy 事件:

1
2
3
4
document.addEventListener("copy", (e) => {
  e.preventDefault(); // 阻止默认行为
  alert("想要吗?打钱");
});

e.preventDefault() 阻止了浏览器的默认复制动作,然后可以在这里做任何事——弹窗、跳转登录,或者把剪贴板内容偷换成自己想要的:

1
2
3
4
document.addEventListener("copy", (e) => {
  e.preventDefault();
  e.clipboardData.setData("text/plain", "想P吃,快打钱!");
});

神不知鬼不觉,用户粘贴出来的是你设置的那段。


既然知道原理,也就知道怎么破:F12 打开调试工具,选中文字元素,在 Event Listeners 里找到 copy,把它移除。

copy事件监听器 copy事件监听器-dark

移除之后正常选中复制就行了。你们在哪个网站遇到过这种现象?

This post is licensed under CC BY 4.0 by the author.