← 全部文章

教程

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

出人意料地,仍有不少网站试图通过禁用文本选择、复制命令和右键菜单来"保护"它们的内容。这很少能拦住有决心的人,却不断惹恼那些只想抓取一句引语或一个电话号码的人。有了 JustZix,你可以在几秒内把这一切重新打开。

页面为什么封锁复制

网站以三种常见方式禁用复制和选择:一条 CSS 规则(user-select: none)、对 copyselectstartcontextmenu 调用 preventDefault() 的 JavaScript 事件监听器,有时还有覆盖在文本之上的一个透明遮罩。JustZix 让你能中和每一层,因为你的规则在页面里运行,而你掌控 CSS 和 JS 两者。

第 1 步:用 CSS 强制把选择打开

在 JustZix 中新建一条匹配该网站(或匹配 * 以覆盖一切)的 CSS 规则,粘贴这段。!important 标志覆盖网站自己的样式表。

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

仅这一条就修复了大多数"我无法高亮文本"的情况。如果页面仍然抵抗,封锁就是来自 JavaScript。

第 2 步:阻止 JavaScript 处理器

为同一个 URL 添加一条 JS 规则。诀窍是在捕获阶段(第三个参数 true)注册你的监听器,这样它们在网站的处理器之前运行,然后调用 stopImmediatePropagation(),让网站的封锁代码永远不触发。

['copy', 'cut', 'paste', 'selectstart', 'contextmenu', 'mousedown'].forEach(function (type) {
  document.addEventListener(type, function (e) {
    e.stopImmediatePropagation();
  }, true);
});

JustZix 每次页面加载运行一次你的 JS,所以这会及早附加并覆盖整个文档。因为你只阻止传播,浏览器的默认行为(实际复制、实际显示菜单)仍然有效。

第 3 步:清除内联处理器

有些页面直接在 <body> 元素上设置 oncontextmenu="return false"。捕获阶段的监听器不总是能击败内联属性,所以也把它们抹掉。这段代码是防御性的:它在触碰元素前检查元素是否存在。

var targets = [document.body, document.documentElement];
targets.forEach(function (el) {
  if (!el) return;
  el.oncontextmenu = null;
  el.oncopy = null;
  el.onselectstart = null;
  el.ondragstart = null;
});

组合起来

对于顽固的网站,三者都用:那条 CSS 规则加一条结合了第 2 步和第 3 步的 JS 规则。组合后的 JS 规则看起来像这样:

['copy', 'cut', 'paste', 'selectstart', 'contextmenu', 'mousedown', 'dragstart'].forEach(function (type) {
  document.addEventListener(type, function (e) {
    e.stopImmediatePropagation();
  }, true);
});

var el = document.body;
if (el) {
  el.oncontextmenu = null;
  el.oncopy = null;
  el.onselectstart = null;
}

当文本在遮罩里面时

如果你能看到文本但选择抓到的是一个空框,那就有一个隐形元素坐在上面。在开发者工具里找到它,用 CSS 禁用指针事件:

.paywall-overlay,
.copy-guard,
[class*="overlay"] {
  pointer-events: none !important;
}

对像 [class*="overlay"] 这样宽泛的选择器要保守——它们可能禁用你确实需要的按钮。一旦你识别出确切的类名,就优先用它。

可靠规则的小技巧

浏览现成示例获取这条规则的一键版本,如果你还没安装,为 Chrome、Firefox、Edge 或 Opera 下载 JustZix。一旦复制重新可用,你可能也想读我们关于自动接受 Cookie 横幅的配套文章。

为这篇文章评分

暂无评分 — 成为第一个。

自己动手试试

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

获取 JustZix

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