在任何页面上解除对复制、选择和右键的封锁
出人意料地,仍有不少网站试图通过禁用文本选择、复制命令和右键菜单来"保护"它们的内容。这很少能拦住有决心的人,却不断惹恼那些只想抓取一句引语或一个电话号码的人。有了 JustZix,你可以在几秒内把这一切重新打开。
页面为什么封锁复制
网站以三种常见方式禁用复制和选择:一条 CSS 规则(user-select: none)、对 copy、selectstart 和 contextmenu 调用 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"] 这样宽泛的选择器要保守——它们可能禁用你确实需要的按钮。一旦你识别出确切的类名,就优先用它。
可靠规则的小技巧
- 尽可能窄地匹配规则。按站点的模式比
*更安全。 - 把 CSS 规则和 JS 规则分开,这样你在测试时能独立切换每一个。
- 如果页面动态加载内容,捕获阶段的监听器仍然有效,因为它们位于
document上,而非单个元素上。 - 这里没有任何东西把数据发往任何地方——它只改变事件在你自己浏览器里的行为方式。
浏览现成示例获取这条规则的一键版本,如果你还没安装,为 Chrome、Firefox、Edge 或 Opera 下载 JustZix。一旦复制重新可用,你可能也想读我们关于自动接受 Cookie 横幅的配套文章。
为这篇文章评分
暂无评分 — 成为第一个。