有没有一种方法可以使 HTML 页面上的文本无法被选中?

149

我正在构建一个HTML界面,其中包含一些文本元素,比如标签名称,在选定后看起来很糟糕。不幸的是,用户双击标签名称很容易在许多浏览器中默认将其选中。

我可能可以用JavaScript的技巧来解决这个问题(我也想看到那些答案)--但我真的希望有一些CSS/HTML直接适用于所有浏览器的方法。


2
虽然这里列出的许多示例都可以工作,但请记住,没有什么可以阻止某人查看源代码并复制文本。 - Ren
根据您的需求,https://dev59.com/aG855IYBdhLWcg3w1oE8 也可能是一个适用的解决方案。 - ThiefMaster
16个回答

3

"如果你的内容真的很有趣,那么你最终无法做太多事情来保护它"

这是真的,但根据我的经验,大多数复制与"最终"、极客、决心剽窃者或其他任何因素都没有关系。通常是由于一些无知的人随意复制,即使是简单的、容易被打败的保护措施(对像我们这样的人来说很容易被打败)也可以很好地阻止他们。他们对"查看源代码"、缓存或其他任何东西都一无所知……甚至不知道什么是Web浏览器,也不知道自己正在使用它。


1
任何JavaScript或CSS方法都可以轻松地通过Firebug绕过(就像Flickr的情况一样)。
您可以在CSS中使用{{link1: :: selection 伪元素}}来更改高亮颜色。
如果选项卡是链接并且活动状态下的 点状矩形也是一个问题,则也可以将其删除(当然要考虑可用性)。

1

图片也可以被选择。

使用JavaScript取消选择文本存在限制,因为它可能会发生在您想要选择的地方。为了确保丰富和成功的职业生涯,请避免所有需要能够影响或管理浏览器超出普通范围的要求...除非当然他们付给你极高的薪水。


1

如果外观不佳,您可以使用CSS更改所选部分的外观。


1

在编程中,有许多情况下关闭可选择性可以增强用户体验。

例如,允许用户复制页面上的一块文本,而不复制与之相关联的任何界面元素的文本(这些元素会夹杂在被复制的文本中)。


0
有趣的是,在 Firefox 中如果我删除 write 行,则以下代码无法运行。有人能解释为什么需要 write 行吗?
<script type="text/javascript">
document.write(".");
document.body.style.MozUserSelect='none';
</script>

2
我猜测在DOM中,body可能在它有内容之前是不可访问的,因此在写入文档之前无法设置其样式。 - Hubro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接