← 全部文章

教程

在任何页面上解锁复制、选择和右键

你撞上一篇文章,想把一段复制到你的笔记里 —— 而页面不让你选择文本。右键什么都不做。这不是浏览器的 bug,是页面 JavaScript 里一个有意的封锁。本文展示如何用一条 JustZix 规则移除它。

页面如何阻止复制

HTML 里没有「只读模式」。一个阻止选择的页面用两种方式做到这点:

两者都能被撤销,因为两者都在浏览器里运行 —— 而你对自己的浏览器有完全的控制。

这合法吗?

合法。文本已经在你的屏幕上了 —— 页面把它发给了你。移除复制封锁并没有绕过任何内容保护,因为根本没有;它只是一个 UX 上的讨厌玩意。文本本身的著作权是另一回事 —— 你复制的片段做什么,由你决定。

规则 —— CSS 加 JS

把 URL 模式设到讨厌你的那个页面(或全局用 *)。在规则的 JavaScript 标签页里,粘贴:

['copy', 'cut', 'contextmenu', 'selectstart', 'dragstart']
  .forEach(evt =>
    document.addEventListener(evt, e => e.stopPropagation(), true)
  );
const s = document.createElement('style');
s.textContent =
  '*{user-select:text!important;-webkit-user-select:text!important}';
document.documentElement.appendChild(s);

它如何工作

捕获阶段的 stopPropagation

addEventListener 的第三个参数设为 true 表示捕获阶段。我们的监听器在事件到达页面处理器之前捕获它,并调用 stopPropagation() —— 传播停止,页面处理器(那个带 preventDefault() 的)永远收不到事件。

注入的 style

第二段加一条带 user-select: text !important 的 CSS 规则。!important 胜过页面任何 user-select: none。我们从 JS 注入它(而不是作为规则的 CSS),好让它恰好落在级联的最末端,确保获胜。

纯 CSS 变体

如果封锁纯粹是 CSS 的,JS 就没用了 —— 规则的 CSS 标签页就够了:

* { user-select: text !important; -webkit-user-select: text !important; }

先试这个。如果选择还是不行,那页面在 JS 里也封锁了,你需要完整版本。

另见

安装 JustZix —— 从每个想阻止你的页面上复制。

为这篇文章评分

暂无评分 — 成为第一个。

自己动手试试

安装 JustZix,粘贴本文中的任意代码片段。两分钟,从零到一条在你所有设备上生效的规则。

获取 JustZix

功能 · 工作原理 · 示例 · 应用场景