NexT主题的网站设置“禁止复制”功能
1. 本网站的系统架构
设置方法
在 Hexo NexT 主题中设置禁止复制功能,可以通过以下两种方式实现:
- 方法一:通过 CSS 禁用文本选择
- 方法二:通过 JavaScript 禁用右键和复制操作
通过 CSS 禁用文本选择
通过添加全局 CSS 样式,禁止用户选择页面中的文本(但无法完全阻止通过开发者工具或禁用 CSS 的方式复制内容):
-
创建自定义样式文件
在博客根目录的source/_data文件夹下新建styles.styl文件(若文件夹不存在需手动创建),添加以下内容:body {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
} -
启用自定义样式
打开主题配置文件_config.yml,找到custom_file_path部分,取消style行的注释:custom_file_path:
style: source/_data/styles.styl -
重新生成博客
执行hexo clean && hexo g刷新页面即可生效。
通过 JavaScript 禁用右键和复制操作
通过注入脚本禁用右键菜单、文本选择和复制操作:
-
创建自定义脚本文件
在source/_data文件夹下新建body-end.njk文件,添加以下代码:<script>
document.addEventListener('contextmenu', function(e) { e.preventDefault(); });
document.addEventListener('copy', function(e) { e.preventDefault(); });
document.addEventListener('selectstart', function(e) { e.preventDefault(); });
</script> -
启用脚本注入
在主题配置文件中,取消bodyEnd行的注释:custom_file_path:
bodyEnd: source/_data/body-end.njk -
重新生成博客
运行hexo clean && hexo g后,页面将无法通过右键或快捷键复制内容。
注意事项
- 兼容性问题:上述方法无法彻底阻止用户通过浏览器开发者工具或禁用 JavaScript/CSS 的方式复制内容,仅能增加复制难度。
- 主题版本差异:不同版本的 NexT 主题配置路径可能略有差异,建议操作前备份配置文件。
- 用户体验:禁用复制可能影响读者正常使用(如代码片段引用),建议仅对敏感内容局部设置(如通过文章加密插件)。