diff --git a/components/Comment.js b/components/Comment.js
index 203ed066..4f4107b8 100644
--- a/components/Comment.js
+++ b/components/Comment.js
@@ -1,6 +1,6 @@
import dynamic from 'next/dynamic'
import Tabs from '@/components/Tabs'
-import { isBrowser } from '@/lib/utils'
+import { isBrowser, isSearchEngineBot } from '@/lib/utils'
import { useRouter } from 'next/router'
import Artalk from './Artalk'
import { siteConfig } from '@/lib/config'
@@ -73,6 +73,10 @@ const Comment = ({ siteInfo, frontMatter, className }) => {
const COMMENT_GITALK_CLIENT_ID = siteConfig('COMMENT_GITALK_CLIENT_ID')
const COMMENT_WEBMENTION_ENABLE = siteConfig('COMMENT_WEBMENTION_ENABLE')
+ if (isSearchEngineBot()) {
+ return null
+ }
+
// 当连接中有特殊参数时跳转到评论区
if (isBrowser && ('giscus' in router.query || router.query.target === 'comment')) {
setTimeout(() => {
diff --git a/components/ExternalPlugins.js b/components/ExternalPlugins.js
index 3c274b55..2db4f9c8 100644
--- a/components/ExternalPlugins.js
+++ b/components/ExternalPlugins.js
@@ -1,4 +1,5 @@
import { siteConfig } from '@/lib/config'
+import { isSearchEngineBot } from '@/lib/utils'
import dynamic from 'next/dynamic'
import WebWhiz from './Webwhiz'
@@ -29,6 +30,10 @@ const AdBlockDetect = dynamic(() => import('@/components/AdBlockDetect'), { ssr:
* @returns
*/
const ExternalPlugin = (props) => {
+ if (isSearchEngineBot()) {
+ return null
+ }
+
return <>
{JSON.parse(siteConfig('THEME_SWITCH')) && }
{JSON.parse(siteConfig('DEBUG')) && }
diff --git a/components/FacebookMessenger.js b/components/FacebookMessenger.js
index 388640d9..ef8da0cb 100644
--- a/components/FacebookMessenger.js
+++ b/components/FacebookMessenger.js
@@ -1,14 +1,41 @@
-import { Component } from 'react'
+import { Component, useEffect, useState } from 'react'
import PropTypes from 'prop-types'
import { siteConfig } from '@/lib/config'
export default function Messenger() {
- return
+ const pageId = siteConfig('FACEBOOK_PAGE_ID')
+ const appId = siteConfig('FACEBOOK_APP_ID')
+ const language = siteConfig('LANG').replace('-', '_')
+
+ // 新增一个状态变量用于追踪是否已经滚动过
+ const [showMessenger, setShowMessenger] = useState(false);
+
+ const showTheComponent = () => {
+ window.removeEventListener('scroll', showTheComponent);
+ if (!showMessenger) {
+ setShowMessenger(true);
+ }
+ };
+
+ // 延时7秒,或页面滚动时加载该组件
+ useEffect(() => {
+ window.addEventListener('scroll', showTheComponent);
+ setTimeout(() => {
+ showTheComponent()
+ }, 7000);
+ return () => {
+ window.removeEventListener('scroll', showTheComponent);
+ };
+ }, []);
+
+ return <>
+ {showMessenger && }
+ >
}
/**
@@ -24,8 +51,8 @@ class MessengerCustomerChat extends Component {
}
/**
- * 初始化
- */
+ * 初始化
+ */
componentDidMount() {
this.setFbAsyncInit()
this.reloadSDKAsynchronously()
@@ -34,19 +61,19 @@ class MessengerCustomerChat extends Component {
componentDidUpdate(prevProps) {
if (
prevProps.pageId !== this.props.pageId ||
- prevProps.appId !== this.props.appId ||
- prevProps.shouldShowDialog !== this.props.shouldShowDialog ||
- prevProps.htmlRef !== this.props.htmlRef ||
- prevProps.minimized !== this.props.minimized ||
- prevProps.themeColor !== this.props.themeColor ||
- prevProps.loggedInGreeting !== this.props.loggedInGreeting ||
- prevProps.loggedOutGreeting !== this.props.loggedOutGreeting ||
- prevProps.greetingDialogDisplay !== this.props.greetingDialogDisplay ||
- prevProps.greetingDialogDelay !== this.props.greetingDialogDelay ||
- prevProps.autoLogAppEvents !== this.props.autoLogAppEvents ||
- prevProps.xfbml !== this.props.xfbml ||
- prevProps.version !== this.props.version ||
- prevProps.language !== this.props.language
+ prevProps.appId !== this.props.appId ||
+ prevProps.shouldShowDialog !== this.props.shouldShowDialog ||
+ prevProps.htmlRef !== this.props.htmlRef ||
+ prevProps.minimized !== this.props.minimized ||
+ prevProps.themeColor !== this.props.themeColor ||
+ prevProps.loggedInGreeting !== this.props.loggedInGreeting ||
+ prevProps.loggedOutGreeting !== this.props.loggedOutGreeting ||
+ prevProps.greetingDialogDisplay !== this.props.greetingDialogDisplay ||
+ prevProps.greetingDialogDelay !== this.props.greetingDialogDelay ||
+ prevProps.autoLogAppEvents !== this.props.autoLogAppEvents ||
+ prevProps.xfbml !== this.props.xfbml ||
+ prevProps.version !== this.props.version ||
+ prevProps.language !== this.props.language
) {
this.setFbAsyncInit()
this.reloadSDKAsynchronously()
@@ -60,8 +87,8 @@ class MessengerCustomerChat extends Component {
}
/**
- * 初始化
- */
+ * 初始化
+ */
setFbAsyncInit() {
const { appId, autoLogAppEvents, xfbml, version } = this.props
@@ -80,18 +107,18 @@ class MessengerCustomerChat extends Component {
loadSDKAsynchronously() {
const { language } = this.props;
/* eslint-disable */
- (function (d, s, id) {
- var js,
- fjs = d.getElementsByTagName(s)[0];
- if (d.getElementById(id)) {
- return;
- }
- js = d.createElement(s);
- js.id = id;
- js.src = `https://connect.facebook.net/${language}/sdk/xfbml.customerchat.js`;
- fjs.parentNode.insertBefore(js, fjs);
- })(document, 'script', 'facebook-jssdk');
- /* eslint-enable */
+ (function (d, s, id) {
+ var js,
+ fjs = d.getElementsByTagName(s)[0];
+ if (d.getElementById(id)) {
+ return;
+ }
+ js = d.createElement(s);
+ js.id = id;
+ js.src = `https://connect.facebook.net/${language}/sdk/xfbml.customerchat.js`;
+ fjs.parentNode.insertBefore(js, fjs);
+ })(document, 'script', 'facebook-jssdk');
+ /* eslint-enable */
}
removeFacebookSDK() {
@@ -147,25 +174,25 @@ class MessengerCustomerChat extends Component {
const refAttribute = htmlRef !== undefined ? `ref="${htmlRef}"` : ''
const minimizedAttribute =
- minimized !== undefined ? `minimized="${minimized}"` : ''
+ minimized !== undefined ? `minimized="${minimized}"` : ''
const themeColorAttribute =
- themeColor !== undefined ? `theme_color="${themeColor}"` : ''
+ themeColor !== undefined ? `theme_color="${themeColor}"` : ''
const loggedInGreetingAttribute =
- loggedInGreeting !== undefined
- ? `logged_in_greeting="${loggedInGreeting}"`
- : ''
+ loggedInGreeting !== undefined
+ ? `logged_in_greeting="${loggedInGreeting}"`
+ : ''
const loggedOutGreetingAttribute =
- loggedOutGreeting !== undefined
- ? `logged_out_greeting="${loggedOutGreeting}"`
- : ''
+ loggedOutGreeting !== undefined
+ ? `logged_out_greeting="${loggedOutGreeting}"`
+ : ''
const greetingDialogDisplayAttribute =
- greetingDialogDisplay !== undefined
- ? `greeting_dialog_display="${greetingDialogDisplay}"`
- : ''
+ greetingDialogDisplay !== undefined
+ ? `greeting_dialog_display="${greetingDialogDisplay}"`
+ : ''
const greetingDialogDelayAttribute =
- greetingDialogDelay !== undefined
- ? `greeting_dialog_delay="${greetingDialogDelay}"`
- : ''
+ greetingDialogDelay !== undefined
+ ? `greeting_dialog_delay="${greetingDialogDelay}"`
+ : ''
return {
__html: `
{
const router = useRouter()
+ const title = siteConfig('TITLE')
if (!JSON.parse(siteConfig('POST_SHARE_BAR_ENABLE')) || !post || post?.type !== 'Post') {
return <>>
@@ -17,7 +18,7 @@ const ShareBar = ({ post }) => {
{
}
if (singleService === 'qq') {
return
diff --git a/lib/utils.js b/lib/utils.js
index 30e0e038..18e50535 100644
--- a/lib/utils.js
+++ b/lib/utils.js
@@ -7,6 +7,27 @@ import { memo } from 'react'
*/
export const isBrowser = typeof window !== 'undefined'
+/**
+ * google机器人
+ * @returns
+ */
+export const isSearchEngineBot = () => {
+ if (typeof navigator === 'undefined') {
+ return false
+ }
+ // 获取用户代理字符串
+ const userAgent = navigator.userAgent;
+ const isEngine = /Googlebot|bingbot|Baidu/.test(userAgent);
+
+ if (isEngine) {
+ console.warn('爬虫', userAgent)
+ } else {
+ console.error('u-a', userAgent)
+ }
+ // 使用正则表达式检测是否包含搜索引擎爬虫关键字
+ return isEngine
+}
+
/**
* 组件持久化
*/
diff --git a/themes/simple/components/TopBar.js b/themes/simple/components/TopBar.js
index 05e3cd7b..843eaeda 100644
--- a/themes/simple/components/TopBar.js
+++ b/themes/simple/components/TopBar.js
@@ -6,10 +6,12 @@ import { siteConfig } from '@/lib/config'
* @returns
*/
export const TopBar = (props) => {
- if (siteConfig('SIMPLE_TOP_BAR_CONTENT', null, CONFIG)) {
+ const content = siteConfig('SIMPLE_TOP_BAR_CONTENT', null, CONFIG)
+
+ if (content) {
return
}
diff --git a/themes/simple/index.js b/themes/simple/index.js
index 7c567427..0324992a 100644
--- a/themes/simple/index.js
+++ b/themes/simple/index.js
@@ -2,7 +2,7 @@ import CONFIG from './config'
import { BlogListPage } from './components/BlogListPage'
import { BlogListScroll } from './components/BlogListScroll'
import { useEffect } from 'react'
-import { isBrowser, loadExternalResource } from '@/lib/utils'
+import { isBrowser } from '@/lib/utils'
import BlogArchiveItem from './components/BlogArchiveItem'
import { ArticleLock } from './components/ArticleLock'
import NotionPage from '@/components/NotionPage'
@@ -37,9 +37,6 @@ const LayoutBase = props => {
const { children, slotTop, meta } = props
const { onLoading } = useGlobal()
- if (isBrowser) {
- loadExternalResource('/css/theme-simple.css', 'css')
- }
return (
{/* SEO相关 */}