mirror of
https://github.com/d0zingcat/NotionNext.git
synced 2026-06-06 23:16:52 +00:00
禁止复制文章功能,附带开关
This commit is contained in:
@@ -15,7 +15,6 @@ const BLOG = {
|
|||||||
// 3.14.1版本后,欢迎语在此配置,英文逗号隔开 , 即可支持多个欢迎语打字效果。
|
// 3.14.1版本后,欢迎语在此配置,英文逗号隔开 , 即可支持多个欢迎语打字效果。
|
||||||
GREETING_WORDS: process.env.NEXT_PUBLIC_GREETING_WORDS || 'Hi,我是一个程序员, Hi,我是一个打工人,Hi,我是一个干饭人,欢迎来到我的博客🎉',
|
GREETING_WORDS: process.env.NEXT_PUBLIC_GREETING_WORDS || 'Hi,我是一个程序员, Hi,我是一个打工人,Hi,我是一个干饭人,欢迎来到我的博客🎉',
|
||||||
|
|
||||||
CAN_COPY: process.env.NEXT_PUBLIC_CAN_COPY || true, // 是否允许复制页面内容 默认允许
|
|
||||||
CUSTOM_MENU: process.env.NEXT_PUBLIC_CUSTOM_MENU || false, // 支持Menu 类型,从3.12.0版本起,各主题将逐步支持灵活的二级菜单配置,替代了原来的Page类型,此配置是试验功能、默认关闭。
|
CUSTOM_MENU: process.env.NEXT_PUBLIC_CUSTOM_MENU || false, // 支持Menu 类型,从3.12.0版本起,各主题将逐步支持灵活的二级菜单配置,替代了原来的Page类型,此配置是试验功能、默认关闭。
|
||||||
|
|
||||||
AUTHOR: process.env.NEXT_PUBLIC_AUTHOR || 'NotionNext', // 您的昵称 例如 tangly1024
|
AUTHOR: process.env.NEXT_PUBLIC_AUTHOR || 'NotionNext', // 您的昵称 例如 tangly1024
|
||||||
@@ -84,7 +83,7 @@ const BLOG = {
|
|||||||
FONT_AWESOME: process.env.NEXT_PUBLIC_FONT_AWESOME_PATH || 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css', // font-awesome 字体图标地址; 可选 /css/all.min.css , https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/font-awesome/6.0.0/css/all.min.css
|
FONT_AWESOME: process.env.NEXT_PUBLIC_FONT_AWESOME_PATH || 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css', // font-awesome 字体图标地址; 可选 /css/all.min.css , https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/font-awesome/6.0.0/css/all.min.css
|
||||||
|
|
||||||
// END ************网站字体*****************
|
// END ************网站字体*****************
|
||||||
|
CAN_COPY: process.env.NEXT_PUBLIC_CAN_COPY || true, // 是否允许复制页面内容 默认允许,如果设置为false、则全栈禁止复制内容。
|
||||||
CUSTOM_RIGHT_CLICK_CONTEXT_MENU: process.env.NEXT_PUBLIC_CUSTOM_RIGHT_CLICK_CONTEXT_MENU || true, // 自定义右键菜单,覆盖系统菜单
|
CUSTOM_RIGHT_CLICK_CONTEXT_MENU: process.env.NEXT_PUBLIC_CUSTOM_RIGHT_CLICK_CONTEXT_MENU || true, // 自定义右键菜单,覆盖系统菜单
|
||||||
|
|
||||||
// 自定义外部脚本,外部样式
|
// 自定义外部脚本,外部样式
|
||||||
|
|||||||
21
components/DisableCopy.js
Normal file
21
components/DisableCopy.js
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import BLOG from '@/blog.config'
|
||||||
|
import { useEffect } from 'react'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 禁止用户拷贝文章的插件
|
||||||
|
*/
|
||||||
|
export default function DisableCopy() {
|
||||||
|
useEffect(() => {
|
||||||
|
if (!JSON.parse(BLOG.CAN_COPY)) {
|
||||||
|
// 全栈添加禁止复制的样式
|
||||||
|
document.getElementsByTagName('html')[0].classList.add('forbid-copy')
|
||||||
|
// 监听复制事件
|
||||||
|
document.addEventListener('copy', function (event) {
|
||||||
|
event.preventDefault() // 阻止默认复制行为
|
||||||
|
alert('抱歉,本网页内容不可复制!')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
return null
|
||||||
|
}
|
||||||
@@ -30,6 +30,7 @@ const GoogleAdsense = dynamic(() => import('@/components/GoogleAdsense'), { ssr:
|
|||||||
const Messenger = dynamic(() => import('@/components/FacebookMessenger'), { ssr: false })
|
const Messenger = dynamic(() => import('@/components/FacebookMessenger'), { ssr: false })
|
||||||
const VConsole = dynamic(() => import('@/components/VConsole'), { ssr: false })
|
const VConsole = dynamic(() => import('@/components/VConsole'), { ssr: false })
|
||||||
const CustomContextMenu = dynamic(() => import('@/components/CustomContextMenu'), { ssr: false })
|
const CustomContextMenu = dynamic(() => import('@/components/CustomContextMenu'), { ssr: false })
|
||||||
|
const DisableCopy = dynamic(() => import('@/components/DisableCopy'), { ssr: false })
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 各种第三方组件
|
* 各种第三方组件
|
||||||
@@ -55,6 +56,7 @@ const ExternalPlugin = (props) => {
|
|||||||
{JSON.parse(BLOG.COMMENT_TWIKOO_COUNT_ENABLE) && <TwikooCommentCounter {...props}/>}
|
{JSON.parse(BLOG.COMMENT_TWIKOO_COUNT_ENABLE) && <TwikooCommentCounter {...props}/>}
|
||||||
{JSON.parse(BLOG.RIBBON) && <Ribbon />}
|
{JSON.parse(BLOG.RIBBON) && <Ribbon />}
|
||||||
{JSON.parse(BLOG.CUSTOM_RIGHT_CLICK_CONTEXT_MENU) && <CustomContextMenu {...props} />}
|
{JSON.parse(BLOG.CUSTOM_RIGHT_CLICK_CONTEXT_MENU) && <CustomContextMenu {...props} />}
|
||||||
|
{!JSON.parse(BLOG.CAN_COPY) && <DisableCopy/>}
|
||||||
<VConsole/>
|
<VConsole/>
|
||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,13 +29,6 @@ export function GlobalContextProvider(props) {
|
|||||||
initTheme()
|
initTheme()
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
// 是否允许复制页面内容
|
|
||||||
useEffect(() => {
|
|
||||||
if (!BLOG.CAN_COPY) {
|
|
||||||
document.getElementsByTagName('html')[0].classList.add('forbid-copy')
|
|
||||||
}
|
|
||||||
}, [])
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const handleStart = (url) => {
|
const handleStart = (url) => {
|
||||||
NProgress.start()
|
NProgress.start()
|
||||||
|
|||||||
@@ -263,3 +263,9 @@ a.avatar-wrapper {
|
|||||||
.reply-author-name {
|
.reply-author-name {
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.forbid-copy {
|
||||||
|
user-select: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
}
|
||||||
@@ -10,12 +10,6 @@ const Style = () => {
|
|||||||
.dark body{
|
.dark body{
|
||||||
background-color: black;
|
background-color: black;
|
||||||
}
|
}
|
||||||
// 文本不可选取
|
|
||||||
.forbid-copy {
|
|
||||||
user-select: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
`}</style>
|
`}</style>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,12 +13,6 @@ const Style = () => {
|
|||||||
.dark body{
|
.dark body{
|
||||||
background-color: black;
|
background-color: black;
|
||||||
}
|
}
|
||||||
// 文本不可选取
|
|
||||||
.forbid-copy {
|
|
||||||
user-select: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* fukasawa的首页响应式分栏 */
|
/* fukasawa的首页响应式分栏 */
|
||||||
#theme-fukasawa .grid-item {
|
#theme-fukasawa .grid-item {
|
||||||
|
|||||||
@@ -11,12 +11,6 @@ const Style = () => {
|
|||||||
.dark body{
|
.dark body{
|
||||||
background-color: black;
|
background-color: black;
|
||||||
}
|
}
|
||||||
// 文本不可选取
|
|
||||||
.forbid-copy {
|
|
||||||
user-select: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
`}</style>
|
`}</style>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,12 +10,6 @@ const Style = () => {
|
|||||||
background-color: #f7f9fe;
|
background-color: #f7f9fe;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
}
|
}
|
||||||
// 文本不可选取
|
|
||||||
.forbid-copy {
|
|
||||||
user-select: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 公告栏中的字体固定白色
|
// 公告栏中的字体固定白色
|
||||||
#theme-heo #announcement-content .notion{
|
#theme-heo #announcement-content .notion{
|
||||||
|
|||||||
@@ -13,12 +13,6 @@ const Style = () => {
|
|||||||
.dark body{
|
.dark body{
|
||||||
background-color: black;
|
background-color: black;
|
||||||
}
|
}
|
||||||
// 文本不可选取
|
|
||||||
.forbid-copy {
|
|
||||||
user-select: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 菜单下划线动画 */
|
/* 菜单下划线动画 */
|
||||||
#theme-hexo .menu-link {
|
#theme-hexo .menu-link {
|
||||||
|
|||||||
@@ -10,12 +10,6 @@ const Style = () => {
|
|||||||
.test {
|
.test {
|
||||||
text-color: red;
|
text-color: red;
|
||||||
}
|
}
|
||||||
// 文本不可选取
|
|
||||||
.forbid-copy {
|
|
||||||
user-select: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
`}</style>
|
`}</style>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,12 +13,6 @@ const Style = () => {
|
|||||||
.dark body{
|
.dark body{
|
||||||
background-color: black;
|
background-color: black;
|
||||||
}
|
}
|
||||||
// 文本不可选取
|
|
||||||
.forbid-copy {
|
|
||||||
user-select: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 设置了从上到下的渐变黑色 */
|
/* 设置了从上到下的渐变黑色 */
|
||||||
#theme-matery .header-cover::before {
|
#theme-matery .header-cover::before {
|
||||||
|
|||||||
@@ -11,12 +11,6 @@ const Style = () => {
|
|||||||
.dark body{
|
.dark body{
|
||||||
background-color: black;
|
background-color: black;
|
||||||
}
|
}
|
||||||
// 文本不可选取
|
|
||||||
.forbid-copy {
|
|
||||||
user-select: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
`}</style>
|
`}</style>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,12 +14,6 @@ const Style = () => {
|
|||||||
.dark body{
|
.dark body{
|
||||||
background-color: black;
|
background-color: black;
|
||||||
}
|
}
|
||||||
// 文本不可选取
|
|
||||||
.forbid-copy {
|
|
||||||
user-select: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
`}</style>
|
`}</style>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,12 +11,6 @@ const Style = () => {
|
|||||||
.dark body{
|
.dark body{
|
||||||
background-color: black;
|
background-color: black;
|
||||||
}
|
}
|
||||||
// 文本不可选取
|
|
||||||
.forbid-copy {
|
|
||||||
user-select: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
`}</style>
|
`}</style>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,12 +10,6 @@ const Style = () => {
|
|||||||
.dark body{
|
.dark body{
|
||||||
background-color: black;
|
background-color: black;
|
||||||
}
|
}
|
||||||
// 文本不可选取
|
|
||||||
.forbid-copy {
|
|
||||||
user-select: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
}
|
|
||||||
`}</style>
|
`}</style>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user