禁用JavaScript时网站仍无法选中文本,是通过什么技术实现的?
禁用JavaScript后仍无法选中网页文本的实现机制说明
这类限制完全不需要JavaScript参与,仅靠HTML和CSS的原生规则即可实现,常见的实现机制如下:
- CSS
user-select属性限制
这是最普遍的实现方案,站点会给body标签或者承载文本的目标元素添加CSS规则user-select: none;,该属性是浏览器原生支持的样式规则,作用就是禁止用户选中对应元素内的内容,全程不需要JS运行,因此禁用JS后规则依然生效。 - 伪元素承载文本内容
部分站点会把需要展示的文本写在::before、::after这类CSS伪元素的content属性中,这类渲染出来的文本不属于DOM树中的可选中文本节点,默认无法被鼠标框选,该实现同样和JS无关。 - 透明遮罩层拦截
站点会在文本展示区域的上层叠加一个透明的div元素,设置更高的z-index属性,用户鼠标操作时实际选中的是这个透明层,自然无法选中下层的文本内容,仅靠HTML+CSS布局即可实现。 - iframe嵌套内容
如果文本内容是放在独立的iframe框架中嵌套展示的,父页面禁用JS不会影响iframe内部的CSS禁止选择规则,因此限制依然生效。
快速解除限制的方法
- 在Chrome开发者工具的元素面板中直接找到对应文本所在的DOM节点,复制节点内的文本内容,就是你已经成功使用的方案
- 给页面添加全局自定义CSS
* { user-select: auto !important; }即可覆盖所有元素的禁止选择规则 - 启用浏览器自带的阅读模式,阅读模式会自动剥离页面的自定义样式限制,直接展示可选中的纯文本内容
内容的提问来源于stack exchange,提问作者amerr-k
相关产品推荐
相关产品推荐

