From 3b181f3069e7ef3fdeb8263011997fdc3623bbba Mon Sep 17 00:00:00 2001 From: "tangly1024.com" Date: Fri, 1 Dec 2023 12:50:54 +0800 Subject: [PATCH 01/15] =?UTF-8?q?load=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/Comment.js | 6 +- components/ExternalPlugins.js | 5 ++ components/FacebookMessenger.js | 131 +++++++++++++++++------------ components/ShareBar.js | 3 +- components/ShareButtons.js | 2 +- lib/utils.js | 21 +++++ themes/simple/components/TopBar.js | 6 +- themes/simple/index.js | 5 +- 8 files changed, 118 insertions(+), 61 deletions(-) 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相关 */} From 65a47af7a6785d79f97c11250170592d49390849 Mon Sep 17 00:00:00 2001 From: "tangly1024.com" Date: Fri, 1 Dec 2023 13:48:54 +0800 Subject: [PATCH 02/15] =?UTF-8?q?load=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/utils.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/utils.js b/lib/utils.js index 18e50535..8c2057e6 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -17,7 +17,9 @@ export const isSearchEngineBot = () => { } // 获取用户代理字符串 const userAgent = navigator.userAgent; - const isEngine = /Googlebot|bingbot|Baidu/.test(userAgent); + const isEngine = /Googlebot|bingbot|Baidu/.test(userAgent) || + userAgent === 'u-a Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36' || + userAgent === 'u-a Mozilla/5.0 (Linux; Android 11; moto g power (2022)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Mobile Safari/537.36' if (isEngine) { console.warn('爬虫', userAgent) From 1dd117f3c65a94746bb0593b03571b382af33663 Mon Sep 17 00:00:00 2001 From: "tangly1024.com" Date: Fri, 1 Dec 2023 14:24:13 +0800 Subject: [PATCH 03/15] plugin --- components/ExternalPlugins.js | 227 ++++++++++++++++++++-------------- lib/utils.js | 11 +- 2 files changed, 132 insertions(+), 106 deletions(-) diff --git a/components/ExternalPlugins.js b/components/ExternalPlugins.js index 2db4f9c8..813025c0 100644 --- a/components/ExternalPlugins.js +++ b/components/ExternalPlugins.js @@ -1,5 +1,4 @@ import { siteConfig } from '@/lib/config' -import { isSearchEngineBot } from '@/lib/utils' import dynamic from 'next/dynamic' import WebWhiz from './Webwhiz' @@ -30,149 +29,185 @@ const AdBlockDetect = dynamic(() => import('@/components/AdBlockDetect'), { ssr: * @returns */ const ExternalPlugin = (props) => { - if (isSearchEngineBot()) { + const DISABLE_PLUGIN = siteConfig('DISABLE_PLUGIN') + const THEME_SWITCH = siteConfig('THEME_SWITCH') + const DEBUG = siteConfig('DEBUG') + const ANALYTICS_ACKEE_TRACKER = siteConfig('ANALYTICS_ACKEE_TRACKER') + const ANALYTICS_VERCEL = siteConfig('ANALYTICS_VERCEL') + const ANALYTICS_BUSUANZI_ENABLE = siteConfig('ANALYTICS_BUSUANZI_ENABLE') + const ADSENSE_GOOGLE_ID = siteConfig('ADSENSE_GOOGLE_ID') + const FACEBOOK_APP_ID = siteConfig('FACEBOOK_APP_ID') + const FACEBOOK_PAGE_ID = siteConfig('FACEBOOK_PAGE_ID') + const FIREWORKS = siteConfig('FIREWORKS') + const SAKURA = siteConfig('SAKURA') + const STARRY_SKY = siteConfig('STARRY_SKY') + const MUSIC_PLAYER = siteConfig('MUSIC_PLAYER') + const NEST = siteConfig('NEST') + const FLUTTERINGRIBBON = siteConfig('FLUTTERINGRIBBON') + const COMMENT_TWIKOO_COUNT_ENABLE = siteConfig('COMMENT_TWIKOO_COUNT_ENABLE') + const RIBBON = siteConfig('RIBBON') + const CUSTOM_RIGHT_CLICK_CONTEXT_MENU = siteConfig('CUSTOM_RIGHT_CLICK_CONTEXT_MENU') + const CAN_COPY = siteConfig('CAN_COPY') + const WEB_WHIZ_ENABLED = siteConfig('WEB_WHIZ_ENABLED') + const AD_WWADS_BLOCK_DETECT = siteConfig('AD_WWADS_BLOCK_DETECT') + const CHATBASE_ID = siteConfig('CHATBASE_ID') + const COMMENT_DAO_VOICE_ID = siteConfig('COMMENT_DAO_VOICE_ID') + const AD_WWADS_ID = siteConfig('AD_WWADS_ID') + const COMMENT_TWIKOO_ENV_ID = siteConfig('COMMENT_TWIKOO_ENV_ID') + const COMMENT_TWIKOO_CDN_URL = siteConfig('COMMENT_TWIKOO_CDN_URL') + const COMMENT_ARTALK_SERVER = siteConfig('COMMENT_ARTALK_SERVER') + const COMMENT_ARTALK_JS = siteConfig('COMMENT_ARTALK_JS') + const COMMENT_TIDIO_ID = siteConfig('COMMENT_TIDIO_ID') + const COMMENT_GITTER_ROOM = siteConfig('COMMENT_GITTER_ROOM') + const ANALYTICS_BAIDU_ID = siteConfig('ANALYTICS_BAIDU_ID') + const ANALYTICS_CNZZ_ID = siteConfig('ANALYTICS_CNZZ_ID') + const ANALYTICS_GOOGLE_ID = siteConfig('ANALYTICS_GOOGLE_ID') + const MATOMO_HOST_URL = siteConfig('MATOMO_HOST_URL') + const MATOMO_SITE_ID = siteConfig('MATOMO_SITE_ID') + + if (DISABLE_PLUGIN) { return null } return <> - {JSON.parse(siteConfig('THEME_SWITCH')) && } - {JSON.parse(siteConfig('DEBUG')) && } - {siteConfig('ANALYTICS_ACKEE_TRACKER') && } - {siteConfig('ANALYTICS_GOOGLE_ID') && } - {siteConfig('ANALYTICS_VERCEL') && } - {JSON.parse(siteConfig('ANALYTICS_BUSUANZI_ENABLE')) && } - {siteConfig('ADSENSE_GOOGLE_ID') && } - {siteConfig('FACEBOOK_APP_ID') && siteConfig('FACEBOOK_PAGE_ID') && } - {JSON.parse(siteConfig('FIREWORKS')) && } - {JSON.parse(siteConfig('SAKURA')) && } - {JSON.parse(siteConfig('STARRY_SKY')) && } - {JSON.parse(siteConfig('MUSIC_PLAYER')) && } - {JSON.parse(siteConfig('NEST')) && } - {JSON.parse(siteConfig('FLUTTERINGRIBBON')) && } - {JSON.parse(siteConfig('COMMENT_TWIKOO_COUNT_ENABLE')) && } - {JSON.parse(siteConfig('RIBBON')) && } - {JSON.parse(siteConfig('CUSTOM_RIGHT_CLICK_CONTEXT_MENU')) && } - {!JSON.parse(siteConfig('CAN_COPY')) && } - {JSON.parse(siteConfig('WEB_WHIZ_ENABLED')) && } - {JSON.parse(siteConfig('AD_WWADS_BLOCK_DETECT')) && } - + {THEME_SWITCH && } + {DEBUG && } + {ANALYTICS_ACKEE_TRACKER && } + {ANALYTICS_GOOGLE_ID && } + {ANALYTICS_VERCEL && } + {ANALYTICS_BUSUANZI_ENABLE && } + {ADSENSE_GOOGLE_ID && } + {FACEBOOK_APP_ID && FACEBOOK_PAGE_ID && } + {FIREWORKS && } + {SAKURA && } + {STARRY_SKY && } + {MUSIC_PLAYER && } + {NEST && } + {FLUTTERINGRIBBON && } + {COMMENT_TWIKOO_COUNT_ENABLE && } + {RIBBON && } + {CUSTOM_RIGHT_CLICK_CONTEXT_MENU && } + {!CAN_COPY && } + {WEB_WHIZ_ENABLED && } + {AD_WWADS_BLOCK_DETECT && } + - {siteConfig('CHATBASE_ID') && (<> - } + {AD_WWADS_ID && } - {siteConfig('COMMENT_TWIKOO_ENV_ID') &&