sinzmise-cetastories 2.0.0-1735727437232 → 2.0.0-1735993909961
Sign up to get free protection for your applications and to get access to all the features.
- package/404/index.html +1 -1
- package/404.html +1 -1
- package/about/index.html +1 -1
- package/album/index.html +1 -1
- package/archives/2021/12/index.html +1 -1
- package/archives/2021/index.html +1 -1
- package/archives/2022/12/index.html +1 -1
- package/archives/2022/index.html +1 -1
- package/archives/2023/01/index.html +1 -1
- package/archives/2023/02/index.html +1 -1
- package/archives/2023/03/index.html +1 -1
- package/archives/2023/04/index.html +1 -1
- package/archives/2023/07/index.html +1 -1
- package/archives/2023/08/index.html +1 -1
- package/archives/2023/09/index.html +1 -1
- package/archives/2023/10/index.html +1 -1
- package/archives/2023/11/index.html +1 -1
- package/archives/2023/12/index.html +1 -1
- package/archives/2023/index.html +1 -1
- package/archives/2023/page/2/index.html +1 -1
- package/archives/2023/page/3/index.html +1 -1
- package/archives/2024/01/index.html +1 -1
- package/archives/2024/02/index.html +1 -1
- package/archives/2024/03/index.html +1 -1
- package/archives/2024/04/index.html +1 -1
- package/archives/2024/05/index.html +1 -1
- package/archives/2024/06/index.html +1 -1
- package/archives/2024/07/index.html +1 -1
- package/archives/2024/08/index.html +1 -1
- package/archives/2024/09/index.html +1 -1
- package/archives/2024/10/index.html +1 -1
- package/archives/2024/11/index.html +1 -1
- package/archives/2024/12/index.html +1 -1
- package/archives/2024/index.html +1 -1
- package/archives/2024/page/2/index.html +1 -1
- package/archives/2024/page/3/index.html +1 -1
- package/archives/index.html +1 -1
- package/archives/page/2/index.html +1 -1
- package/archives/page/3/index.html +1 -1
- package/archives/page/4/index.html +1 -1
- package/archives/page/5/index.html +1 -1
- package/atom.xml +21 -21
- package/baidusitemap.xml +88 -88
- package/bbs/index.html +1 -1
- package/categories/index.html +1 -1
- package/categories//344/270/252/344/272/272/345/260/217/350/256/260/index.html +1 -1
- package/categories//344/270/252/344/272/272/345/260/217/350/256/260/page/2/index.html +1 -1
- package/categories//344/270/252/344/272/272/345/260/217/350/256/260/page/3/index.html +1 -1
- package/categories//346/255/214/346/233/262/346/224/266/351/233/206/index.html +1 -1
- package/categories//346/270/270/346/210/217/347/233/270/345/205/263/index.html +1 -1
- package/categories//347/253/231/347/202/271/346/212/230/350/205/276/index.html +1 -1
- package/categories//347/253/231/347/202/271/346/212/230/350/205/276/page/2/index.html +1 -1
- package/categories//351/241/271/347/233/256/346/212/230/350/205/276/index.html +1 -1
- package/charts/index.html +1 -1
- package/comments/index.html +1 -1
- package/cw.js +1 -1
- package/essay/index.html +1 -1
- package/fcircle/index.html +1 -1
- package/games/index.html +1 -1
- package/games/riddle/esc1-e.html +1 -0
- package/games/riddle/esc1-e.swf +0 -0
- package/games/riddle/esc2-e.html +1 -0
- package/games/riddle/esc2-e.swf +0 -0
- package/games/riddle/esc3-e.html +1 -1
- package/games/riddle/esc4-e.html +1 -0
- package/games/riddle/esc4-e.swf +0 -0
- package/index.html +1 -1
- package/link/index.html +1 -1
- package/music/index.html +1 -1
- package/package.json +1 -1
- package/page/2/index.html +1 -1
- package/page/3/index.html +1 -1
- package/page/4/index.html +1 -1
- package/page/5/index.html +1 -1
- package/posts/10021/index.html +1 -1
- package/posts/10045/index.html +1 -1
- package/posts/10733/index.html +1 -1
- package/posts/10996/index.html +1 -1
- package/posts/12779/index.html +1 -1
- package/posts/13624/index.html +1 -1
- package/posts/15688/index.html +1 -1
- package/posts/15748/index.html +1 -1
- package/posts/15799/index.html +1 -1
- package/posts/15842/index.html +1 -1
- package/posts/16107/index.html +1 -1
- package/posts/18063/index.html +1 -1
- package/posts/20412/index.html +1 -1
- package/posts/21375/index.html +1 -1
- package/posts/22945/index.html +1 -1
- package/posts/23021/index.html +1 -1
- package/posts/23226/index.html +1 -1
- package/posts/27531/index.html +1 -1
- package/posts/27762/index.html +1 -1
- package/posts/28536/index.html +1 -1
- package/posts/28733/index.html +1 -1
- package/posts/29196/index.html +1 -1
- package/posts/38917/index.html +1 -1
- package/posts/38964/index.html +1 -1
- package/posts/42487/index.html +1 -1
- package/posts/42580/index.html +1 -1
- package/posts/45875/index.html +1 -1
- package/posts/46640/index.html +1 -1
- package/posts/48762/index.html +1 -1
- package/posts/50710/index.html +1 -1
- package/posts/52677/index.html +1 -1
- package/posts/53662/index.html +1 -1
- package/posts/54386/index.html +1 -1
- package/posts/54481/index.html +1 -1
- package/posts/54787/index.html +1 -1
- package/posts/56467/index.html +1 -1
- package/posts/57692/index.html +1 -1
- package/posts/58203/index.html +1 -1
- package/posts/61417/index.html +1 -1
- package/posts/61712/index.html +1 -1
- package/posts/61713/index.html +1 -1
- package/posts/646/index.html +1 -1
- package/posts/64856/index.html +1 -1
- package/posts/64935/index.html +1 -1
- package/posts/65382/index.html +1 -1
- package/seas/index.html +1 -1
- package/sitemap.xml +173 -146
- package/swpp/update.json +1 -1
- package/tags/Flash/347/233/270/345/205/263/index.html +1 -1
- package/tags/Steam/346/270/270/346/210/217/index.html +1 -1
- package/tags/Windows/350/275/257/344/273/266/index.html +1 -1
- package/tags/index.html +1 -1
- package/tags//344/270/252/344/272/272/345/260/217/350/256/260/index.html +1 -1
- package/tags//344/270/252/344/272/272/345/260/217/350/256/260/page/2/index.html +1 -1
- package/tags//344/270/252/344/272/272/345/260/217/350/256/260/page/3/index.html +1 -1
- package/tags//345/205/266/345/256/203/346/270/270/346/210/217/index.html +1 -1
- package/tags//345/212/240/350/275/275/345/212/250/347/224/273/index.html +1 -1
- package/tags//346/202/254/346/265/256/345/256/240/347/211/251-/347/234/213/346/235/277/345/250/230/index.html +1 -1
- package/tags//346/255/214/346/233/262/346/224/266/351/233/206/index.html +1 -1
- package/tags//346/270/270/346/210/217/347/233/270/345/205/263/index.html +1 -1
- package/tags//347/253/231/347/202/271/345/272/225/351/203/250/351/255/224/346/224/271/index.html +1 -1
- package/tags//347/253/231/347/202/271/346/212/230/350/205/276/index.html +1 -1
- package/tags//347/253/231/347/202/271/346/212/230/350/205/276/page/2/index.html +1 -1
- package/tags//350/207/252/345/273/272/351/203/250/347/275/262/index.html +1 -1
- package/tags//351/241/265/351/235/242/351/255/224/346/224/271/index.html +1 -1
- package/tags//351/241/271/347/233/256/346/212/230/350/205/276/index.html +1 -1
- package/update/index.html +1 -1
package/posts/38964/index.html
CHANGED
@@ -1 +1 @@
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><div id="myscoll"></div><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><title>小康大佬的说说方案 ———— ispeak搭建教程 | 汐塔魔法屋</title><meta name="keywords" content="站点折腾,页面魔改"><meta name="author" content="王九弦SZ·Ninty"><meta name="copyright" content="王九弦SZ·Ninty"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="ffffff"><link rel="authorization_endpoint" href="https://indieauth.com/auth"><link rel="token_endpoint" href="https://tokens.indieauth.com/token"><link rel="webmention" href="https://webmention.io/blog.sinzmise.top/webmention"><link rel="pingback" href="https://webmention.io/blog.sinzmise.top/xmlrpc"><meta name="description" content="这篇文章是我之前写过的教程的重写"><meta property="og:type" content="article"><meta property="og:title" content="小康大佬的说说方案 ———— ispeak搭建教程"><meta property="og:url" content="https://blog.sinzmise.top/posts/38964/"><meta property="og:site_name" content="汐塔魔法屋"><meta property="og:description" content="这篇文章是我之前写过的教程的重写"><meta property="og:locale" content="zh_CN"><meta property="og:image" content="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_GVRhG42nuu.1g9uz8t24io0.webp"><meta property="article:published_time" content="2023-01-13T21:01:37.000Z"><meta property="article:modified_time" content="2025-01-01T10:29:29.563Z"><meta property="article:author" content="王九弦SZ·Ninty"><meta property="article:tag" content="站点折腾"><meta property="article:tag" content="页面魔改"><meta name="twitter:card" content="summary"><meta name="twitter:image" content="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_GVRhG42nuu.1g9uz8t24io0.webp"><link rel="shortcut icon" href="/favicon.ico"><link rel="canonical" href="https://blog.sinzmise.top/posts/38964/"><link rel="preconnect" href="//jsd.cdn.storisinz.site"><link rel="preconnect" href="//www.google-analytics.com" crossorigin=""><link rel="preconnect" href="//hm.baidu.com"><link rel="preconnect" href="//static.cloudflareinsights.com"><link rel="preconnect" href="//busuanzi.ibruce.info"><meta name="baidu-site-verification" content="codeva-F0RjFTve6w"><meta name="msvalidate.01" content="18428535B4425286753107589FC35E79"><meta name="blogsclub-find" content="0bcd40f87500234dd4721904e917e748"><meta name="blogsclub-verify" content="c993246f2c944fed8e4fdc8d024561fe"><link rel="manifest" href="/manifest.json"><meta name="msapplication-TileColor" content="var(--theme-color)"><link rel="apple-touch-icon" sizes="180x180" href="/images/siteicon/ios/128.png"><link rel="icon" type="image/png" sizes="32x32" href="/images/siteicon/ios/32.png"><link rel="icon" type="image/png" sizes="16x16" href="/images/siteicon/ios/16.png"><link rel="mask-icon" href="/images/siteicon/ios/128.png" color="#5bbad5"><div class="app-refresh" id="app-refresh" style="position:fixed;top:-2.2rem;left:0;right:0;z-index:99999;padding:0 1rem;font-size:15px;height:2.2rem;transition:all .3s ease"><div class="app-refresh-wrap" style="display:flex;color:#fff;height:100%;align-items:center;justify-content:center"><label>✨ 魔法屋上新了! 👉</label><a href="javascript:void(0)" onclick="window.location.reload(!0)"><span style="color:#fff;text-decoration:underline;cursor:pointer">🍭查看新品🍬</span></a></div></div><script>function registerServiceWorker(e){"localhost"!=window.location.hostname&&"serviceWorker"in navigator&&navigator.serviceWorker.register(`${e}?time=${(new Date).getTime()}`).then((function(e){e.onupdatefound=function(){var r=e.installing;r.onstatechange=function(){switch(r.state){case"installed":navigator.serviceWorker.controller?console.log("Updated Service Worker."):console.log("Service Worker Sucess!");break;case"redundant":console.log("The installing service worker became redundant.")}}}})).catch((function(e){console.error("Error during service worker registration:",e),"undefined"==typeof swinstallretry&&(swinstallretry=1,registerServiceWorker("/cw.js"))}))}registerServiceWorker("/cw.js")</script><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdnjs.cdn.storisinz.site/ajax/libs/font-awesome/6.0.0/css/all.min.css" media="print" onload='this.media="all"'><link rel="stylesheet" href="https://cdnjs.cdn.storisinz.site/ajax/libs/fancyapps-ui/4.0.31/fancybox.min.css" media="print" onload='this.media="all"'><script>var _hmt=_hmt||[];!function(){var e=document.createElement("script");e.src="https://hm.baidu.com/hm.js?59986c9d6715c06178a2b6e2f118f837";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)}()</script><script async src="https://www.googletagmanager.com/gtag/js?id=G-7MR59SK1DP"></script><script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-7MR59SK1DP")</script><script defer data-pjax="data-pjax" src="https://static.cloudflareinsights.com/beacon.min.js" data-cf-beacon="{"token": "dc155ba6949948e6a18a5298556d1b56"}"></script><script charset="UTF-8" id="LA_COLLECT" src="//sdk.51.la/js-sdk-pro.min.js"></script><script>LA.init({id:"K9WDMA2h2AfDg5GG",ck:"K9WDMA2h2AfDg5GG",autoTrack:!0,hashMode:!0})</script><script src="https://sdk.51.la/perf/js-sdk-perf.min.js" crossorigin="anonymous"></script><script>(new LingQue.Monitor).init({id:"K94JRCDsbHJJSjNs",sendSpaPv:!0})</script><script>const GLOBAL_CONFIG={root:"/",algolia:void 0,localSearch:void 0,translate:void 0,noticeOutdate:{limitDay:365,position:"top",messagePrev:"It has been",messageNext:"days since the last update, the content of the article may be outdated."},highlight:{plugin:"highlighjs",highlightCopy:!0,highlightLang:!0,highlightHeightLimit:230},copy:{success:"复制成功",error:"复制错误",noSupport:"浏览器不支持"},relativeDate:{homepage:!0,post:!0},runtime:"",date_suffix:{just:"刚刚",min:"分钟前",hour:"小时前",day:"天前",month:"个月前"},copyright:void 0,lightbox:"fancybox",Snackbar:void 0,source:{justifiedGallery:{js:"https://jsd.cdn.storisinz.site/npm/flickr-justified-gallery/dist/fjGallery.min.js",css:"https://jsd.cdn.storisinz.site/npm/flickr-justified-gallery/dist/fjGallery.min.css"}},isPhotoFigcaption:!1,islazyload:!0,isAnchor:!1}</script><script id="config-diff">var GLOBAL_CONFIG_SITE={title:"小康大佬的说说方案 ———— ispeak搭建教程",isPost:!0,isHome:!1,isHighlightShrink:!1,isToc:!0,postUpdate:"2025-01-01 10:29:29"}</script><noscript><style>#nav{opacity:1}.justified-gallery img{opacity:1}#post-meta time,#recent-posts time{display:inline!important}</style></noscript><script>(e=>{e.saveToLocal={set:function(e,t,o){if(0===o)return;const a=864e5*o,n={value:t,expiry:(new Date).getTime()+a};localStorage.setItem(e,JSON.stringify(n))},get:function(e){const t=localStorage.getItem(e);if(!t)return;const o=JSON.parse(t);if(!((new Date).getTime()>o.expiry))return o.value;localStorage.removeItem(e)}},e.getScript=e=>new Promise(((t,o)=>{const a=document.createElement("script");a.src=e,a.async=!0,a.onerror=o,a.onload=a.onreadystatechange=function(){const e=this.readyState;e&&"loaded"!==e&&"complete"!==e||(a.onload=a.onreadystatechange=null,t())},document.head.appendChild(a)})),e.activateDarkMode=function(){document.documentElement.setAttribute("data-theme","dark"),null!==document.querySelector('meta[name="theme-color"]')&&document.querySelector('meta[name="theme-color"]').setAttribute("content","#0d0d0d")},e.activateLightMode=function(){document.documentElement.setAttribute("data-theme","light"),null!==document.querySelector('meta[name="theme-color"]')&&document.querySelector('meta[name="theme-color"]').setAttribute("content","ffffff")};const t=saveToLocal.get("theme"),o=(new Date).getHours();void 0===t?o<=6||o>=18?activateDarkMode():activateLightMode():"light"===t?activateLightMode():activateDarkMode();const a=saveToLocal.get("aside-status");void 0!==a&&("hide"===a?document.documentElement.classList.add("hide-aside"):document.documentElement.classList.remove("hide-aside"));/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)&&document.documentElement.classList.add("apple")})(window)</script><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/element-ui@2.15.6/packages/theme-chalk/lib/index.css"><link rel="stylesheet" href="/custom2.css"><style id="themeColor"></style><style id="rightSide"></style><style id="transPercent"></style><style id="blurNum"></style><style id="settingStyle"></style><span id="fps"></span><style id="defineBg"></style><style id="menu_shadow"></style><script data-pjax src="/chatroom/chatroom.js"></script><script async src="/js/categorybar.js"></script><svg aria-hidden="true" style="position:absolute;overflow:hidden;width:0;height:0"><symbol id="icon-sun" viewBox="0 0 1024 1024"><path d="M960 512l-128 128v192h-192l-128 128-128-128H192v-192l-128-128 128-128V192h192l128-128 128 128h192v192z" fill="#FFD878" p-id="8420"></path><path d="M736 512a224 224 0 1 0-448 0 224 224 0 1 0 448 0z" fill="#FFE4A9" p-id="8421"></path><path d="M512 109.248 626.752 224H800v173.248L914.752 512 800 626.752V800h-173.248L512 914.752 397.248 800H224v-173.248L109.248 512 224 397.248V224h173.248L512 109.248M512 64l-128 128H192v192l-128 128 128 128v192h192l128 128 128-128h192v-192l128-128-128-128V192h-192l-128-128z" fill="#4D5152" p-id="8422"></path><path d="M512 320c105.888 0 192 86.112 192 192s-86.112 192-192 192-192-86.112-192-192 86.112-192 192-192m0-32a224 224 0 1 0 0 448 224 224 0 0 0 0-448z" fill="#4D5152" p-id="8423"></path></symbol><symbol id="icon-moon" viewBox="0 0 1024 1024"><path d="M611.370667 167.082667a445.013333 445.013333 0 0 1-38.4 161.834666 477.824 477.824 0 0 1-244.736 244.394667 445.141333 445.141333 0 0 1-161.109334 38.058667 85.077333 85.077333 0 0 0-65.066666 135.722666A462.08 462.08 0 1 0 747.093333 102.058667a85.077333 85.077333 0 0 0-135.722666 65.024z" fill="#FFB531" p-id="11345"></path><path d="M329.728 274.133333l35.157333-35.157333a21.333333 21.333333 0 1 0-30.165333-30.165333l-35.157333 35.157333-35.114667-35.157333a21.333333 21.333333 0 0 0-30.165333 30.165333l35.114666 35.157333-35.114666 35.157334a21.333333 21.333333 0 1 0 30.165333 30.165333l35.114667-35.157333 35.157333 35.157333a21.333333 21.333333 0 1 0 30.165333-30.165333z" fill="#030835" p-id="11346"></path></symbol></svg><script defer src="/sw-dom.js"></script><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-swiper/lib/swiper.min.css" media="print" onload='this.media="all"'><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-swiper/lib/swiperstyle.css" media="print" onload='this.media="all"'><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-tag-plugins-plus@latest/lib/assets/font-awesome-animation.min.css" media="defer" onload='this.media="all"'><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-tag-plugins-plus@latest/lib/tag_plugins.css" media="defer" onload='this.media="all"'><script src="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-tag-plugins-plus@latest/lib/assets/carousel-touch.js"></script><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-wowjs/lib/animate.min.css" media="print" onload='this.media="screen"'><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/hexo-filter-gitcalendar/lib/gitcalendar.css" media="print" onload='this.media="all"'><meta name="generator" content="Hexo 6.3.0"><link rel="alternate" href="/atom.xml" title="汐塔魔法屋" type="application/atom+xml"></head><body><div id="loading-box" onclick="document.getElementById("loading-box").classList.add("loaded")"><div class="loading-bg"><div class="loading-img"></div><div class="loading-image-dot"></div></div></div><div id="web_bg"></div><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="/img/avatar.png" onerror='onerror=null,src="/assets/r1.jpg"' alt="avatar"></div><div class="sidebar-site-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">45</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">14</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">5</div></a></div><hr><div class="menus_items"><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon--article"></use></svg> <span class="menu_word" style="font-size:17px">文章</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" href="/archives/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-guidang1"></use></svg> <span class="menu_word" style="font-size:17px">归档</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/tags/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-sekuaibiaoqian"></use></svg> <span class="menu_word" style="font-size:17px">标签</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/categories/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-fenlei"></use></svg> <span class="menu_word" style="font-size:17px">分类</span></a></li></ul></div><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-shejiaoxinxi"></use></svg> <span class="menu_word" style="font-size:17px">友链</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" href="/fcircle/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pengyouquan"></use></svg> <span class="menu_word" style="font-size:17px">朋友圈</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/comments/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-liuyan"></use></svg> <span class="menu_word" style="font-size:17px">留言板</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/link/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-lianjie"></use></svg> <span class="menu_word" style="font-size:17px">友人帐</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/bbs/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-laba"></use></svg> <span class="menu_word" style="font-size:17px">哔哔广场</span></a></li></ul></div><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-xiuxian"></use></svg> <span class="menu_word" style="font-size:17px">休闲</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" href="/games/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-Swf"></use></svg> <span class="menu_word" style="font-size:17px">小游戏</span></a></li></ul></div><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-guanyuwomen"></use></svg> <span class="menu_word" style="font-size:17px">关于</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" href="/essay/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-duanwenbentuijian"></use></svg> <span class="menu_word" style="font-size:17px">即刻短文</span></a></li></ul></div><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-chongdonglogo"></use></svg> <span class="menu_word" style="font-size:17px">虫洞</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://www.travellings.cn/go-by-clouds.html"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-huoche"></use></svg> <span class="menu_word" style="font-size:17px">开往</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://travel.moe/go.html"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-meng"></use></svg> <span class="menu_word" style="font-size:17px">异次元之旅</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://storeweb.cn/s/1707"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-shangdian"></use></svg> <span class="menu_word" style="font-size:17px">个站商店</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://bokelu.suijiboke.gs/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-boke"></use></svg> <span class="menu_word" style="font-size:17px">博客录</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://blogscn.fun/random.html"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-data-input"></use></svg> <span class="menu_word" style="font-size:17px">笔墨迹</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://www.blogsclub.org/go"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-b_x"></use></svg> <span class="menu_word" style="font-size:17px">BlogsClub</span></a></li></ul></div></div></div></div><div class="post h-entry" id="body-wrap"><header class="post-bg nav-fixed nav-visible" id="page-header"><nav id="nav"><span id="blog_name"><a id="site-name" href="/">汐塔魔法屋</a></span><div id="menus"><div class="menus_items"><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon--article"></use></svg> <span class="menu_word" style="font-size:17px">文章</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" href="/archives/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-guidang1"></use></svg> <span class="menu_word" style="font-size:17px">归档</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/tags/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-sekuaibiaoqian"></use></svg> <span class="menu_word" style="font-size:17px">标签</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/categories/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-fenlei"></use></svg> <span class="menu_word" style="font-size:17px">分类</span></a></li></ul></div><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-shejiaoxinxi"></use></svg> <span class="menu_word" style="font-size:17px">友链</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" href="/fcircle/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pengyouquan"></use></svg> <span class="menu_word" style="font-size:17px">朋友圈</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/comments/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-liuyan"></use></svg> <span class="menu_word" style="font-size:17px">留言板</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/link/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-lianjie"></use></svg> <span class="menu_word" style="font-size:17px">友人帐</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/bbs/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-laba"></use></svg> <span class="menu_word" style="font-size:17px">哔哔广场</span></a></li></ul></div><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-xiuxian"></use></svg> <span class="menu_word" style="font-size:17px">休闲</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" href="/games/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-Swf"></use></svg> <span class="menu_word" style="font-size:17px">小游戏</span></a></li></ul></div><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-guanyuwomen"></use></svg> <span class="menu_word" style="font-size:17px">关于</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" href="/essay/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-duanwenbentuijian"></use></svg> <span class="menu_word" style="font-size:17px">即刻短文</span></a></li></ul></div><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-chongdonglogo"></use></svg> <span class="menu_word" style="font-size:17px">虫洞</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://www.travellings.cn/go-by-clouds.html"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-huoche"></use></svg> <span class="menu_word" style="font-size:17px">开往</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://travel.moe/go.html"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-meng"></use></svg> <span class="menu_word" style="font-size:17px">异次元之旅</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://storeweb.cn/s/1707"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-shangdian"></use></svg> <span class="menu_word" style="font-size:17px">个站商店</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://bokelu.suijiboke.gs/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-boke"></use></svg> <span class="menu_word" style="font-size:17px">博客录</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://blogscn.fun/random.html"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-data-input"></use></svg> <span class="menu_word" style="font-size:17px">笔墨迹</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://www.blogsclub.org/go"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-b_x"></use></svg> <span class="menu_word" style="font-size:17px">BlogsClub</span></a></li></ul></div></div><center id="name-container"><a id="page-name" href="javascript:scrollToTop()">PAGE_NAME</a></center><div id="nav-right"><div id="search-button"><a class="search faa-parent animated-hover" title="检索站内任何你想要的信息"><svg class="faa-tada icon" style="height:24px;width:24px;fill:currentColor;position:relative;top:6px" aria-hidden="true"><use xlink:href="#icon-valentine_-search-love-find-heart"></use></svg> <span>搜索</span></a></div><a class="meihua faa-parent animated-hover" onclick="toggleWinbox()" title="美化设置-自定义你的风格" id="meihua-button"><svg class="faa-tada icon" style="height:26px;width:26px;fill:currentColor;position:relative;top:8px" aria-hidden="true"><use xlink:href="#icon-tupian1"></use></svg></a><a class="sun_moon faa-parent animated-hover" onclick="switchNightMode()" title="浅色和深色模式转换" id="nightmode-button"><svg class="faa-tada" style="height:25px;width:25px;fill:currentColor;position:relative;top:7px" viewBox="0 0 1024 1024"><use id="modeicon" xlink:href="#icon-moon"></use></svg></a><div id="toggle-menu"><a><i class="fas fa-bars fa-fw"></i></a></div></div></div></nav><div id="post-info"><div id="post-firstinfo"><div class="meta-firstline"><span class="article-meta tags"><a class="article-meta__tags" href="/tags/%E7%AB%99%E7%82%B9%E6%8A%98%E8%85%BE/" tabindex="-1" itemprop="url"><span><i class="anzhiyufont anzhiyu-icon-hashtag"></i> 站点折腾</span></a><a class="article-meta__tags" href="/tags/%E9%A1%B5%E9%9D%A2%E9%AD%94%E6%94%B9/" tabindex="-1" itemprop="url"><span><i class="anzhiyufont anzhiyu-icon-hashtag"></i> 页面魔改</span></a></span></div></div><h1 class="post-title p-name">小康大佬的说说方案 ———— ispeak搭建教程</h1><div id="post-meta"><div class="meta-firstline"><span class="post-meta-date"><svg class="meta_icon post-meta-icon" style="width:25px;height:25px;position:relative;top:10px"><use xlink:href="#icon-rili"></use></svg><span class="post-meta-label">发表于</span> <time class="post-meta-date-created dt-published" datetime="2023-01-13T21:01:37.000Z" title="发表于 2023-01-13 21:01:37">2023-01-13</time><span class="post-meta-separator"></span> <svg class="meta_icon post-meta-icon" style="width:18px;height:18px;position:relative;top:5px"><use xlink:href="#icon-gengxin1"></use></svg><span class="post-meta-label">更新于</span><time class="post-meta-date-updated dt-updated" datetime="2025-01-01T10:29:29.563Z" title="更新于 2025-01-01 10:29:29">2025-01-01</time></span><span class="post-meta-categories"><span class="post-meta-separator"></span> <svg class="meta_icon post-meta-icon" style="width:18px;height:18px;position:relative;top:5px"><use xlink:href="#icon-biaoqian"></use></svg><a class="post-meta-categories p-category" href="/categories/%E7%AB%99%E7%82%B9%E6%8A%98%E8%85%BE/">站点折腾</a></span></div><div class="meta-secondline"><span class="post-meta-separator"></span> <span class="post-meta-wordcount"><svg class="meta_icon post-meta-icon" style="width:25px;height:25px;position:relative;top:8px"><use xlink:href="#icon-charuword"></use></svg><span class="post-meta-label">字数总计:</span><span class="word-count">5646</span><span class="post-meta-separator"></span> <svg class="meta_icon post-meta-icon" style="width:20px;height:20px;position:relative;top:5px"><use xlink:href="#icon-shizhong"></use></svg><span class="post-meta-label">阅读时长:</span><span>28分钟</span></span><span class="post-meta-separator"></span> <span class="post-meta-pv-cv" data-flag-title="小康大佬的说说方案 ———— ispeak搭建教程"><svg class="meta_icon post-meta-icon" style="width:25px;height:25px;position:relative;top:5px"><use xlink:href="#icon-eye"></use></svg><span class="post-meta-label">阅读量:</span><span id="busuanzi_value_page_pv"><i class="fa-solid fa-spinner fa-spin"></i></span></span><span class="post-meta-separator"></span> <span class="post-meta-position" title="作者IP属地为广东潮州"><svg class="meta_icon post-meta-icon" style="width:18px;height:18px;position:relative;top:5px"><use xlink:href="#icon-pjh-diqu"></use></svg>广东潮州</span></div></div></div><section class="main-hero-waves-area waves-area"><svg class="waves-svg" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" viewBox="0 24 150 28" preserveAspectRatio="none" shape-rendering="auto"><defs><path id="gentle-wave" d="M-160 44c30 0 58-18 88-18s58 18 88 18 58-18 88-18 58 18 88 18v44h-352Z"></path></defs><g class="parallax"><use href="#gentle-wave" x="48" y="0"></use><use href="#gentle-wave" x="48" y="3"></use><use href="#gentle-wave" x="48" y="5"></use><use href="#gentle-wave" x="48" y="7"></use></g></svg></section><div id="post-top-cover"><img class="nolazyload" id="post-top-bg" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_GVRhG42nuu.1g9uz8t24io0.webp"></div></header><main class="layout" id="content-inner"><div id="post"><article class="post-content e-content" id="article-container"><h1>前言</h1><p>搞ispeak时发现ispeak更新,能自定义评论了,也就是说我之前写的<a target="_blank" rel="noopener" href="https://blog.xsnet.eu.org/posts/43224/">ispeak教程</a>失效了<br>没办法我只能重新写了这篇教程</p><h1>教程</h1><h2 id="后端部署">后端部署</h2><h3 id="配置数据库">配置数据库</h3><div class="note info simple"><p>以下内容来自:<a target="_blank" rel="noopener" href="https://discuss.js.org/guide/Get-MongoDB-DataBase.html">https://discuss.js.org/guide/Get-MongoDB-DataBase.html</a></p></div><ol><li>注册<a target="_blank" rel="noopener" href="https://www.mongodb.com/cloud/atlas/register">MongoDB</a>账号,注册完成后会提示你创建一个组织,并且输入一个项目昵称,选择编程语言(不选也可以),随后点击右下角的 <code>Continue</code>(继续),如果没有可以跟如下图执行,点击 <code>Create an Organization</code>(创建组织)<br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Organizations-Home.png" alt="Organizations-Home"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Register-Organizations.png" alt="Register-Organizations"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Create-Organization.png" alt="Create-Organization"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/New-Project.png" alt="New-Project"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Project-Name.png" alt="Project-Name"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Create-Project.png" alt="Create-Project"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Build-Database.png" alt="Build-Database"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Select-Free.png" alt="Select-Free"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/AWS-N.Virginia.png" alt="AWS-N.Virginia"></li><li>选择免费的共享数据库,随后会跳出选择地区(选择离你服务端近的即可),点击 <code>Create Cluster</code>创建</li><li>随后您需要创建数据库用户,输入用户名和密码,继续向下滚动就是添加 IP 地址,最后点击下方的 <code>Finish and Close</code>(完成并关闭)按钮</li></ol><div class="note warning simple"><p><strong>注意</strong><br>服务器部署,则填服务器公网 IP<br><code>无服务器(ServerLess)</code>ServerLess 一般都是动态 IP,你无法得到一个固定 IP,我们建议填写 <code>0.0.0.0</code></p></div><p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Add-IP.png" alt="Add IP"></p><ol start="4"><li>稍作等待创建好数据库即可,随后点击 <code>Connect</code>(连接),点击选择 <code>Connect you application</code>(连接应用程序),然后复制连接数据库字符串</li></ol><div class="note warning simple"><p><strong>注意</strong><br>需要将字符串中的 <code><password></code>替换为您在第三步创建的数据库用户密码,修改 <code>myFirstDatabase</code>为你想要的数据库名称例如:<code>Discuss</code></p></div><p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Connect.png" alt="Connect"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Get-Connect.png" alt="Get Connect"></p><h3 id="部署kkapi">部署kkapi</h3><div class="tabs" id="部署kkapi"><ul class="nav-tabs"><li class="tab active"><button type="button" data-href="#部署kkapi-1">Vercel部署(推荐)</button></li><li class="tab"><button type="button" data-href="#部署kkapi-2">服务器部署</button></li><li class="tab"><button type="button" data-href="#部署kkapi-3">docker 部署</button></li></ul><div class="tab-contents"><div class="tab-item-content active" id="部署kkapi-1"><ol><li>点击下方按钮,跳转至 Vercel 进行部署。<br><a target="_blank" rel="noopener" href="https://vercel.com/new/clone?repository-url=https://github.com/kkfive/kkapi-open/tree/vercel"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://vercel.com/button" alt="部署到Vercel"></a></li><li>配置环境变量:<br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_wwcTzH8isA.10hmhosvut28.webp" alt="msedge_wwcTzH8isA"><br>环境变量可能随项目的迭代而增加必填的环境变量,具体请参考<a target="_blank" rel="noopener" href="https://kkapi.js.org/reference/kkapi/environment.html">官网 —— kkapi环境变量</a></li><li>重新部署<br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_owqMifozPi.37vcfu5vfpm0.webp" alt="msedge_owqMifozPi"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_5WUBTLL0NZ.1nl1z1a7qiqo.webp" alt="msedge_5WUBTLL0NZ"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_mMprAjHb9O.3b2527plrfg.webp" alt="msedge_mMprAjHb9O"></li><li>绑定域名(建议)<br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_miAwQcdm9f.3htnm9dlllq0.webp" alt="msedge_miAwQcdm9f"></li><li>初始化账户<br>浏览器访问:<br>你刚刚复制的地址/api/user/init?userName=你想设置的账户名<br>如果不指定用户名则自动将账户名设置为admin</li></ol><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div><div class="tab-item-content" id="部署kkapi-2"><div class="note info simple"><p>以下内容来自:<a target="_blank" rel="noopener" href="https://kkapi.js.org/guide/setup/deploy.html#%E7%AC%AC%E4%BA%8C%E7%A7%8D%E9%83%A8%E7%BD%B2%E5%A7%BF%E5%8A%BF%EF%BC%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%83%A8%E7%BD%B2">https://kkapi.js.org/guide/setup/deploy.html#第二种部署姿势:服务器部署</a></p></div>克隆源代码<p>git clone <a target="_blank" rel="noopener" href="https://ghproxy.com/https://github.com/kkfive/kkapi-open.git">https://ghproxy.com/https://github.com/kkfive/kkapi-open.git</a></p><ol><li><p>安装依赖<br><code>yarn install</code><br>如果没有<code>yarn</code>则先允许<code>npm i yarn -g</code>进行安装</p></li><li><p>安装 pm2</p></li></ol><p><code>npm i pm2 -g</code></p><ol start="3"><li>编译项目</li></ol><p><code>yarn build</code></p><ol start="4"><li>配置环境变量</li></ol><p>在项目目录新建文件<code>local.env</code>,将环境变量写入其中即可。例如:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">PORT=3000</span><br><span class="line">DATABASE_URL=mongodb://127.0.0.1:27017/kkpaiopen?authSource=admin</span><br><span class="line">DATABASE_USER=root</span><br><span class="line">DATABASE_PASSWORD=root</span><br><span class="line"># 加密密钥 测试</span><br><span class="line">SECRETKEY=xxxxxxxxxxxxxxx</span><br></pre></td></tr></table></figure><p>其中 PORT 表示启动的端口</p><ol start="5"><li>启动项目</li></ol><p><code>pm2 start pm2.json</code></p><p>然后通过命令<code>curl http://127.0.0.1:3000/api/user/init</code>检查是否允许成功</p><p>image-20220227101623911</p><p>更新项目</p><p>进入项目并执行一下命令</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">git pull</span><br><span class="line">yarn build</span><br><span class="line">pm2 restart pm2.json</span><br></pre></td></tr></table></figure><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div><div class="tab-item-content" id="部署kkapi-3"><p>尚未写完</p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div></div><h3 id="部署kkadmin">部署kkadmin</h3><p>介绍:kkadmin是kkapi的后台,方便发布说说</p><div class="note success simple"><p>以下部署姿势你只需要任选其一即可,无需全部部署。</p></div><div class="tabs" id="部署kkadmin"><ul class="nav-tabs"><li class="tab"><button type="button" data-href="#部署kkadmin-1">Vercel部署</button></li><li class="tab active"><button type="button" data-href="#部署kkadmin-2">CF pages部署(推荐)</button></li><li class="tab"><button type="button" data-href="#部署kkadmin-3">其他环境部署</button></li></ul><div class="tab-contents"><div class="tab-item-content" id="部署kkadmin-1"><div class="note warning simple"><p>由于构建 kkadmin 时部分依赖文件需要 nodejs16 及以上版本才可以安装,因此不能将源代码扔给 vercel 进行构建。<br>所以只能够利用 GitHub actions 构建完成后将产物扔给 vercel 进行使用</p></div>1. Fork这个项目:https://github.com/kkfive/kkadmin-open/<p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/StarWEB890/TuChuang@master/images/msedge_6HMaGfN000.1csf0rae8okg.webp" alt="msedge_6HMaGfN000"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/StarWEB890/TuChuang@master/images/msedge_UPsCgr2okQ.7k0gi7brxoc0.webp" alt="msedge_UPsCgr2okQ"><br>2. 配置变量<br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/StarWEB890/TuChuang@master/images/msedge_ktuszZjpej.7ftbduod9uc0.webp" alt="msedge_ktuszZjpej"></p><p>VITE_GLOB_API_URL(必选)<br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/StarWEB890/TuChuang@master/images/msedge_wqMbtdCCon.26m2h3r94d7k.webp" alt="msedge_wqMbtdCCon"></p><ol start="3"><li>构建actions</li></ol><p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/StarWEB890/TuChuang@master/images/msedge_yymiOm8Kek.23xjzofdum3.webp" alt="msedge_yymiOm8Kek"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/StarWEB890/TuChuang@master/images/msedge_4awdNaFJGz.1rdq0mxyfhog.webp" alt="msedge_4awdNaFJGz"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/StarWEB890/TuChuang@master/images/msedge_2uYyc6Qh4I.4p3ngtkhmh00.webp" alt="msedge_2uYyc6Qh4I"></p><ol start="4"><li>部署到Vercel<br>复制下面这个网址</li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://vercel.com/new/import?s=https://github.com/SinInno/kkadmin-open/tree/vercel</span><br></pre></td></tr></table></figure><p>并将“SinInno”改为你Github的用户名后访问你刚刚修改的网址<br>PS:如果你Fork的这个项目有改Repository name,那么请将上面的“kkapi-open”改为你这个项目的Repository name</p><p>然后直接部署</p><p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/StarWEB890/TuChuang@master/images/msedge_GJbsx9xoOw.8zgxw8og644.webp" alt="msedge_GJbsx9xoOw"></p><p>部署完成后点“Go to Dashboard”,并点左上角的“Visit”</p><p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/StarWEB890/TuChuang@master/images/msedge_Lyo0nIvIqF.d4g2uabkljk.webp" alt="msedge_Lyo0nIvIqF"></p><p>账号输入你之前初始化账户的账户名<br>密码请输入默认密码:123456<br>登入面板后请更改默认密码!</p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div><div class="tab-item-content active" id="部署kkadmin-2"><div class="note info simple"><p>如果你已经在 GitHub actions 部署了,那么 cf pages 部署时也可以选择 vercel 进行部署。也可以使用主干分支进行打包部署。<br>接下来的教程以使用 cf pages 构建为例介绍</p></div>1. fork项目(可直接fork) 2. 导入项目<p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/msedge_1bV5Of8ioS.xtthsj95ytc.webp" alt="msedge_1bV5Of8ioS"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/msedge_CcnQ68DBFQ.2q893j8w72k0.webp" alt="msedge_CcnQ68DBFQ"></p><ol start="4"><li>配置环境变量</li></ol><p>环境变量参考:<a target="_blank" rel="noopener" href="https://kkapi.js.org/reference/kkadmin/environment.html">官网 —— kkadmin环境变量</a></p><p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://file.acs.pw/picGo/2022/02/27/20220227113526.png" alt="配置环境变量"></p><ol start="5"><li>等待构建完成后即可</li></ol><p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://file.acs.pw/picGo/2022/02/27/20220227114643.png" alt="构建中"></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div><div class="tab-item-content" id="部署kkadmin-3"><p>其他环境部署基本可以直接使用 GitHub 构建后的 vercel 进行,毕竟只是 HTML</p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div></div><h2 id="前端配置">前端配置</h2><h3 id="进入后台,查看个人ID">进入后台,查看个人ID</h3><p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://file.acs.pw/picGo/2022/02/27/20220227131425.png" alt="查看个人ID"></p><h3 id="前端引入">前端引入</h3><div class="note info simple"><p>ipseak 使用 marked 依赖和 highlight 依赖,为了减少打包体积,并没有将该依赖打包,因此需要使用 cdn 进行外部引入。</p></div><div class="tabs" id="前端引入ispeak"><ul class="nav-tabs"><li class="tab"><button type="button" data-href="#前端引入ispeak-1">使用Waline</button></li><li class="tab active"><button type="button" data-href="#前端引入ispeak-2">使用Twikoo</button></li><li class="tab"><button type="button" data-href="#前端引入ispeak-3">使用Discuss</button></li><li class="tab"><button type="button" data-href="#前端引入ispeak-4">使用Artalk</button></li></ul><div class="tab-contents"><div class="tab-item-content" id="前端引入ispeak-1"><ol><li>在博客目录下运行<code>hexo new page speaks</code></li><li>编辑[blogroot]\source\speaks\<a target="_blank" rel="noopener" href="http://index.md">index.md</a>,将里面的内容替换成:</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: 说说</span><br><span class="line">comments: false</span><br><span class="line"><span class="section">aside: false</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line">{% raw %}</span><br><span class="line"></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">style</span>></span></span></span><br><span class="line"> .speak-footer,.wl-power{</span><br><span class="line"><span class="code"> display:none;</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"></style></span></span><br><span class="line"><span class="code"><div id="ispeak"></div></span></span><br><span class="line"><span class="code"><link</span></span><br><span class="line"><span class="code"> rel="stylesheet"</span></span><br><span class="line"><span class="code"> href="https://cdn.staticfile.org/highlight.js/10.6.0/styles/atom-one-dark.min.css"</span></span><br><span class="line"><span class="code">/></span></span><br><span class="line"><span class="code"><link</span></span><br><span class="line"><span class="code"> rel="stylesheet"</span></span><br><span class="line"><span class="code"> href="https://npm.elemecdn.com/ispeak@4.4.0/style.css"</span></span><br><span class="line"><span class="code">/></span></span><br><span class="line"><span class="code"><script src="https://cdn.staticfile.org/highlight.js/10.6.0/highlight.min.js"></script></span></span><br><span class="line"><span class="code"><script src="https://cdn.staticfile.org/marked/2.0.0/marked.min.js"></script></span></span><br><span class="line"><span class="code"><!-- CSS --></span></span><br><span class="line"><span class="code"><link href="https://unpkg.com/@waline/client/dist/waline.css" rel="stylesheet" /></span></span><br><span class="line"><span class="code"><script src="https://unpkg.com/@waline/client@v2/dist/waline.js"></script></span></span><br><span class="line"><span class="code"><script></span></span><br><span class="line"><span class="code"> function load_ispeak() {</span></span><br><span class="line"><span class="code"> setTimeout(function() {</span></span><br><span class="line"><span class="code"> var HEAD = document.getElementsByTagName('head')[0] || document.documentElement;</span></span><br><span class="line"><span class="code"> var src = 'https://cdn1.tianli0.top/npm/ispeak/ispeak.umd.js'</span></span><br><span class="line"><span class="code"> var script = document.createElement('script')</span></span><br><span class="line"><span class="code"> script.setAttribute('type','text/javascript')</span></span><br><span class="line"><span class="code"> script.onload = function() {</span></span><br><span class="line"><span class="code"> pjax_ispeak()</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> script.setAttribute('src', src)</span></span><br><span class="line"><span class="code"> HEAD.appendChild(script)</span></span><br><span class="line"><span class="code"> }, 1);</span></span><br><span class="line"><span class="code"> };</span></span><br><span class="line"><span class="code"> function pjax_ispeak() {</span></span><br><span class="line"><span class="code"> if(!document.querySelectorAll("#ispeak")[0])return;</span></span><br><span class="line"><span class="code"> ispeak</span></span><br><span class="line"><span class="code"> .init({</span></span><br><span class="line"><span class="code"> el: '#ispeak',//不用改</span></span><br><span class="line"><span class="code"> api: '', //填写你kkapi地址(不是kkadmin后台地址!)</span></span><br><span class="line"><span class="code"> author: '',//填写个人ID</span></span><br><span class="line"><span class="code"> pageSize: 10,//每页speak显示的条数(建议保持默认,除非你要魔改css)</span></span><br><span class="line"><span class="code"> loading_img: 'https://bu.dusays.com/2021/03/04/d2d5e983e2961.gif',//加载动画</span></span><br><span class="line"><span class="code"> comment: function (speak) {</span></span><br><span class="line"><span class="code"> const { _id, title, content } = speak</span></span><br><span class="line"><span class="code"> const contentSub = content.substring(0, 30)</span></span><br><span class="line"><span class="code"> Waline.init({</span></span><br><span class="line"><span class="code"> el: '.ispeak-comment',//不用改</span></span><br><span class="line"><span class="code"> serverURL: '',//填写你的Waline服务端地址</span></span><br><span class="line"><span class="code"> path:'/speak/info.html?q=' + _id,//不用改,除非你将上面的speak改为别的文件夹昵称</span></span><br><span class="line"><span class="code"> //后面可按照https://waline.js.org/reference/client/props.html 修改(必须放在path后面!以下为一个例子)</span></span><br><span class="line"><span class="code"> emoji: ["//unpkg.com/@waline/emojis@1.0.1/weibo","https://emoji.shojo.cn/bili/src/小黄脸","//unpkg.com/@waline/emojis@1.0.1/bilibili","https://emoji.shojo.cn/bili/src/枕边童话","https://emoji.shojo.cn/bili/src/咩栗","https://emoji.shojo.cn/bili/src/呜米","https://emoji.shojo.cn/bili/src/进击的冰糖","https://emoji.shojo.cn/bili/src/冰糖IO 蜕变·闪耀","https://emoji.shojo.cn/bili/src/多多poi","https://emoji.shojo.cn/bili/src/穆小泠","https://emoji.shojo.cn/bili/src/早稻叽"],// 表情包大全</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> load_ispeak();</span></span><br><span class="line"><span class="code"> document.addEventListener('pjax:complete', function () {</span></span><br><span class="line"><span class="code"> pjax_ispeak();</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"></script></span></span><br><span class="line"><span class="code"><!--建议标注末尾链接--></span></span><br><span class="line"><span class="code"><p style="width: 100%;text-align: end;font-size: .75em;color: #999;margin-top: 1em;">Powered by <a href="https://www.antmoe.com/speak/"><strong>iSpeak</strong></a> | Comment by <a href="https://discuss.js.org/"><strong>Waline</strong></a></p> </span></span><br><span class="line"><span class="code">{% endraw %}</span></span><br></pre></td></tr></table></figure><ol start="3"><li>在[blogroot]\source\speaks\<a target="_blank" rel="noopener" href="http://xn--info-494f001gunk.md">下新建info.md</a>,内容为下:</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: Speak</span><br><span class="line">aside: false</span><br><span class="line">comments: false</span><br><span class="line"><span class="section">description: 欢迎来到SinzMise的日记,快来看看SinzMise分享了什么! # speak介绍</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line"><!-- CSS --></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"stylesheet"</span> <span class="attr">href</span>=<span class="string">"https://cdn.staticfile.org/highlight.js/10.6.0/styles/atom-one-dark.min.css"</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">link</span> <span class="attr">href</span>=<span class="string">"https://unpkg.com/@waline/client/dist/waline.css"</span> <span class="attr">rel</span>=<span class="string">"stylesheet"</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">'content'</span>></span></span></span><br><span class="line"> <span class="language-xml"><span class="tag"><<span class="name">img</span> <span class="attr">src</span>=<span class="string">'https://bu.dusays.com/2022/05/01/626e88f349943.gif'</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line">{% btn '/speaks/',查看全部,far fa-hand-point-right,block center blue larger %}</span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">hr</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">'ispeak-comment'</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line"><!-- JS --></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://unpkg.com/@waline/client@v2/dist/waline.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://unpkg.com/marked@4.0.18/marked.min.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://cdn.staticfile.org/highlight.js/10.6.0/highlight.min.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span>></span></span></span><br><span class="line"> const searchParams = new URLSearchParams(window.location.search);</span><br><span class="line"> const speakId = searchParams.get('q');</span><br><span class="line"> const path = window.location.pathname;</span><br><span class="line"> const apiURL = 'https://(你的api地址)/api/ispeak';</span><br><span class="line"> const markedRender = (body, loading<span class="emphasis">_img='https://bu.dusays.com/2022/05/01/626e88f349943.gif') => {</span></span><br><span class="line"><span class="emphasis"> const renderer = {</span></span><br><span class="line"><span class="emphasis"> image(href, title, text) {</span></span><br><span class="line"><span class="emphasis"> return `<span class="language-xml"><span class="language-javascript"><a href=<span class="string">"${href}"</span> target=<span class="string">"_blank"</span> data-fancybox=<span class="string">"group"</span> <span class="keyword">class</span>=<span class="string">"fancybox"</span>></span></span></span></span><br><span class="line"><span class="emphasis"> <span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag"><<span class="name">img</span> <span class="attr">speak-src</span>=<span class="string">"${href}"</span> <span class="attr">src</span>=<span class="string">${loading_img}</span> <span class="attr">alt</span>=<span class="string">'${text}'</span>></span></span></span></span></span></span><br><span class="line"><span class="emphasis"> <span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag"></<span class="name">a</span>></span></span></span></span>`</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> marked.setOptions({</span></span><br><span class="line"><span class="emphasis"> renderer: new marked.Renderer(),</span></span><br><span class="line"><span class="emphasis"> highlight: function (code) {</span></span><br><span class="line"><span class="emphasis"> if (hljs) {</span></span><br><span class="line"><span class="emphasis"> return hljs.highlightAuto(code).value</span></span><br><span class="line"><span class="emphasis"> } else {</span></span><br><span class="line"><span class="emphasis"> return code</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> },</span></span><br><span class="line"><span class="emphasis"> pedantic: false,</span></span><br><span class="line"><span class="emphasis"> gfm: true,</span></span><br><span class="line"><span class="emphasis"> tables: true,</span></span><br><span class="line"><span class="emphasis"> breaks: true,</span></span><br><span class="line"><span class="emphasis"> sanitize: false,</span></span><br><span class="line"><span class="emphasis"> smartLists: true,</span></span><br><span class="line"><span class="emphasis"> smartypants: false,</span></span><br><span class="line"><span class="emphasis"> xhtml: false</span></span><br><span class="line"><span class="emphasis"> })</span></span><br><span class="line"><span class="emphasis"> marked.use({ renderer })</span></span><br><span class="line"><span class="emphasis"> return marked.parse(body)</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> fetch(`${apiURL}/get/${speakId}`)</span></span><br><span class="line"><span class="emphasis"> .then(response => response.json())</span></span><br><span class="line"><span class="emphasis"> .then(res => {</span></span><br><span class="line"><span class="emphasis"> const data = res.data;</span></span><br><span class="line"><span class="emphasis"> if(data){</span></span><br><span class="line"><span class="emphasis"> const {title,content} = data;</span></span><br><span class="line"><span class="emphasis"> const contentSub = content.substring(0, 30);</span></span><br><span class="line"><span class="emphasis"> document.querySelector('.content').innerHTML = markedRender(content);</span></span><br><span class="line"><span class="emphasis"> if(title){</span></span><br><span class="line"><span class="emphasis"> document.title = title;</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> Waline.init({</span></span><br><span class="line"><span class="emphasis"> el: '.ispeak-comment',//不用改</span></span><br><span class="line"><span class="emphasis"> serverURL: '',//填写你的Waline服务端地址</span></span><br><span class="line"><span class="emphasis"> path: path + '?q=' + _</span>id,//不用改</span><br><span class="line"><span class="code"> //后面可按照https://waline.js.org/reference/client/props.html 修改(必须放在path后面!以下为一个例子)</span></span><br><span class="line"><span class="code"> emoji: ["//unpkg.com/@waline/emojis@1.0.1/weibo","https://emoji.shojo.cn/bili/src/小黄脸","//unpkg.com/@waline/emojis@1.0.1/bilibili","https://emoji.shojo.cn/bili/src/枕边童话","https://emoji.shojo.cn/bili/src/咩栗","https://emoji.shojo.cn/bili/src/呜米","https://emoji.shojo.cn/bili/src/进击的冰糖","https://emoji.shojo.cn/bili/src/冰糖IO 蜕变·闪耀","https://emoji.shojo.cn/bili/src/多多poi","https://emoji.shojo.cn/bili/src/穆小泠","https://emoji.shojo.cn/bili/src/早稻叽"],// 表情包大全</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"></script></span></span><br></pre></td></tr></table></figure><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div><div class="tab-item-content active" id="前端引入ispeak-2"><ol><li>在博客目录下运行<code>hexo new page speaks</code></li><li>编辑[blogroot]\source\speaks\<a target="_blank" rel="noopener" href="http://index.md">index.md</a>,将里面的内容替换成:</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: 说说</span><br><span class="line">comments: false</span><br><span class="line"><span class="section">aside: false</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line">{% raw %}</span><br><span class="line"></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">style</span>></span></span></span><br><span class="line"> .speak-footer,.tk-footer{</span><br><span class="line"><span class="code"> display:none;</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"></style></span></span><br><span class="line"><span class="code"><div id="ispeak"></div></span></span><br><span class="line"><span class="code"><link</span></span><br><span class="line"><span class="code"> rel="stylesheet"</span></span><br><span class="line"><span class="code"> href="https://cdn.staticfile.org/highlight.js/10.6.0/styles/atom-one-dark.min.css"</span></span><br><span class="line"><span class="code">/></span></span><br><span class="line"><span class="code"><link</span></span><br><span class="line"><span class="code"> rel="stylesheet"</span></span><br><span class="line"><span class="code"> href="https://npm.elemecdn.com/ispeak@4.4.0/style.css"</span></span><br><span class="line"><span class="code">/></span></span><br><span class="line"><span class="code"><script src="https://cdn.staticfile.org/highlight.js/10.6.0/highlight.min.js"></script></span></span><br><span class="line"><span class="code"><script src="https://cdn.staticfile.org/marked/2.0.0/marked.min.js"></script></span></span><br><span class="line"><span class="code"><script src="https://npm.elemecdn.com/ispeak@4.4.0/ispeak.umd.js"></script></span></span><br><span class="line"><span class="code"><script src="https://npm.elemecdn.com/twikoo"></script></span></span><br><span class="line"><span class="code"><script></span></span><br><span class="line"><span class="code"> function load_ispeak() {</span></span><br><span class="line"><span class="code"> setTimeout(function() {</span></span><br><span class="line"><span class="code"> var HEAD = document.getElementsByTagName('head')[0] || document.documentElement;</span></span><br><span class="line"><span class="code"> var src = 'https://cdn1.tianli0.top/npm/ispeak/ispeak.umd.js'</span></span><br><span class="line"><span class="code"> var script = document.createElement('script')</span></span><br><span class="line"><span class="code"> script.setAttribute('type','text/javascript')</span></span><br><span class="line"><span class="code"> script.onload = function() {</span></span><br><span class="line"><span class="code"> pjax_ispeak()</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> script.setAttribute('src', src)</span></span><br><span class="line"><span class="code"> HEAD.appendChild(script)</span></span><br><span class="line"><span class="code"> }, 1);</span></span><br><span class="line"><span class="code"> };</span></span><br><span class="line"><span class="code"> function pjax_ispeak() {</span></span><br><span class="line"><span class="code"> if(!document.querySelectorAll("#ispeak")[0])return;</span></span><br><span class="line"><span class="code"> ispeak</span></span><br><span class="line"><span class="code"> .init({</span></span><br><span class="line"><span class="code"> el: '#ispeak',//不用改</span></span><br><span class="line"><span class="code"> api: '', //填写你kkapi地址(不是kkadmin后台地址!)</span></span><br><span class="line"><span class="code"> author: '',//填写个人ID</span></span><br><span class="line"><span class="code"> pageSize: 10,//每页speak显示的条数(建议保持默认,除非你要魔改css)</span></span><br><span class="line"><span class="code"> loading_img: 'https://bu.dusays.com/2021/03/04/d2d5e983e2961.gif',//加载动画</span></span><br><span class="line"><span class="code"> comment: function (speak) {</span></span><br><span class="line"><span class="code"> const { _id, title, content } = speak</span></span><br><span class="line"><span class="code"> const contentSub = content.substring(0, 30)</span></span><br><span class="line"><span class="code"> twikoo.init({</span></span><br><span class="line"><span class="code"> envId: '', // 腾讯云环境填 envId;Vercel 环境填地址(https://xxx.vercel.app)</span></span><br><span class="line"><span class="code"> el: '.ispeak-comment', // 不用改</span></span><br><span class="line"><span class="code"> //region: 'ap-guangzhou', // 环境地域,默认为 ap-shanghai,腾讯云环境填 ap-shanghai 或 ap-guangzhou;Vercel 环境不填</span></span><br><span class="line"><span class="code"> path: '/speak/info.html?q=' + _id, //不用改,除非你将上面的speak改为别的文件夹昵称</span></span><br><span class="line"><span class="code"> lang: 'zh-CN', // 用于手动设定评论区语言,支持的语言列表 https://github.com/imaegoo/twikoo/blob/main/src/client/utils/i18n/index.js</span></span><br><span class="line"><span class="code"> })</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> load_ispeak();</span></span><br><span class="line"><span class="code"> document.addEventListener('pjax:complete', function () {</span></span><br><span class="line"><span class="code"> pjax_ispeak();</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"></script></span></span><br><span class="line"><span class="code"><!--建议标注末尾链接--></span></span><br><span class="line"><span class="code"><p style="width: 100%;text-align: end;font-size: .75em;color: #999;margin-top: 1em;">Powered by <a href="https://www.antmoe.com/speak/"><strong>iSpeak</strong></a> | Comment by <a href="https://twikoo.js.org/"><strong>Twikoo</strong></a></p> </span></span><br><span class="line"><span class="code">{% endraw %}</span></span><br></pre></td></tr></table></figure><ol start="3"><li>在[blogroot]\source\speaks\<a target="_blank" rel="noopener" href="http://xn--info-494f001gunk.md">下新建info.md</a>,内容为下:</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: Speak</span><br><span class="line">aside: false</span><br><span class="line">comments: false</span><br><span class="line"><span class="section">description: 欢迎来到SinzMise的日记,快来看看SinzMise分享了什么! # speak介绍</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line"><!-- CSS --></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"stylesheet"</span> <span class="attr">href</span>=<span class="string">"https://cdn.staticfile.org/highlight.js/10.6.0/styles/atom-one-dark.min.css"</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">'content'</span>></span></span></span><br><span class="line"> <span class="language-xml"><span class="tag"><<span class="name">img</span> <span class="attr">src</span>=<span class="string">'https://bu.dusays.com/2022/05/01/626e88f349943.gif'</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line">{% btn '/speaks/',查看全部,far fa-hand-point-right,block center blue larger %}</span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">hr</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">'ispeak-comment'</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line"><!-- JS --></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://npm.elemecdn.com/twikoo"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://unpkg.com/marked@4.0.18/marked.min.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://cdn.staticfile.org/highlight.js/10.6.0/highlight.min.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span>></span></span></span><br><span class="line"> const searchParams = new URLSearchParams(window.location.search);</span><br><span class="line"> const speakId = searchParams.get('q');</span><br><span class="line"> const path = window.location.pathname;</span><br><span class="line"> const apiURL = 'https://(你的api地址)/api/ispeak';</span><br><span class="line"> const markedRender = (body, loading<span class="emphasis">_img='https://bu.dusays.com/2022/05/01/626e88f349943.gif') => {</span></span><br><span class="line"><span class="emphasis"> const renderer = {</span></span><br><span class="line"><span class="emphasis"> image(href, title, text) {</span></span><br><span class="line"><span class="emphasis"> return `<span class="language-xml"><span class="language-javascript"><a href=<span class="string">"${href}"</span> target=<span class="string">"_blank"</span> data-fancybox=<span class="string">"group"</span> <span class="keyword">class</span>=<span class="string">"fancybox"</span>></span></span></span></span><br><span class="line"><span class="emphasis"> <span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag"><<span class="name">img</span> <span class="attr">speak-src</span>=<span class="string">"${href}"</span> <span class="attr">src</span>=<span class="string">${loading_img}</span> <span class="attr">alt</span>=<span class="string">'${text}'</span>></span></span></span></span></span></span><br><span class="line"><span class="emphasis"> <span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag"></<span class="name">a</span>></span></span></span></span>`</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> marked.setOptions({</span></span><br><span class="line"><span class="emphasis"> renderer: new marked.Renderer(),</span></span><br><span class="line"><span class="emphasis"> highlight: function (code) {</span></span><br><span class="line"><span class="emphasis"> if (hljs) {</span></span><br><span class="line"><span class="emphasis"> return hljs.highlightAuto(code).value</span></span><br><span class="line"><span class="emphasis"> } else {</span></span><br><span class="line"><span class="emphasis"> return code</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> },</span></span><br><span class="line"><span class="emphasis"> pedantic: false,</span></span><br><span class="line"><span class="emphasis"> gfm: true,</span></span><br><span class="line"><span class="emphasis"> tables: true,</span></span><br><span class="line"><span class="emphasis"> breaks: true,</span></span><br><span class="line"><span class="emphasis"> sanitize: false,</span></span><br><span class="line"><span class="emphasis"> smartLists: true,</span></span><br><span class="line"><span class="emphasis"> smartypants: false,</span></span><br><span class="line"><span class="emphasis"> xhtml: false</span></span><br><span class="line"><span class="emphasis"> })</span></span><br><span class="line"><span class="emphasis"> marked.use({ renderer })</span></span><br><span class="line"><span class="emphasis"> return marked.parse(body)</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> fetch(`${apiURL}/get/${speakId}`)</span></span><br><span class="line"><span class="emphasis"> .then(response => response.json())</span></span><br><span class="line"><span class="emphasis"> .then(res => {</span></span><br><span class="line"><span class="emphasis"> const data = res.data;</span></span><br><span class="line"><span class="emphasis"> if(data){</span></span><br><span class="line"><span class="emphasis"> const {title,content} = data;</span></span><br><span class="line"><span class="emphasis"> const contentSub = content.substring(0, 30);</span></span><br><span class="line"><span class="emphasis"> document.querySelector('.content').innerHTML = markedRender(content);</span></span><br><span class="line"><span class="emphasis"> if(title){</span></span><br><span class="line"><span class="emphasis"> document.title = title;</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> twikoo.init({</span></span><br><span class="line"><span class="emphasis"> envId: '', // 腾讯云环境填 envId;Vercel 环境填地址(https://xxx.vercel.app)</span></span><br><span class="line"><span class="emphasis"> el: '.ispeak-comment', // 不用改</span></span><br><span class="line"><span class="emphasis"> //region: 'ap-guangzhou', // 环境地域,默认为 ap-shanghai,腾讯云环境填 ap-shanghai 或 ap-guangzhou;Vercel 环境不填</span></span><br><span class="line"><span class="emphasis"> path: path + '?q=' + speakId, // 不用改</span></span><br><span class="line"><span class="emphasis"> lang: 'zh-CN', // 用于手动设定评论区语言,支持的语言列表 https://github.com/imaegoo/twikoo/blob/main/src/client/utils/i18n/index.js</span></span><br><span class="line"><span class="emphasis"> })</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> });</span></span><br><span class="line"><span class="emphasis"><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span></span><br></pre></td></tr></table></figure><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div><div class="tab-item-content" id="前端引入ispeak-3"><ol><li>在博客目录下运行<code>hexo new page speaks</code></li><li>编辑[blogroot]\source\speaks\<a target="_blank" rel="noopener" href="http://index.md">index.md</a>,将里面的内容替换成:</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: 说说</span><br><span class="line">comments: false</span><br><span class="line"><span class="section">aside: false</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line">{% raw %}</span><br><span class="line"></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">style</span>></span></span></span><br><span class="line"> .speak-footer,.D-footer{</span><br><span class="line"><span class="code"> display:none;</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"></style></span></span><br><span class="line"><span class="code"><div id="ispeak"></div></span></span><br><span class="line"><span class="code"><link</span></span><br><span class="line"><span class="code"> rel="stylesheet"</span></span><br><span class="line"><span class="code"> href="https://cdn.staticfile.org/highlight.js/10.6.0/styles/atom-one-dark.min.css"</span></span><br><span class="line"><span class="code">/></span></span><br><span class="line"><span class="code"><link</span></span><br><span class="line"><span class="code"> rel="stylesheet"</span></span><br><span class="line"><span class="code"> href="https://npm.elemecdn.com/ispeak@4.4.0/style.css"</span></span><br><span class="line"><span class="code">/></span></span><br><span class="line"><span class="code"><script src="https://cdn.staticfile.org/highlight.js/10.6.0/highlight.min.js"></script></span></span><br><span class="line"><span class="code"><script src="https://cdn.staticfile.org/marked/2.0.0/marked.min.js"></script></span></span><br><span class="line"><span class="code"><script src="https://npm.elemecdn.com/ispeak@4.4.0/ispeak.umd.js"></script></span></span><br><span class="line"><span class="code"><script src="https://npm.elemecdn.com/discuss@latest/dist/discuss.js"></script></span></span><br><span class="line"><span class="code"><script></span></span><br><span class="line"><span class="code"> function load_ispeak() {</span></span><br><span class="line"><span class="code"> setTimeout(function() {</span></span><br><span class="line"><span class="code"> var HEAD = document.getElementsByTagName('head')[0] || document.documentElement;</span></span><br><span class="line"><span class="code"> var src = 'https://cdn1.tianli0.top/npm/ispeak/ispeak.umd.js'</span></span><br><span class="line"><span class="code"> var script = document.createElement('script')</span></span><br><span class="line"><span class="code"> script.setAttribute('type','text/javascript')</span></span><br><span class="line"><span class="code"> script.onload = function() {</span></span><br><span class="line"><span class="code"> pjax_ispeak()</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> script.setAttribute('src', src)</span></span><br><span class="line"><span class="code"> HEAD.appendChild(script)</span></span><br><span class="line"><span class="code"> }, 1);</span></span><br><span class="line"><span class="code"> };</span></span><br><span class="line"><span class="code"> function pjax_ispeak() {</span></span><br><span class="line"><span class="code"> if(!document.querySelectorAll("#ispeak")[0])return;</span></span><br><span class="line"><span class="code"> ispeak</span></span><br><span class="line"><span class="code"> .init({</span></span><br><span class="line"><span class="code"> el: '#ispeak',//不用改</span></span><br><span class="line"><span class="code"> api: '', //填写你kkapi地址(不是kkadmin后台地址!)</span></span><br><span class="line"><span class="code"> author: '',//填写个人ID</span></span><br><span class="line"><span class="code"> pageSize: 10,//每页speak显示的条数(建议保持默认,除非你要魔改css)</span></span><br><span class="line"><span class="code"> loading_img: 'https://bu.dusays.com/2021/03/04/d2d5e983e2961.gif',//加载动画</span></span><br><span class="line"><span class="code"> comment: function (speak) {</span></span><br><span class="line"><span class="code"> const { _id, title, content } = speak</span></span><br><span class="line"><span class="code"> const contentSub = content.substring(0, 30)</span></span><br><span class="line"><span class="code"> discuss.init({</span></span><br><span class="line"><span class="code"> el: '.ispeak-comment',// 不用改</span></span><br><span class="line"><span class="code"> serverURLs: '',//填写你的Discuss服务端地址</span></span><br><span class="line"><span class="code"> path: '/speak/info.html?q=' + _id,//不用改,除非你将上面的speak改为别的文件夹昵称</span></span><br><span class="line"><span class="code"> //后面可按照https://discuss.js.org/Quick-Start.html#%E5%AE%A2%E6%88%B7%E7%AB%AF-client 修改(必须放在path后面!以下为一个例子)</span></span><br><span class="line"><span class="code"> ph: '千山万水总是情,给个评论行不行' ,//评论框占位符</span></span><br><span class="line"><span class="code"> imgLoading: 'https://bu.dusays.com/2021/03/04/d2d5e983e2961.gif'//评论图片加载动画</span></span><br><span class="line"><span class="code"> })</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> load_ispeak();</span></span><br><span class="line"><span class="code"> document.addEventListener('pjax:complete', function () {</span></span><br><span class="line"><span class="code"> pjax_ispeak();</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"></script></span></span><br><span class="line"><span class="code"><!--建议标注末尾链接--></span></span><br><span class="line"><span class="code"><p style="width: 100%;text-align: end;font-size: .75em;color: #999;margin-top: 1em;">Powered by <a href="https://www.antmoe.com/speak/"><strong>iSpeak</strong></a> | Comment by <a href="https://discuss.js.org/"><strong>Discuss</strong></a></p> </span></span><br><span class="line"><span class="code">{% endraw %}</span></span><br></pre></td></tr></table></figure><ol start="3"><li>在[blogroot]\source\speaks\<a target="_blank" rel="noopener" href="http://xn--info-494f001gunk.md">下新建info.md</a>,内容为下:</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: Speak</span><br><span class="line">aside: false</span><br><span class="line">comments: false</span><br><span class="line"><span class="section">description: 欢迎来到SinzMise的日记,快来看看SinzMise分享了什么! # speak介绍</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line"><!-- CSS --></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"stylesheet"</span> <span class="attr">href</span>=<span class="string">"https://cdn.staticfile.org/highlight.js/10.6.0/styles/atom-one-dark.min.css"</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">'content'</span>></span></span></span><br><span class="line"> <span class="language-xml"><span class="tag"><<span class="name">img</span> <span class="attr">src</span>=<span class="string">'https://bu.dusays.com/2022/05/01/626e88f349943.gif'</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line">{% btn '/speaks/',查看全部,far fa-hand-point-right,block center blue larger %}</span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">hr</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">'ispeak-comment'</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line"><!-- JS --></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://npm.elemecdn.com/discuss@latest/dist/discuss.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://unpkg.com/marked@4.0.18/marked.min.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://cdn.staticfile.org/highlight.js/10.6.0/highlight.min.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span>></span></span></span><br><span class="line"> const searchParams = new URLSearchParams(window.location.search);</span><br><span class="line"> const speakId = searchParams.get('q');</span><br><span class="line"> const path = window.location.pathname;</span><br><span class="line"> const apiURL = 'https://(你的api地址)/api/ispeak'; //api地址</span><br><span class="line"> const markedRender = (body, loading<span class="emphasis">_img='https://bu.dusays.com/2022/05/01/626e88f349943.gif') => {</span></span><br><span class="line"><span class="emphasis"> const renderer = {</span></span><br><span class="line"><span class="emphasis"> image(href, title, text) {</span></span><br><span class="line"><span class="emphasis"> return `<span class="language-xml"><span class="language-javascript"><a href=<span class="string">"${href}"</span> target=<span class="string">"_blank"</span> data-fancybox=<span class="string">"group"</span> <span class="keyword">class</span>=<span class="string">"fancybox"</span>></span></span></span></span><br><span class="line"><span class="emphasis"> <span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag"><<span class="name">img</span> <span class="attr">speak-src</span>=<span class="string">"${href}"</span> <span class="attr">src</span>=<span class="string">${loading_img}</span> <span class="attr">alt</span>=<span class="string">'${text}'</span>></span></span></span></span></span></span><br><span class="line"><span class="emphasis"> <span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag"></<span class="name">a</span>></span></span></span></span>`</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> marked.setOptions({</span></span><br><span class="line"><span class="emphasis"> renderer: new marked.Renderer(),</span></span><br><span class="line"><span class="emphasis"> highlight: function (code) {</span></span><br><span class="line"><span class="emphasis"> if (hljs) {</span></span><br><span class="line"><span class="emphasis"> return hljs.highlightAuto(code).value</span></span><br><span class="line"><span class="emphasis"> } else {</span></span><br><span class="line"><span class="emphasis"> return code</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> },</span></span><br><span class="line"><span class="emphasis"> pedantic: false,</span></span><br><span class="line"><span class="emphasis"> gfm: true,</span></span><br><span class="line"><span class="emphasis"> tables: true,</span></span><br><span class="line"><span class="emphasis"> breaks: true,</span></span><br><span class="line"><span class="emphasis"> sanitize: false,</span></span><br><span class="line"><span class="emphasis"> smartLists: true,</span></span><br><span class="line"><span class="emphasis"> smartypants: false,</span></span><br><span class="line"><span class="emphasis"> xhtml: false</span></span><br><span class="line"><span class="emphasis"> })</span></span><br><span class="line"><span class="emphasis"> marked.use({ renderer })</span></span><br><span class="line"><span class="emphasis"> return marked.parse(body)</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> fetch(`${apiURL}/get/${speakId}`)</span></span><br><span class="line"><span class="emphasis"> .then(response => response.json())</span></span><br><span class="line"><span class="emphasis"> .then(res => {</span></span><br><span class="line"><span class="emphasis"> const data = res.data;</span></span><br><span class="line"><span class="emphasis"> if(data){</span></span><br><span class="line"><span class="emphasis"> const {title,content} = data;</span></span><br><span class="line"><span class="emphasis"> const contentSub = content.substring(0, 30);</span></span><br><span class="line"><span class="emphasis"> document.querySelector('.content').innerHTML = markedRender(content);</span></span><br><span class="line"><span class="emphasis"> if(title){</span></span><br><span class="line"><span class="emphasis"> document.title = title;</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> discuss.init({</span></span><br><span class="line"><span class="emphasis"> el: '.ispeak-comment',// 不用改</span></span><br><span class="line"><span class="emphasis"> serverURLs: '',//填写你的Discuss服务端地址</span></span><br><span class="line"><span class="emphasis"> path: path + '?q=' + speakId,// 不用改</span></span><br><span class="line"><span class="emphasis"> //后面可按照https://discuss.js.org/Quick-Start.html#%E5%AE%A2%E6%88%B7%E7%AB%AF-client 修改(必须放在path后面!以下为一个例子)</span></span><br><span class="line"><span class="emphasis"> ph: '千山万水总是情,给个评论行不行' ,//评论框占位符</span></span><br><span class="line"><span class="emphasis"> imgLoading: 'https://bu.dusays.com/2021/03/04/d2d5e983e2961.gif'//评论图片加载动画</span></span><br><span class="line"><span class="emphasis"> })</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> });</span></span><br><span class="line"><span class="emphasis"><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span></span><br></pre></td></tr></table></figure><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div><div class="tab-item-content" id="前端引入ispeak-4"><ol><li>在博客目录下运行<code>hexo new page speaks</code></li><li>编辑[blogroot]\source\speaks\<a target="_blank" rel="noopener" href="http://index.md">index.md</a>,将里面的内容替换成:</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: 说说</span><br><span class="line">comments: false</span><br><span class="line"><span class="section">aside: false</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line">{% raw %}</span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">style</span>></span></span></span><br><span class="line"> .speak-footer,.atk-list-footer{</span><br><span class="line"><span class="code"> display:none;</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"></style></span></span><br><span class="line"><span class="code"><div id="ispeak"></div></span></span><br><span class="line"><span class="code"><link</span></span><br><span class="line"><span class="code"> rel="stylesheet"</span></span><br><span class="line"><span class="code"> href="https://cdn.staticfile.org/highlight.js/10.6.0/styles/atom-one-dark.min.css"</span></span><br><span class="line"><span class="code">/></span></span><br><span class="line"><span class="code"><link</span></span><br><span class="line"><span class="code"> rel="stylesheet"</span></span><br><span class="line"><span class="code"> href="https://npm.elemecdn.com/ispeak@4.4.0/style.css"</span></span><br><span class="line"><span class="code">/></span></span><br><span class="line"><span class="code"><script src="https://cdn.staticfile.org/highlight.js/10.6.0/highlight.min.js"></script></span></span><br><span class="line"><span class="code"><script src="https://cdn.staticfile.org/marked/2.0.0/marked.min.js"></script></span></span><br><span class="line"><span class="code"><script src="https://npm.elemecdn.com/ispeak@4.4.0/ispeak.umd.js"></script></span></span><br><span class="line"><span class="code"><!-- CSS --></span></span><br><span class="line"><span class="code"><link href="https://unpkg.com/artalk@2.3.4/dist/Artalk.css" rel="stylesheet" /></span></span><br><span class="line"><span class="code"><!-- JS --></span></span><br><span class="line"><span class="code"><script src="https://unpkg.com/artalk@2.3.4/dist/Artalk.js"></script></span></span><br><span class="line"><span class="code"><script></span></span><br><span class="line"><span class="code"> function load_ispeak() {</span></span><br><span class="line"><span class="code"> setTimeout(function() {</span></span><br><span class="line"><span class="code"> var HEAD = document.getElementsByTagName('head')[0] || document.documentElement;</span></span><br><span class="line"><span class="code"> var src = 'https://cdn1.tianli0.top/npm/ispeak/ispeak.umd.js'</span></span><br><span class="line"><span class="code"> var script = document.createElement('script')</span></span><br><span class="line"><span class="code"> script.setAttribute('type','text/javascript')</span></span><br><span class="line"><span class="code"> script.onload = function() {</span></span><br><span class="line"><span class="code"> pjax_ispeak()</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> script.setAttribute('src', src)</span></span><br><span class="line"><span class="code"> HEAD.appendChild(script)</span></span><br><span class="line"><span class="code"> }, 1);</span></span><br><span class="line"><span class="code"> };</span></span><br><span class="line"><span class="code"> function pjax_ispeak() {</span></span><br><span class="line"><span class="code"> if(!document.querySelectorAll("#ispeak")[0])return;</span></span><br><span class="line"><span class="code"> ispeak</span></span><br><span class="line"><span class="code"> .init({</span></span><br><span class="line"><span class="code"> el: '#ispeak',//不用改</span></span><br><span class="line"><span class="code"> api: '', //填写你kkapi地址(不是kkadmin后台地址!)</span></span><br><span class="line"><span class="code"> author: '',//填写个人ID</span></span><br><span class="line"><span class="code"> pageSize: 10,//每页speak显示的条数(建议保持默认,除非你要魔改css)</span></span><br><span class="line"><span class="code"> loading_img: 'https://bu.dusays.com/2021/03/04/d2d5e983e2961.gif',//加载动画</span></span><br><span class="line"><span class="code"> comment: function (speak) {</span></span><br><span class="line"><span class="code"> const { _id, title, content } = speak</span></span><br><span class="line"><span class="code"> const contentSub = content.substring(0, 30)</span></span><br><span class="line"><span class="code"> new Artalk({</span></span><br><span class="line"><span class="code"> el: '.ispeak-comment', // 不用改</span></span><br><span class="line"><span class="code"> pageKey: '/speak/info.html?q=' + _id, //不用改,除非你将上面的speak改为别的文件夹昵称</span></span><br><span class="line"><span class="code"> pageTitle: title || contentSub, // 不用改</span></span><br><span class="line"><span class="code"> server: '', //填写你的Artalk服务端地址</span></span><br><span class="line"><span class="code"> site: '' // 填写你的站点名</span></span><br><span class="line"><span class="code"> })</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> load_ispeak();</span></span><br><span class="line"><span class="code"> document.addEventListener('pjax:complete', function () {</span></span><br><span class="line"><span class="code"> pjax_ispeak();</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"></script></span></span><br><span class="line"><span class="code"><!--建议标注末尾链接--></span></span><br><span class="line"><span class="code"><p style="width: 100%;text-align: end;font-size: .75em;color: #999;margin-top: 1em;">Powered by <a href="https://www.antmoe.com/speak/"><strong>iSpeak</strong></a> | Comment by <a href="https://artalk.js.org/"><strong>Artalk</strong></a></p> </span></span><br><span class="line"><span class="code">{% endraw %}</span></span><br></pre></td></tr></table></figure><ol start="3"><li>在[blogroot]\source\speaks\<a target="_blank" rel="noopener" href="http://xn--info-494f001gunk.md">下新建info.md</a>,内容为下:</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: Speak</span><br><span class="line">aside: false</span><br><span class="line">comments: false</span><br><span class="line"><span class="section">description: 欢迎来到SinzMise的日记,快来看看SinzMise分享了什么! # speak介绍</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line"><!-- CSS --></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">link</span> <span class="attr">href</span>=<span class="string">"https://unpkg.com/artalk@2.3.4/dist/Artalk.css"</span> <span class="attr">rel</span>=<span class="string">"stylesheet"</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"stylesheet"</span> <span class="attr">href</span>=<span class="string">"https://cdn.staticfile.org/highlight.js/10.6.0/styles/atom-one-dark.min.css"</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">'content'</span>></span></span></span><br><span class="line"> <span class="language-xml"><span class="tag"><<span class="name">img</span> <span class="attr">src</span>=<span class="string">'https://bu.dusays.com/2022/05/01/626e88f349943.gif'</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line">{% btn '/speaks/',查看全部,far fa-hand-point-right,block center blue larger %}</span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">hr</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">'ispeak-comment'</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line"><!-- JS --></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://unpkg.com/artalk@2.3.4/dist/Artalk.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://unpkg.com/marked@4.0.18/marked.min.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://cdn.staticfile.org/highlight.js/10.6.0/highlight.min.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span>></span></span></span><br><span class="line"> const searchParams = new URLSearchParams(window.location.search);</span><br><span class="line"> const speakId = searchParams.get('q');</span><br><span class="line"> const path = window.location.pathname;</span><br><span class="line"> const apiURL = 'https://(你的api地址)/api/ispeak';</span><br><span class="line"> const markedRender = (body, loading<span class="emphasis">_img='https://bu.dusays.com/2022/05/01/626e88f349943.gif') => {</span></span><br><span class="line"><span class="emphasis"> const renderer = {</span></span><br><span class="line"><span class="emphasis"> image(href, title, text) {</span></span><br><span class="line"><span class="emphasis"> return `<span class="language-xml"><span class="language-javascript"><a href=<span class="string">"${href}"</span> target=<span class="string">"_blank"</span> data-fancybox=<span class="string">"group"</span> <span class="keyword">class</span>=<span class="string">"fancybox"</span>></span></span></span></span><br><span class="line"><span class="emphasis"> <span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag"><<span class="name">img</span> <span class="attr">speak-src</span>=<span class="string">"${href}"</span> <span class="attr">src</span>=<span class="string">${loading_img}</span> <span class="attr">alt</span>=<span class="string">'${text}'</span>></span></span></span></span></span></span><br><span class="line"><span class="emphasis"> <span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag"></<span class="name">a</span>></span></span></span></span>`</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> marked.setOptions({</span></span><br><span class="line"><span class="emphasis"> renderer: new marked.Renderer(),</span></span><br><span class="line"><span class="emphasis"> highlight: function (code) {</span></span><br><span class="line"><span class="emphasis"> if (hljs) {</span></span><br><span class="line"><span class="emphasis"> return hljs.highlightAuto(code).value</span></span><br><span class="line"><span class="emphasis"> } else {</span></span><br><span class="line"><span class="emphasis"> return code</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> },</span></span><br><span class="line"><span class="emphasis"> pedantic: false,</span></span><br><span class="line"><span class="emphasis"> gfm: true,</span></span><br><span class="line"><span class="emphasis"> tables: true,</span></span><br><span class="line"><span class="emphasis"> breaks: true,</span></span><br><span class="line"><span class="emphasis"> sanitize: false,</span></span><br><span class="line"><span class="emphasis"> smartLists: true,</span></span><br><span class="line"><span class="emphasis"> smartypants: false,</span></span><br><span class="line"><span class="emphasis"> xhtml: false</span></span><br><span class="line"><span class="emphasis"> })</span></span><br><span class="line"><span class="emphasis"> marked.use({ renderer })</span></span><br><span class="line"><span class="emphasis"> return marked.parse(body)</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> fetch(`${apiURL}/get/${speakId}`)</span></span><br><span class="line"><span class="emphasis"> .then(response => response.json())</span></span><br><span class="line"><span class="emphasis"> .then(res => {</span></span><br><span class="line"><span class="emphasis"> const data = res.data;</span></span><br><span class="line"><span class="emphasis"> if(data){</span></span><br><span class="line"><span class="emphasis"> const {title,content} = data;</span></span><br><span class="line"><span class="emphasis"> const contentSub = content.substring(0, 30);</span></span><br><span class="line"><span class="emphasis"> document.querySelector('.content').innerHTML = markedRender(content);</span></span><br><span class="line"><span class="emphasis"> if(title){</span></span><br><span class="line"><span class="emphasis"> document.title = title;</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> new Artalk({</span></span><br><span class="line"><span class="emphasis"> el: '.ispeak-comment', // 不用改</span></span><br><span class="line"><span class="emphasis"> pageKey: path + '?q=' + speakId, // 不用改</span></span><br><span class="line"><span class="emphasis"> pageTitle: title || contentSub, // 不用改</span></span><br><span class="line"><span class="emphasis"> server: '', //填写你的Artalk服务端地址</span></span><br><span class="line"><span class="emphasis"> site: '' // 填写你的站点名</span></span><br><span class="line"><span class="emphasis"> })</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> });</span></span><br><span class="line"><span class="emphasis"><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span></span><br></pre></td></tr></table></figure><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div></div></article><div class="post-copyright"><div class="post-copyright__title"><span class="post-copyright-info"><h>小康大佬的说说方案 ———— ispeak搭建教程</h></span></div><div class="post-copyright__type"><span class="post-copyright-info"><a href="https://blog.sinzmise.top/posts/38964/">https://blog.sinzmise.top/posts/38964/</a></span></div><div class="post-copyright-m"><div class="post-copyright-m-info"><div class="post-copyright-a"><h>文章作者</h><div class="post-copyright-cc-info"><h>王九弦SZ·Ninty</h></div></div><div class="post-copyright-c"><h>发表于</h><div class="post-copyright-cc-info"><h>2023-01-13</h></div></div><div class="post-copyright-u"><h>更新于</h><div class="post-copyright-cc-info"><h>2025-01-01</h></div></div><div class="post-copyright-c"><h>许可协议</h><div class="post-copyright-cc-info"><a class="icon" rel="noopener" target="_blank" title="Creative Commons" href="https://creativecommons.org/"><i class="fab fa-creative-commons"></i></a><a rel="noopener" target="_blank" title="CC BY-NC-SA 4.0" href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a></div></div></div></div></div><div class="tag_share"><div class="post-meta__tag-list"><a class="post-meta__tags" href="/tags/%E7%AB%99%E7%82%B9%E6%8A%98%E8%85%BE/"><div class="tags-punctuation"><svg class="faa-tada icon" style="height:1.1em;width:1.1em;fill:currentColor;position:relative;top:2px;margin-right:3px" aria-hidden="true"><use xlink:href="#icon-sekuaibiaoqian"></use></svg></div>站点折腾</a><a class="post-meta__tags" href="/tags/%E9%A1%B5%E9%9D%A2%E9%AD%94%E6%94%B9/"><div class="tags-punctuation"><svg class="faa-tada icon" style="height:1.1em;width:1.1em;fill:currentColor;position:relative;top:2px;margin-right:3px" aria-hidden="true"><use xlink:href="#icon-sekuaibiaoqian"></use></svg></div>页面魔改</a></div><div class="post_share"><div class="social-share" data-image="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_GVRhG42nuu.1g9uz8t24io0.webp" data-sites="facebook,twitter,wechat,weibo,qq"></div><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/butterfly-extsrc/sharejs/dist/css/share.min.css" media="print" onload='this.media="all"'><script src="https://jsd.cdn.storisinz.site/npm/butterfly-extsrc/sharejs/dist/js/social-share.min.js" defer></script></div></div><nav class="pagination-post" id="pagination"><div class="prev-post pull-left"><a href="/posts/61417/"><img class="prev-cover" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230128/30165599-36623bea-93a6-11e7-8956-1ddf99ce0e6f.2rbu2i9xfvy0.webp" onerror='onerror=null,src="/assets/r2.jpg"' alt="cover of previous post"><div class="pagination-info"><div class="label">上一篇</div><div class="prev_info">自建Meting服务</div></div></a></div><div class="next-post pull-right"><a href="/posts/22945/"><img class="next-cover" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/logo.22azkjyis5uo.webp" onerror='onerror=null,src="/assets/r2.jpg"' alt="cover of next post"><div class="pagination-info"><div class="label">下一篇</div><div class="next_info">butterfly主题添加音乐页面(适配手机)</div></div></a></div></nav><div class="relatedPosts"><div class="headline"><i class="fas fa-thumbs-up fa-fw"></i><span>相关推荐</span></div><div class="relatedPosts-list"><div><a href="/posts/10045/" title="为博客添加一个游戏收藏页(npm插件版)"><img class="cover" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/picx-images-hosting@master/20240525/fe131d7f5a6b38b23cc967316c13dae2.8dwp7xp4q5.webp" alt="cover"><div class="content is-center"><div class="date"><i class="fas fa-history fa-fw"></i> 2025-01-01</div><div class="title">为博客添加一个游戏收藏页(npm插件版)</div></div></a></div><div><a href="/posts/22945/" title="butterfly主题添加音乐页面(适配手机)"><img class="cover" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/logo.22azkjyis5uo.webp" alt="cover"><div class="content is-center"><div class="date"><i class="fas fa-history fa-fw"></i> 2025-01-01</div><div class="title">butterfly主题添加音乐页面(适配手机)</div></div></a></div><div><a href="/posts/53662/" title="博客大更新"><img class="cover" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://files.blog.sinzmise.top/images/645fa3cf90d70.webp" alt="cover"><div class="content is-center"><div class="date"><i class="fas fa-history fa-fw"></i> 2025-01-01</div><div class="title">博客大更新</div></div></a></div><div><a href="/posts/16107/" title="新起点,新出发"><img class="cover" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20221230/46348.3e004dfapae0.webp" alt="cover"><div class="content is-center"><div class="date"><i class="fas fa-history fa-fw"></i> 2025-01-01</div><div class="title">新起点,新出发</div></div></a></div><div><a href="/posts/57692/" title="Ruffle测试"><img class="cover" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://images1.blog.sinzmise.top/images/Canvas-Ruom.7pbzp97mh.webp" alt="cover"><div class="content is-center"><div class="date"><i class="fas fa-history fa-fw"></i> 2025-01-01</div><div class="title">Ruffle测试</div></div></a></div><div><a href="/posts/28536/" title="自建不蒜子API"><img class="cover" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://vip1.loli.io/2022/05/11/eKfrdV9p48IcCj5.jpg" alt="cover"><div class="content is-center"><div class="date"><i class="fas fa-history fa-fw"></i> 2025-01-01</div><div class="title">自建不蒜子API</div></div></a></div></div></div><hr><div id="post-comment"><div class="comment-head"><div class="comment-headline"><i class="fas fa-comments fa-fw"></i> <span>评论</span></div><div id="comment-switch"><span class="first-comment">Twikoo</span><span class="switch-btn"></span><span class="second-comment">Idisqus</span></div></div><div class="comment-wrap"><div><div id="twikoo-wrap"></div></div><div><input id="comment-toggle" type="checkbox" disabled> <span>加载 Disqus 原生评论框</span><div id="idisqus-container"></div><footer class="idsqs-footer-container"><p class="idsqs-footer">Powered by <a class="idsqs-disqus-logo" href="https://disqus.com" rel="external nofollow noopener noreferrer" target="_blank"></a> & <a class="idsqs-idisqus-logo" href="https://github.com/fooleap/disqus-php-api" rel="noreferrer" target="_blank">iDisqus</a></p></footer></div></div></div><hr><div id="post-comment"><div class="comment-head"><div class="comment-headline"><i class="fas fa-comments fa-fw"></i> <span>网络回响</span></div></div><div class="comment-wrap"><div id="webmentions"></div><form class="webmention-input-group" action="https://webmention.io/blog.sinzmise.top/webmention" method="post" style="margin:2ch 0"><label class="webmention-label" for="source">欲提交/移除对本文的回应,请于此提交您的文章地址:</label><input class="webmention-input" name="source" placeholder="Your URL" required type="url"><input class="webmention-input" name="target" type="hidden" value="https://blog.sinzmise.top/posts/23226/"><input class="webmention-input" style="background:var(--font-color)" type="submit" value="提交"></form></div></div></div><div class="aside-content" id="aside-content"><div class="card-widget card-info h-card"><div class="bg-blur"></div><div class="author_top is-center"><div class="card-info-avatar"><div class="avatar-img"><img class="u-photo u-logo" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="/img/avatar.png" onerror='this.onerror=null,this.src="/assets/r1.jpg"' alt="avatar"></div><div class="author-status-box"><div class="author-status"><g-emoji class="g-emoji" alias="palm_tree" fallback-src="https://lskypro.acozycotage.net/LightPicture/2022/12/fe1dc0402e623096.jpg">🐟</g-emoji><span>认真摸鱼中</span></div></div></div><br><a class="author-info__name p-name u-url" href="/" style="color:#555">王九弦SZ·Ninty</a><div class="author-info__description">The Story,The Dream.</div></div><div class="card-info-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">45</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">14</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">5</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://www.sinzmise.top/"><span>个人主页</span><i class="faa-passing animated" style="padding-left:20px;display:inline-block;vertical-align:middle"><svg class="icon" style="height:28px;width:28px;fill:currentColor;position:relative;top:5px"><use xlink:href="#icon-xiaoqiche"></use></svg></i></a><div class="card-info-social-icons is-center"><a class="social-icon faa-parent animated-hover" href="https://github.com/SinzMise" target="_blank" rel="me" title="Github"><svg class="social_icon faa-tada" aria-hidden="true" style="width:1.15em;height:1.15em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-github"></use></svg></a><a class="social-icon faa-parent animated-hover" href="https://space.bilibili.com/479627766" target="_blank" rel="me" title="Bilibili"><svg class="social_icon faa-tada" aria-hidden="true" style="width:1.15em;height:1.15em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-bilibili"></use></svg></a><a class="social-icon faa-parent animated-hover" href="mailto:email@sinzmise.top" target="_blank" rel="me" title="Email"><svg class="social_icon faa-tada" aria-hidden="true" style="width:1.15em;height:1.15em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-youxiang"></use></svg></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><a class="faa-parent animated-hover"><svg class="faa-tada icon" style="height:25px;width:25px;fill:currentColor;position:relative;top:5px" aria-hidden="true"><use xlink:href="#icon-gonggao"></use></svg></a><span style="font-weight:700">公告栏</span></div><div class="announcement_content"><center>果然,还是Butterfly真香</center></div><div id="welcome-info"></div></div><div class="sticky_layout"><div class="card-widget" id="card-toc"><div class="item-headline"><svg class="meta_icon" style="width:22px;height:22px;position:relative;top:5px"><use xlink:href="#icon-mulu1"></use></svg><span style="font-weight:700">目录</span><span class="toc-percentage"></span></div><div class="toc-content"><ol class="toc"><li class="toc-item toc-level-1"><a class="toc-link"><span class="toc-text">前言</span></a></li><li class="toc-item toc-level-1"><a class="toc-link"><span class="toc-text">教程</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%90%8E%E7%AB%AF%E9%83%A8%E7%BD%B2"><span class="toc-text">后端部署</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E9%85%8D%E7%BD%AE%E6%95%B0%E6%8D%AE%E5%BA%93"><span class="toc-text">配置数据库</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E9%83%A8%E7%BD%B2kkapi"><span class="toc-text">部署kkapi</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E9%83%A8%E7%BD%B2kkadmin"><span class="toc-text">部署kkadmin</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%89%8D%E7%AB%AF%E9%85%8D%E7%BD%AE"><span class="toc-text">前端配置</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E8%BF%9B%E5%85%A5%E5%90%8E%E5%8F%B0%EF%BC%8C%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BAID"><span class="toc-text">进入后台,查看个人ID</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%89%8D%E7%AB%AF%E5%BC%95%E5%85%A5"><span class="toc-text">前端引入</span></a></li></ol></li></ol></li></ol></div></div></div></div></main><footer id="footer" style="background-color:transparent"><div id="footer-wrap"><div id="ft"><div class="ft-item-1"><div class="t-top"><div class="t-t-l"><p class="ft-t t-l-t">格言🧬</p><div class="bg-ad"><div>再看看那个光点,它就在这里,这是家园,这是我们 —— 你所爱的每一个人,你认识的一个人,你听说过的每一个人,曾经有过的每一个人,都在它上面度过他们的一生✨</div><div class="btn-xz-box"><a class="btn-xz" target="_blank" rel="noopener" href="https://stellarium.org/">穿梭到星空之旅途</a></div></div></div><div class="t-t-r"><p class="ft-t t-l-t">猜你想看</p><ul class="ft-links"><li><a href="/tags/">文章标签</a><a href="/categories/">文章分类</a></li><li><a href="/link/">友情链接</a><a href="/fcircle/">朋友圈</a></li></ul></div></div></div><div class="ft-item-2"><p class="ft-t">推荐友链⌛</p><div class="ft-img-group"><div class="img-group-item"><a target="_blank" rel="noopener" href="https://www.lihaoyu.cn" title="/%E6%99%93%E9%9B%A8%E6%9D%82%E8%AE%B0"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://blog-api.lihaoyu.cn/images/profile/avatar-128x.webp" alt=""></a></div><div class="img-group-item"><a target="_blank" rel="noopener" href="https://dusays.com/" title="/%E6%9D%9C%E8%80%81%E5%B8%88%E8%AF%B4"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://cdn.dusays.com/avatar.png" alt=""></a></div><div class="img-group-item"><a target="_blank" rel="noopener" href="https://blog.tianli0.top/" title="/Tianli"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://q2.qlogo.cn/headimg_dl?dst_uin=507249007&spec=640" alt=""></a></div><div class="img-group-item"><a target="_blank" rel="noopener" href="https://blog.zhheo.com/" title="/%E5%BC%A0%E6%B4%AAHeo"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://bu.dusays.com/2022/12/28/63ac2812183aa.png" alt=""></a></div><div class="img-group-item"><a target="_blank" rel="noopener" href="https://www.qcqx.cn/" title="/%E8%BD%BB%E7%AC%91Chuckle"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://www.qcqx.cn/head.webp" alt=""></a></div><div class="img-group-item"><a target="_blank" rel="noopener" href="https://kmar.top/" title="/%E5%B1%B1%E5%B2%B3%E5%BA%93%E5%8D%9A%C2%B7%E7%A9%BA%E6%A2%A6"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://npm.elemecdn.com/@kmar/fonts@1/avatar/own.png" alt=""></a></div><div class="img-group-item"><a target="_blank" rel="noopener" href="https://blog.qjqq.cn/" title="/%E9%9D%92%E6%A1%94%E6%B0%94%E7%90%83"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://q2.qlogo.cn/headimg_dl?dst_uin=1645253&spec=640" alt=""></a></div><div class="img-group-item"><a target="_blank" rel="noopener" href="https://bikari.top" title="/%E5%BE%AE%E5%85%89%E6%A1%A3%E6%A1%88"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://cravatar.cn/avatar/ECB2EA87C4532F007838D86D02798F89" alt=""></a></div></div></div></div><div class="footer_custom_text"><a href="https://www.travellings.cn/go.html" class="social flat-btn" target="_blank" rel="external nofollow noopener noreferrer" itemprop="url" alt="开往-友链接力"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://www.travellings.cn/assets/logo.gif" class="lazyload" data-srcset="https://www.travellings.cn/assets/logo.gif" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="height:24px"></a><a href="https://boringbay.com" class="social flat-btn" target="_blank" rel="external nofollow noopener noreferrer" itemprop="url" alt="无聊湾 🥱 The Boring Bay"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://boringbay.com/api/badge/blog.sinzmise.top" class="lazyload" data-srcset="https://boringbay.com/api/badge/blog.sinzmise.top" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="height:24px"></a><a href="https://blogscn.fun/" class="social flat-btn" target="_blank" rel="external nofollow noopener noreferrer" itemprop="url" alt="本站已加入BLOGS·CN"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://photo.xiangming.site/img/blogscn.png" class="lazyload" data-srcset="https://photo.xiangming.site/img/blogscn.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="height:24px"></a><a href="https://blogscn.fun/random.html" class="social flat-btn" target="_blank" rel="external nofollow noopener noreferrer" itemprop="url" alt="BLOGS·CN随机访问"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://photo.xiangming.site/img/footer.gif" class="lazyload" data-srcset="https://photo.xiangming.site/img/footer.gif" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="height:24px"></a><a href="https://www.blogsclub.org/go" target="_blank" title="空间穿梭-随机访问BlogsClub成员博客"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://www.blogsclub.org/images/shuttle_1.png"></a><br><a target="_blank" rel="noopener" href="https://xn--sr8hvo.ws/previous">←</a> An <a target="_blank" rel="noopener" href="https://xn--sr8hvo.ws">IndieWeb Webring</a> 🕸💍 <a target="_blank" rel="noopener" href="https://xn--sr8hvo.ws/next">→</a><br>©2021 · <a href="/">中弦局·汐塔魔法屋</a><br><a target="_blank" rel="noopener" href="https://icp.gov.moe/?keyword=20231033">萌ICP备20231033号</a> | <a href="https://icp.yuncheng.fun/id.php?keyword=20241025" target="_blank">团ICP备20241025号</a> | <a target="_blank" rel="noopener" href="https://beian.miit.cn.com/gov/search.php?query=20240818">MIIT备20240818号</a> | <a target="_blank" rel="noopener" href="https://guan.ma/hao/2024000155/">官码2024000155号</a> | <a href="https://icp.snzy.cc/?id=2024120181" title="梵AIA盟2024120181号" target="_blank"><img style="width:20px;height:20px" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://icp.snzy.cc/static/picture/icpba.png">梵AIA盟2024120181号</a> | <a target="_blank" rel="noopener" href="https://icp.sepocatch.xyz/search.php?keyword=blog.sinzmise.top" id="SepocatchICPv5Link">SICP备20243448号</a><br>我加入的:<a target="_blank" rel="noopener" href="https://zhblogs.ohyee.cc/">中文博客列表</a> | <a target="_blank" rel="noopener" href="https://storeweb.cn/member/o/1585">个站商店</a> | <a target="_blank" rel="noopener" href="https://bf.zzxworld.com/s/995">BlogFinder</a> | <a target="_blank" rel="noopener" href="https://sites.applinzi.com/site-info?siteType=life&siteId=64cb373190e35300a8eec654">站点聚合平台</a> | <a target="_blank" rel="noopener" href="https://boke.lu/">博客录</a> | <a target="_blank" rel="noopener" href="https://rssblog.cn/member/d711afd659d65c2ba2d3b18697818cf7/">RssBlog</a> | <a target="_blank" rel="noopener" href="https://blogscn.fun/">笔墨迹</a> | <a target="_blank" rel="noopener" href="https://daohang.lusongsong.com/">博客大全</a> | <a target="_blank" rel="noopener" href="https://www.blogsclub.org/blog/99.html">BlogsClub</a> | <a target="_blank" rel="noopener" href="https://ourblo.gs/blogs/55/">OurBlogs</a><br><a href="https://ipw.cn/ipv6webcheck/?site=blog.sinzmise.top" title="本站支持IPv6访问" target="_blank"><img style="display:inline-block;vertical-align:middle" alt="本站支持IPv6访问" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://static.ipw.cn/icon/ipv6-s1.svg"></a><a href="https://ipw.cn/ssl/?site=blog.sinzmise.top" title="本站支持SSL安全访问" target="_blank"><img style="display:inline-block;vertical-align:middle" alt="本站支持SSL安全访问" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://static.ipw.cn/icon/ssl-s1.svg"></a></div><div id="workboard"></div><p id="ghbdages"><a class="github-badge" target="_blank" href="https://hexo.io/" style="margin-inline:5px" title="博客框架为Hexo_v6.2.0"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://files.blog.sinzmise.top/images/Frame-Hexo-blue.svg" alt=""></a><a class="github-badge" target="_blank" href="https://butterfly.js.org/" style="margin-inline:5px" title="主题版本Butterfly_v4.3.1"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://files.blog.sinzmise.top/images/Theme-Butterfly-6513df.svg" alt=""></a><a class="github-badge" target="_blank" href="https://pages.cloudflare.com/" style="margin-inline:5px" title="本站采用多线部署,主线路部署到Cloudflare Pages"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://files.blog.sinzmise.top/images/HostCF.svg" alt=""></a><a class="github-badge" target="_blank" href="https://cdn.ledcdn.com/" style="margin-inline:5px" title="本站由LEDCDN提供站点加速服务"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://files.blog.sinzmise.top/images/LEDCDN.svg" alt=""></a><a class="github-badge" target="_blank" href="https://51.la/" style="margin-inline:5px" title="本站数据分析得益于51la技术支持"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://files.blog.sinzmise.top/images/Analytics-51la-3db1eb.svg" alt=""></a><a class="github-badge" target="_blank" href="https://github.com/" style="margin-inline:5px" title="本站项目由GitHub托管"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://img.shields.io/badge/Source-Github-d021d6?style=flat&logo=GitHub" alt=""></a><a class="github-badge" target="_blank" href="http://creativecommons.org/licenses/by-nc-sa/4.0/" style="margin-inline:5px" title="本站采用知识共享署名-非商业性使用-相同方式共享4.0国际许可协议进行许可"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://img.shields.io/badge/Copyright-BY--NC--SA%204.0-d42328?style=flat&logo=Claris" alt=""></a></p></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="readmode" type="button" title="阅读模式"><i class="fas fa-book-open"></i></button><a class="icon-V hidden" onclick="switchNightMode()" title="浅色和深色模式转换"><svg width="25" height="25" viewBox="0 0 1024 1024"><use id="modeicon" xlink:href="#icon-moon"></use></svg></a><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="设置"><i class="fas fa-cog right_side"></i></button><button class="close" id="mobile-toc-button" type="button" title="目录"><i class="fas fa-list-ul"></i></button><button class="share" type="button" title="分享链接" onclick="share()"><i class="fas fa-share-nodes"></i></button><a id="to_comment" href="#post-comment" title="直达评论"><i class="fas fa-comments"></i></a><button id="go-up" type="button" title="回到顶部"><i class="fas fa-arrow-up"></i><span id="percent">0<span>%</span></span></button><button id="go-down" type="button" title="直达底部" onclick="btf.scrollToDest(document.body.scrollHeight,500)"><i class="fas fa-arrow-down"></i></button></div></div><div class="docsearch-wrap"><div id="docsearch" style="display:none"></div><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/@docsearch/css/dist/style.min.css"><script src="https://jsd.cdn.storisinz.site/npm/@docsearch/js/dist/umd/index.min.js"></script><script>(()=>{docsearch(Object.assign({appId:"QAS05YI2PH",apiKey:"67ffd4c9fa1234148ec4f8b27dfdb2a7",indexName:"sinzmise",container:"#docsearch"},null));const e=()=>{document.querySelector("#search-button > .search").addEventListener("click",(()=>{document.querySelector(".DocSearch-Button").click()}))};e(),window.addEventListener("pjax:complete",e)})()</script></div><div class="js-pjax" id="rightMenu"><div class="rightMenu-group rightMenu-small"><a class="rightMenu-item" href="javascript:window.history.back();"><i class="fa fa-arrow-left"></i></a><a class="rightMenu-item" href="javascript:window.history.forward();"><i class="fa fa-arrow-right"></i></a><a class="rightMenu-item" href="javascript:window.location.reload();"><i class="fa fa-refresh"></i></a><a class="rightMenu-item" href="javascript:rmf.scrollToTop();"><i class="fa fa-arrow-up"></i></a></div><div class="rightMenu-group rightMenu-line hide" id="menu-text"><a class="rightMenu-item" href="javascript:rmf.copySelect();"><i class="fa fa-copy"></i><span>复制</span></a><a class="rightMenu-item" href="javascript:window.open("https://bing.com/search?q="+window.getSelection().toString());window.location.reload();"><i class="fa fa-search"></i><span>必应搜索</span></a></div><div class="rightMenu-group rightMenu-line hide" id="menu-too"><a class="rightMenu-item" href="javascript:window.open(window.getSelection().toString());window.location.reload();"><i class="fa fa-link"></i><span>转到链接</span></a></div><div class="rightMenu-group rightMenu-line hide" id="menu-paste"><a class="rightMenu-item" href="javascript:rmf.paste()"><i class="fa fa-copy"></i><span>粘贴</span></a></div><div class="rightMenu-group rightMenu-line hide" id="menu-post"><a class="rightMenu-item" href="#post-comment"><i class="fas fa-comment"></i><span>评论</span></a><a class="rightMenu-item" href="javascript:rmf.copyWordsLink()"><i class="fa fa-link"></i><span>复制本文地址</span></a></div><div class="rightMenu-group rightMenu-line hide" id="menu-to"><a class="rightMenu-item" href="javascript:rmf.openWithNewTab()"><i class="fa fa-window-restore"></i><span>在新窗口打开</span></a><a class="rightMenu-item" id="menu-too" href="javascript:rmf.open()"><i class="fa fa-link"></i><span>转到链接</span></a><a class="rightMenu-item" href="javascript:rmf.copyLink()"><i class="fa fa-copy"></i><span>复制链接</span></a></div><div class="rightMenu-group rightMenu-line hide" id="menu-img"><a class="rightMenu-item" href="javascript:rmf.saveAs()"><i class="fa fa-download"></i><span>保存图片</span></a><a class="rightMenu-item" href="javascript:rmf.openWithNewTab()"><i class="fa fa-window-restore"></i><span>在新窗口打开</span></a><a class="rightMenu-item" href="javascript:rmf.copyLink()"><i class="fa fa-copy"></i><span>复制图片链接</span></a></div><div class="rightMenu-group rightMenu-line"><a class="rightMenu-item" href="javascript:toRandomPost()"><i class="fa fa-paper-plane"></i><span>随便逛逛</span></a><a class="rightMenu-item" href="javascript:switchNightMode();"><i class="fa fa-moon"></i><span>昼夜切换</span></a><a class="rightMenu-item" href="/about/"><i class="fa fa-info-circle"></i><span>关于我</span></a><a class="rightMenu-item" href="javascript:toggleWinbox();"><i class="fas fa-cog"></i><span>主题设置</span></a><a class="rightMenu-item" href="javascript:rmf.fullScreen();"><i class="fas fa-expand"></i><span>切换全屏</span></a><a class="rightMenu-item" href="javascript:window.print();"><i class="fa-solid fa-print"></i><span>打印页面</span></a></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><script src="https://cdnjs.cdn.storisinz.site/ajax/libs/fancyapps-ui/4.0.31/fancybox.umd.min.js"></script><script src="https://cdnjs.cdn.storisinz.site/ajax/libs/instant.page/5.1.0/instantpage.min.js" type="module"></script><script src="https://cdnjs.cdn.storisinz.site/ajax/libs/vanilla-lazyload/17.3.1/lazyload.iife.min.js"></script><script async>var preloader={endLoading:()=>{document.body.style.overflow="auto",document.getElementById("loading-box").classList.add("loaded")},initLoading:()=>{document.body.style.overflow="",document.getElementById("loading-box").classList.remove("loaded")}};window.addEventListener("load",preloader.endLoading()),setTimeout((function(){preloader.endLoading()}),5e3),document.getElementById("loading-box").addEventListener("click",(()=>{preloader.endLoading()}))</script><div class="js-pjax"><script>(()=>{const t=()=>{twikoo.init(Object.assign({el:"#twikoo-wrap",envId:"https://tk.pl.blog.sinzmise.top/",region:"",onCommentLoaded:function(){btf.loadLightbox(document.querySelectorAll("#twikoo .tk-content img:not(.tk-owo-emotion)"))}},null))},o=()=>{"object"!=typeof twikoo?getScript("https://jsd.cdn.storisinz.site/npm/twikoo/dist/twikoo.all.min.js").then(t):setTimeout(t,0)};o()})()</script><style>.idsqs-footer-container{border-top:2px solid #e6e8ee;color:#555;font-size:16px;font-weight:700;line-height:1.5;margin-top:12px;padding-right:10px;padding-top:10px;text-align:right}.idsqs-footer{color:#64778b}.idsqs-disqus-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 438 80'%3E%3Cpath fill='%23575B5D' d='M30.2 1.6H1v76h28.9C57 77.6 73 61.3 73 39.4v-.2c0-22-15.7-37.6-42.9-37.6zm21.3 38.1c0 12.3-8.4 19.3-21 19.3H22V20.3h8.5c12.6 0 21 7 21 19.2v.2zm35.6 38h21.2V1.5H87.1v76zm70-47.4c-10.4-2.4-13-4-13-7.4v-.2c0-2.7 2.4-5 7.6-5 6.7 0 14.3 2.7 21.2 7.6l10.6-14.9A47.9 47.9 0 0 0 152.2.3c-18.3 0-29.4 10.2-29.4 24.3v.2c0 15.7 12.4 20.3 28.6 24 10.4 2.3 12.9 4 12.9 7.2v.2c0 3.3-3 5.2-8.7 5.2-8.8 0-17.2-3.1-24.7-9l-11.7 14a53.1 53.1 0 0 0 35.6 12.5c18.5 0 30.7-9.2 30.7-24.7V54c0-14.3-10.8-20-28.3-23.7zm120.7 9.3v-.2A39.5 39.5 0 0 0 236.9.1c-23.4 0-41 17.7-41 39.5v.2a39.5 39.5 0 0 0 40.8 39.4c8.7 0 16.6-2.5 23.1-6.8l8.4 7.5L279 68.1l-7.9-6.6a38 38 0 0 0 6.8-21.9zm-21.4.5c0 2.6-.5 5-1.3 7.3l-10.4-9.3-10.6 12 10.5 9a21.7 21.7 0 0 1-7.7 1.4c-11.6 0-19.4-9.7-19.4-20.7v-.2c0-11 7.7-20.5 19.2-20.5 11.7 0 19.7 9.7 19.7 20.7v.3zm83.5 4.3c0 10.6-5.5 15.6-14 15.6s-14-5.2-14-16.1V1.6h-21.4v42.7C290.5 68 304 79 325.7 79s35.6-10.8 35.6-35.3V1.5h-21.4v42.8zm68.9-14.1c-10.6-2.4-13.2-4-13.2-7.4v-.2c0-2.7 2.5-5 7.6-5 6.8 0 14.4 2.7 21.3 7.6l10.6-14.9A47.9 47.9 0 0 0 403.8.3c-18.3 0-29.5 10.2-29.5 24.3v.2c0 15.7 12.5 20.3 28.7 24 10.3 2.3 12.8 4 12.8 7.2v.2c0 3.3-3 5.3-8.7 5.3-8.8 0-17.1-3.2-24.6-9.2l-11.7 14A53.1 53.1 0 0 0 406.4 79c18.5 0 30.7-9.2 30.7-24.7V54c0-14.3-10.8-20-28.3-23.7z'/%3E%3C/svg%3E");background-position:50% 50%;background-repeat:no-repeat;display:inline-block;height:12px;width:65.7px}</style><script>function loadiDisqus(){function i(){new iDisqus("idisqus-container",{api:"https://idq.pl.blog.sinzmise.top/blog/zh",forum:"cetahousezh",mode:3,toggle:"comment-toggle",site:"https://blog.sinzmise.top",init:!0})}"function"==typeof iDisqus?i():(!function(){const i=document.createElement("link");i.rel="stylesheet",i.href="https://idq.pl.blog.sinzmise.top/dist/iDisqus.min.css",document.head.appendChild(i)}(),getScript("https://idq.pl.blog.sinzmise.top/dist/iDisqus.min.js").then(i))}{function loadOtherComment(){loadiDisqus()}setTimeout(loadiDisqus,0)}</script><div id="webmen-root"></div><script>function loadWebMention(){if(null!=document.getElementById("webmentionjs"))document.getElementById("webmentionjs").remove(),loadWebMention();else{let e=document.createElement("script");e.setAttribute("src","/js/webmention.js"),e.setAttribute("id","webmentionjs"),document.getElementById("webmen-root").insertAdjacentElement("afterbegin",e)}}loadWebMention()</script></div><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/anzhiyu-theme-static/icon/ali_iconfont_css.min.css"><script src="https://jsd.cdn.storisinz.site/npm/jquery.marquee/jquery.marquee.min.js"></script><script src="https://jsd.cdn.storisinz.site/npm/@ruffle-rs/ruffle"></script><script src="/js/ceta/random.js"></script><script async data-pjax src="/bbs/bbs.js"></script><script src="https://jsd.cdn.storisinz.site/npm/swiper@10.3.1/swiper-bundle.min.js"></script><script src="https://cdnjs.cdn.storisinz.site/ajax/libs/jquery/3.6.3/jquery.min.js"></script><script src="https://jsd.cdn.storisinz.site/npm/axios/dist/axios.min.js"></script><script>var meting_api="https://meting.api.sinzmise.eu.org/api?server=:server&type=:type&id=:id&auth=:auth&r=:r"</script><script async src="https://jsd.cdn.storisinz.site/npm/vue@2.6.14/dist/vue.min.js"></script><script async src="https://jsd.cdn.storisinz.site/npm/element-ui@2.15.6/lib/index.js"></script><script async src="https://cdnjs.cdn.storisinz.site/ajax/libs/clipboard.js/2.0.11/clipboard.min.js"></script><script defer src="https://jsd.cdn.storisinz.site/npm/sweetalert2@8.19.0/dist/sweetalert2.all.js"></script><script async src="https://jsd.cdn.storisinz.site/npm/pace-js@1.2.4/pace.min.js"></script><script defer src="https://jsd.cdn.storisinz.site/gh/nextapps-de/winbox/dist/winbox.bundle.min.js"></script><script async src="//at.alicdn.com/t/c/font_3586335_hsivh70x0fm.js"></script><script async src="//at.alicdn.com/t/c/font_3636804_gr02jmjr3y9.js"></script><script async src="//at.alicdn.com/t/c/font_3612150_kfv55xn3u2g.js"></script><script async src="//at.alicdn.com/t/c/font_4199232_wlo8truegv.js"></script><script async src="/js/Gold-ingot.js"></script><canvas id="universe"></canvas><canvas id="snow"></canvas><script defer src="/js/fomal.js"></script><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/aplayer/dist/APlayer.min.css" media="print" onload='this.media="all"'><script src="https://jsd.cdn.storisinz.site/npm/aplayer/dist/APlayer.min.js"></script><script src="https://jsd.cdn.storisinz.site/npm/meting/dist/Meting.min.js"></script><script src="https://jsd.cdn.storisinz.site/npm/pjax/pjax.min.js"></script><script>let pjaxSelectors=["head > title","#config-diff","#body-wrap","#rightside-config-hide","#rightside-config-show","#web_bg",".js-pjax","#bibi","body > title","#app","#tag-echarts","#posts-echart","#categories-echarts"];var pjax=new Pjax({elements:'a:not([target="_blank"]):not([href="/bbs/"])',selectors:pjaxSelectors,cacheBust:!1,analytics:!0,scrollRestoration:!1});document.addEventListener("pjax:send",(function(){if(window.tocScrollFn&&window.removeEventListener("scroll",window.tocScrollFn),window.scrollCollect&&window.removeEventListener("scroll",scrollCollect),"object"==typeof preloader&&preloader.initLoading(),document.getElementById("rightside").style.cssText="opacity: ''; transform: ''",window.aplayers)for(let e=0;e<window.aplayers.length;e++)window.aplayers[e].options.fixed||window.aplayers[e].destroy();"object"==typeof typed&&typed.destroy();const e=document.body.classList;e.contains("read-mode")&&e.remove("read-mode"),"object"==typeof disqusjs&&disqusjs.destroy()})),document.addEventListener("pjax:complete",(function(){window.refreshFn(),document.querySelectorAll("script[data-pjax]").forEach((e=>{const t=document.createElement("script"),o=e.text||e.textContent||e.innerHTML||"";Array.from(e.attributes).forEach((e=>t.setAttribute(e.name,e.value))),t.appendChild(document.createTextNode(o)),e.parentNode.replaceChild(t,e)})),GLOBAL_CONFIG.islazyload&&window.lazyLoadInstance.update(),"function"==typeof chatBtnFn&&chatBtnFn(),"function"==typeof panguInit&&panguInit(),"function"==typeof gtag&>ag("config","G-7MR59SK1DP",{page_path:window.location.pathname}),"object"==typeof _hmt&&_hmt.push(["_trackPageview",window.location.pathname]),"function"==typeof loadMeting&&document.getElementsByClassName("aplayer").length&&loadMeting(),"object"==typeof Prism&&Prism.highlightAll(),"object"==typeof preloader&&preloader.endLoading()})),document.addEventListener("pjax:error",(e=>{404===e.request.status&&pjax.loadUrl("/404.html")}))</script><script async data-prefix="busuanzi_value" data-pjax pjax src="https://jsd.cdn.storisinz.site/npm/penndu@16.0.0/bsz.js"></script></div><script data-pjax>function butterfly_swiper_injector_config(){var s=document.getElementById("recent-posts");console.log("已挂载butterfly_swiper"),s.insertAdjacentHTML("afterbegin",'<div class="recent-post-item" style="height: auto;width: 100%"><div class="blog-slider swiper-container-fade swiper-container-horizontal" id="swiper_container"><div class="blog-slider__wrp swiper-wrapper" style="transition-duration: 0ms;"><div class="blog-slider__item swiper-slide" style="width: 750px; opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;"><a class="blog-slider__img" onclick="pjax.loadUrl("posts/61417/");" href="javascript:void(0);" alt=""><img width="48" height="48" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230128/30165599-36623bea-93a6-11e7-8956-1ddf99ce0e6f.2rbu2i9xfvy0.webp" alt="" onerror="this.src=https://unpkg.zhimg.com/akilar-candyassets/image/loading.gif; this.onerror = null;"/></a><div class="blog-slider__content"><span class="blog-slider__code">2023-01-19</span><a class="blog-slider__title" onclick="pjax.loadUrl("posts/61417/");" href="javascript:void(0);" alt="">自建Meting服务</a><div class="blog-slider__text">Meting官方API用不了了,所以。。。。。</div><a class="blog-slider__button" onclick="pjax.loadUrl("posts/61417/");" href="javascript:void(0);" alt="">详情 </a></div></div><div class="blog-slider__item swiper-slide" style="width: 750px; opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;"><a class="blog-slider__img" onclick="pjax.loadUrl("posts/54481/");" href="javascript:void(0);" alt=""><img width="48" height="48" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/R-C.7iu7u13vibs0.webp" alt="" onerror="this.src=https://unpkg.zhimg.com/akilar-candyassets/image/loading.gif; this.onerror = null;"/></a><div class="blog-slider__content"><span class="blog-slider__code">2023-03-12</span><a class="blog-slider__title" onclick="pjax.loadUrl("posts/54481/");" href="javascript:void(0);" alt="">千千静听复活教程</a><div class="blog-slider__text">中考尚未结束就来更新的屑</div><a class="blog-slider__button" onclick="pjax.loadUrl("posts/54481/");" href="javascript:void(0);" alt="">详情 </a></div></div><div class="blog-slider__item swiper-slide" style="width: 750px; opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;"><a class="blog-slider__img" onclick="pjax.loadUrl("posts/38964/");" href="javascript:void(0);" alt=""><img width="48" height="48" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_GVRhG42nuu.1g9uz8t24io0.webp" alt="" onerror="this.src=https://unpkg.zhimg.com/akilar-candyassets/image/loading.gif; this.onerror = null;"/></a><div class="blog-slider__content"><span class="blog-slider__code">2023-01-13</span><a class="blog-slider__title" onclick="pjax.loadUrl("posts/38964/");" href="javascript:void(0);" alt="">小康大佬的说说方案 ———— ispeak搭建教程</a><div class="blog-slider__text">这篇文章是我之前写过的教程的重写</div><a class="blog-slider__button" onclick="pjax.loadUrl("posts/38964/");" href="javascript:void(0);" alt="">详情 </a></div></div><div class="blog-slider__item swiper-slide" style="width: 750px; opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;"><a class="blog-slider__img" onclick="pjax.loadUrl("posts/22945/");" href="javascript:void(0);" alt=""><img width="48" height="48" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/logo.22azkjyis5uo.webp" alt="" onerror="this.src=https://unpkg.zhimg.com/akilar-candyassets/image/loading.gif; this.onerror = null;"/></a><div class="blog-slider__content"><span class="blog-slider__code">2023-01-08</span><a class="blog-slider__title" onclick="pjax.loadUrl("posts/22945/");" href="javascript:void(0);" alt="">butterfly主题添加音乐页面(适配手机)</a><div class="blog-slider__text">原先的音乐页面存在BUG:手机访问会错乱,所以我重新找了个音乐播放器源码</div><a class="blog-slider__button" onclick="pjax.loadUrl("posts/22945/");" href="javascript:void(0);" alt="">详情 </a></div></div></div><div class="blog-slider__pagination swiper-pagination-clickable swiper-pagination-bullets"></div></div></div>')}for(var elist="undefined".split(","),cpage=location.pathname,epage="/",flag=0,i=0;i<elist.length;i++)cpage.includes(elist[i])&&flag++;("all"===epage&&0==flag||epage===cpage)&&butterfly_swiper_injector_config()</script><script defer src="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-swiper/lib/swiper.min.js"></script><script defer data-pjax src="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-swiper/lib/swiper_init.js"></script><div class="js-pjax"><script async>for(var arr=document.getElementsByClassName("recent-post-item"),i=0;i<arr.length;i++)arr[i].classList.add("wow"),arr[i].classList.add("animate__zoomIn"),arr[i].setAttribute("data-wow-duration","2s"),arr[i].setAttribute("data-wow-delay","200ms"),arr[i].setAttribute("data-wow-offset","30"),arr[i].setAttribute("data-wow-iteration","1")</script><script async>for(var arr=document.getElementsByClassName("category-bar"),i=0;i<arr.length;i++)arr[i].classList.add("wow"),arr[i].classList.add("animate__zoomIn"),arr[i].setAttribute("data-wow-duration","2s"),arr[i].setAttribute("data-wow-delay","200ms"),arr[i].setAttribute("data-wow-offset","30"),arr[i].setAttribute("data-wow-iteration","1")</script><script async>for(var arr=document.getElementsByClassName("card-widget"),i=0;i<arr.length;i++)arr[i].classList.add("wow"),arr[i].classList.add("animate__zoomIn"),arr[i].setAttribute("data-wow-duration","2s"),arr[i].setAttribute("data-wow-delay","200ms"),arr[i].setAttribute("data-wow-offset","30"),arr[i].setAttribute("data-wow-iteration","1")</script></div><script defer src="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-wowjs/lib/wow.min.js"></script><script defer src="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-wowjs/lib/wow_init.js"></script><script data-pjax src="https://jsd.cdn.storisinz.site/npm/hexo-filter-gitcalendar/lib/gitcalendar.js"></script><script data-pjax>function gitcalendar_injector_config(){document.getElementById("gitZone").insertAdjacentHTML("afterbegin",'<div class="recent-post-item" id="gitcalendarBar" style="width:100%;height:auto;padding:10px;"><style>#git_container{min-height: 320px}@media screen and (max-width:650px) {#git_container{min-height: 0px}}</style><div id="git_loading" style="width:10%;height:100%;margin:0 auto;display: block;"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 50 50" style="enable-background:new 0 0 50 50" xml:space="preserve"><path fill="#d0d0d0" d="M25.251,6.461c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615V6.461z" transform="rotate(275.098 25 25)"><animatetransform attributeType="xml" attributeName="transform" type="rotate" from="0 25 25" to="360 25 25" dur="0.6s" repeatCount="indefinite"></animatetransform></path></svg><style>#git_container{display: none;}</style></div><div id="git_container"></div></div>'),console.log("已挂载gitcalendar")}document.getElementById("gitZone")&&"/site/census/"===location.pathname&&(gitcalendar_injector_config(),GitCalendarInit("/api?null",["#d9e0df","#c6e0dc","#a8dcd4","#9adcd2","#89ded1","#77e0d0","#5fdecb","#47dcc6","#39dcc3","#1fdabe","#00dab9"],"null"))</script></body></html>
|
1
|
+
<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><div id="myscoll"></div><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><title>小康大佬的说说方案 ———— ispeak搭建教程 | 汐塔魔法屋</title><meta name="keywords" content="站点折腾,页面魔改"><meta name="author" content="王九弦SZ·Ninty"><meta name="copyright" content="王九弦SZ·Ninty"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="ffffff"><link rel="authorization_endpoint" href="https://indieauth.com/auth"><link rel="token_endpoint" href="https://tokens.indieauth.com/token"><link rel="webmention" href="https://webmention.io/blog.sinzmise.top/webmention"><link rel="pingback" href="https://webmention.io/blog.sinzmise.top/xmlrpc"><meta name="description" content="这篇文章是我之前写过的教程的重写"><meta property="og:type" content="article"><meta property="og:title" content="小康大佬的说说方案 ———— ispeak搭建教程"><meta property="og:url" content="https://blog.sinzmise.top/posts/38964/"><meta property="og:site_name" content="汐塔魔法屋"><meta property="og:description" content="这篇文章是我之前写过的教程的重写"><meta property="og:locale" content="zh_CN"><meta property="og:image" content="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_GVRhG42nuu.1g9uz8t24io0.webp"><meta property="article:published_time" content="2023-01-13T21:01:37.000Z"><meta property="article:modified_time" content="2025-01-04T12:30:30.077Z"><meta property="article:author" content="王九弦SZ·Ninty"><meta property="article:tag" content="站点折腾"><meta property="article:tag" content="页面魔改"><meta name="twitter:card" content="summary"><meta name="twitter:image" content="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_GVRhG42nuu.1g9uz8t24io0.webp"><link rel="shortcut icon" href="/favicon.ico"><link rel="canonical" href="https://blog.sinzmise.top/posts/38964/"><link rel="preconnect" href="//jsd.cdn.storisinz.site"><link rel="preconnect" href="//www.google-analytics.com" crossorigin=""><link rel="preconnect" href="//hm.baidu.com"><link rel="preconnect" href="//static.cloudflareinsights.com"><link rel="preconnect" href="//busuanzi.ibruce.info"><meta name="baidu-site-verification" content="codeva-F0RjFTve6w"><meta name="msvalidate.01" content="18428535B4425286753107589FC35E79"><meta name="blogsclub-find" content="0bcd40f87500234dd4721904e917e748"><meta name="blogsclub-verify" content="c993246f2c944fed8e4fdc8d024561fe"><link rel="manifest" href="/manifest.json"><meta name="msapplication-TileColor" content="var(--theme-color)"><link rel="apple-touch-icon" sizes="180x180" href="/images/siteicon/ios/128.png"><link rel="icon" type="image/png" sizes="32x32" href="/images/siteicon/ios/32.png"><link rel="icon" type="image/png" sizes="16x16" href="/images/siteicon/ios/16.png"><link rel="mask-icon" href="/images/siteicon/ios/128.png" color="#5bbad5"><div class="app-refresh" id="app-refresh" style="position:fixed;top:-2.2rem;left:0;right:0;z-index:99999;padding:0 1rem;font-size:15px;height:2.2rem;transition:all .3s ease"><div class="app-refresh-wrap" style="display:flex;color:#fff;height:100%;align-items:center;justify-content:center"><label>✨ 魔法屋上新了! 👉</label><a href="javascript:void(0)" onclick="window.location.reload(!0)"><span style="color:#fff;text-decoration:underline;cursor:pointer">🍭查看新品🍬</span></a></div></div><script>function registerServiceWorker(e){"localhost"!=window.location.hostname&&"serviceWorker"in navigator&&navigator.serviceWorker.register(`${e}?time=${(new Date).getTime()}`).then((function(e){e.onupdatefound=function(){var r=e.installing;r.onstatechange=function(){switch(r.state){case"installed":navigator.serviceWorker.controller?console.log("Updated Service Worker."):console.log("Service Worker Sucess!");break;case"redundant":console.log("The installing service worker became redundant.")}}}})).catch((function(e){console.error("Error during service worker registration:",e),"undefined"==typeof swinstallretry&&(swinstallretry=1,registerServiceWorker("/cw.js"))}))}registerServiceWorker("/cw.js")</script><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdnjs.cdn.storisinz.site/ajax/libs/font-awesome/6.0.0/css/all.min.css" media="print" onload='this.media="all"'><link rel="stylesheet" href="https://cdnjs.cdn.storisinz.site/ajax/libs/fancyapps-ui/4.0.31/fancybox.min.css" media="print" onload='this.media="all"'><script>var _hmt=_hmt||[];!function(){var e=document.createElement("script");e.src="https://hm.baidu.com/hm.js?59986c9d6715c06178a2b6e2f118f837";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)}()</script><script async src="https://www.googletagmanager.com/gtag/js?id=G-7MR59SK1DP"></script><script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-7MR59SK1DP")</script><script defer data-pjax="data-pjax" src="https://static.cloudflareinsights.com/beacon.min.js" data-cf-beacon="{"token": "dc155ba6949948e6a18a5298556d1b56"}"></script><script charset="UTF-8" id="LA_COLLECT" src="//sdk.51.la/js-sdk-pro.min.js"></script><script>LA.init({id:"K9WDMA2h2AfDg5GG",ck:"K9WDMA2h2AfDg5GG",autoTrack:!0,hashMode:!0})</script><script src="https://sdk.51.la/perf/js-sdk-perf.min.js" crossorigin="anonymous"></script><script>(new LingQue.Monitor).init({id:"K94JRCDsbHJJSjNs",sendSpaPv:!0})</script><script>const GLOBAL_CONFIG={root:"/",algolia:void 0,localSearch:void 0,translate:void 0,noticeOutdate:{limitDay:365,position:"top",messagePrev:"It has been",messageNext:"days since the last update, the content of the article may be outdated."},highlight:{plugin:"highlighjs",highlightCopy:!0,highlightLang:!0,highlightHeightLimit:230},copy:{success:"复制成功",error:"复制错误",noSupport:"浏览器不支持"},relativeDate:{homepage:!0,post:!0},runtime:"",date_suffix:{just:"刚刚",min:"分钟前",hour:"小时前",day:"天前",month:"个月前"},copyright:void 0,lightbox:"fancybox",Snackbar:void 0,source:{justifiedGallery:{js:"https://jsd.cdn.storisinz.site/npm/flickr-justified-gallery/dist/fjGallery.min.js",css:"https://jsd.cdn.storisinz.site/npm/flickr-justified-gallery/dist/fjGallery.min.css"}},isPhotoFigcaption:!1,islazyload:!0,isAnchor:!1}</script><script id="config-diff">var GLOBAL_CONFIG_SITE={title:"小康大佬的说说方案 ———— ispeak搭建教程",isPost:!0,isHome:!1,isHighlightShrink:!1,isToc:!0,postUpdate:"2025-01-04 12:30:30"}</script><noscript><style>#nav{opacity:1}.justified-gallery img{opacity:1}#post-meta time,#recent-posts time{display:inline!important}</style></noscript><script>(e=>{e.saveToLocal={set:function(e,t,o){if(0===o)return;const a=864e5*o,n={value:t,expiry:(new Date).getTime()+a};localStorage.setItem(e,JSON.stringify(n))},get:function(e){const t=localStorage.getItem(e);if(!t)return;const o=JSON.parse(t);if(!((new Date).getTime()>o.expiry))return o.value;localStorage.removeItem(e)}},e.getScript=e=>new Promise(((t,o)=>{const a=document.createElement("script");a.src=e,a.async=!0,a.onerror=o,a.onload=a.onreadystatechange=function(){const e=this.readyState;e&&"loaded"!==e&&"complete"!==e||(a.onload=a.onreadystatechange=null,t())},document.head.appendChild(a)})),e.activateDarkMode=function(){document.documentElement.setAttribute("data-theme","dark"),null!==document.querySelector('meta[name="theme-color"]')&&document.querySelector('meta[name="theme-color"]').setAttribute("content","#0d0d0d")},e.activateLightMode=function(){document.documentElement.setAttribute("data-theme","light"),null!==document.querySelector('meta[name="theme-color"]')&&document.querySelector('meta[name="theme-color"]').setAttribute("content","ffffff")};const t=saveToLocal.get("theme"),o=(new Date).getHours();void 0===t?o<=6||o>=18?activateDarkMode():activateLightMode():"light"===t?activateLightMode():activateDarkMode();const a=saveToLocal.get("aside-status");void 0!==a&&("hide"===a?document.documentElement.classList.add("hide-aside"):document.documentElement.classList.remove("hide-aside"));/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)&&document.documentElement.classList.add("apple")})(window)</script><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/element-ui@2.15.6/packages/theme-chalk/lib/index.css"><link rel="stylesheet" href="/custom2.css"><style id="themeColor"></style><style id="rightSide"></style><style id="transPercent"></style><style id="blurNum"></style><style id="settingStyle"></style><span id="fps"></span><style id="defineBg"></style><style id="menu_shadow"></style><script data-pjax src="/chatroom/chatroom.js"></script><script async src="/js/categorybar.js"></script><svg aria-hidden="true" style="position:absolute;overflow:hidden;width:0;height:0"><symbol id="icon-sun" viewBox="0 0 1024 1024"><path d="M960 512l-128 128v192h-192l-128 128-128-128H192v-192l-128-128 128-128V192h192l128-128 128 128h192v192z" fill="#FFD878" p-id="8420"></path><path d="M736 512a224 224 0 1 0-448 0 224 224 0 1 0 448 0z" fill="#FFE4A9" p-id="8421"></path><path d="M512 109.248 626.752 224H800v173.248L914.752 512 800 626.752V800h-173.248L512 914.752 397.248 800H224v-173.248L109.248 512 224 397.248V224h173.248L512 109.248M512 64l-128 128H192v192l-128 128 128 128v192h192l128 128 128-128h192v-192l128-128-128-128V192h-192l-128-128z" fill="#4D5152" p-id="8422"></path><path d="M512 320c105.888 0 192 86.112 192 192s-86.112 192-192 192-192-86.112-192-192 86.112-192 192-192m0-32a224 224 0 1 0 0 448 224 224 0 0 0 0-448z" fill="#4D5152" p-id="8423"></path></symbol><symbol id="icon-moon" viewBox="0 0 1024 1024"><path d="M611.370667 167.082667a445.013333 445.013333 0 0 1-38.4 161.834666 477.824 477.824 0 0 1-244.736 244.394667 445.141333 445.141333 0 0 1-161.109334 38.058667 85.077333 85.077333 0 0 0-65.066666 135.722666A462.08 462.08 0 1 0 747.093333 102.058667a85.077333 85.077333 0 0 0-135.722666 65.024z" fill="#FFB531" p-id="11345"></path><path d="M329.728 274.133333l35.157333-35.157333a21.333333 21.333333 0 1 0-30.165333-30.165333l-35.157333 35.157333-35.114667-35.157333a21.333333 21.333333 0 0 0-30.165333 30.165333l35.114666 35.157333-35.114666 35.157334a21.333333 21.333333 0 1 0 30.165333 30.165333l35.114667-35.157333 35.157333 35.157333a21.333333 21.333333 0 1 0 30.165333-30.165333z" fill="#030835" p-id="11346"></path></symbol></svg><script defer src="/sw-dom.js"></script><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-swiper/lib/swiper.min.css" media="print" onload='this.media="all"'><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-swiper/lib/swiperstyle.css" media="print" onload='this.media="all"'><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-tag-plugins-plus@latest/lib/assets/font-awesome-animation.min.css" media="defer" onload='this.media="all"'><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-tag-plugins-plus@latest/lib/tag_plugins.css" media="defer" onload='this.media="all"'><script src="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-tag-plugins-plus@latest/lib/assets/carousel-touch.js"></script><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-wowjs/lib/animate.min.css" media="print" onload='this.media="screen"'><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/hexo-filter-gitcalendar/lib/gitcalendar.css" media="print" onload='this.media="all"'><meta name="generator" content="Hexo 6.3.0"><link rel="alternate" href="/atom.xml" title="汐塔魔法屋" type="application/atom+xml"></head><body><div id="loading-box" onclick="document.getElementById("loading-box").classList.add("loaded")"><div class="loading-bg"><div class="loading-img"></div><div class="loading-image-dot"></div></div></div><div id="web_bg"></div><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="/img/avatar.png" onerror='onerror=null,src="/assets/r1.jpg"' alt="avatar"></div><div class="sidebar-site-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">45</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">14</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">5</div></a></div><hr><div class="menus_items"><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon--article"></use></svg> <span class="menu_word" style="font-size:17px">文章</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" href="/archives/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-guidang1"></use></svg> <span class="menu_word" style="font-size:17px">归档</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/tags/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-sekuaibiaoqian"></use></svg> <span class="menu_word" style="font-size:17px">标签</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/categories/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-fenlei"></use></svg> <span class="menu_word" style="font-size:17px">分类</span></a></li></ul></div><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-shejiaoxinxi"></use></svg> <span class="menu_word" style="font-size:17px">友链</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" href="/fcircle/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pengyouquan"></use></svg> <span class="menu_word" style="font-size:17px">朋友圈</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/comments/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-liuyan"></use></svg> <span class="menu_word" style="font-size:17px">留言板</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/link/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-lianjie"></use></svg> <span class="menu_word" style="font-size:17px">友人帐</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/bbs/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-laba"></use></svg> <span class="menu_word" style="font-size:17px">哔哔广场</span></a></li></ul></div><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-xiuxian"></use></svg> <span class="menu_word" style="font-size:17px">休闲</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" href="/games/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-Swf"></use></svg> <span class="menu_word" style="font-size:17px">小游戏</span></a></li></ul></div><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-guanyuwomen"></use></svg> <span class="menu_word" style="font-size:17px">关于</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" href="/essay/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-duanwenbentuijian"></use></svg> <span class="menu_word" style="font-size:17px">即刻短文</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://umami.status.sinzmise.top/share/tliXWHHcZzGWhRgI/blog.sinzmise.top"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-tongji"></use></svg> <span class="menu_word" style="font-size:17px">站点统计</span></a></li></ul></div><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-chongdonglogo"></use></svg> <span class="menu_word" style="font-size:17px">虫洞</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://www.travellings.cn/go-by-clouds.html"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-huoche"></use></svg> <span class="menu_word" style="font-size:17px">开往</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://travel.moe/go.html"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-meng"></use></svg> <span class="menu_word" style="font-size:17px">异次元之旅</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://storeweb.cn/s/1707"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-shangdian"></use></svg> <span class="menu_word" style="font-size:17px">个站商店</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://bokelu.suijiboke.gs/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-boke"></use></svg> <span class="menu_word" style="font-size:17px">博客录</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://blogscn.fun/random.html"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-data-input"></use></svg> <span class="menu_word" style="font-size:17px">笔墨迹</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://www.blogsclub.org/go"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-b_x"></use></svg> <span class="menu_word" style="font-size:17px">BlogsClub</span></a></li></ul></div></div></div></div><div class="post h-entry" id="body-wrap"><header class="post-bg nav-fixed nav-visible" id="page-header"><nav id="nav"><span id="blog_name"><a id="site-name" href="/">汐塔魔法屋</a></span><div id="menus"><div class="menus_items"><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon--article"></use></svg> <span class="menu_word" style="font-size:17px">文章</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" href="/archives/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-guidang1"></use></svg> <span class="menu_word" style="font-size:17px">归档</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/tags/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-sekuaibiaoqian"></use></svg> <span class="menu_word" style="font-size:17px">标签</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/categories/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-fenlei"></use></svg> <span class="menu_word" style="font-size:17px">分类</span></a></li></ul></div><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-shejiaoxinxi"></use></svg> <span class="menu_word" style="font-size:17px">友链</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" href="/fcircle/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pengyouquan"></use></svg> <span class="menu_word" style="font-size:17px">朋友圈</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/comments/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-liuyan"></use></svg> <span class="menu_word" style="font-size:17px">留言板</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/link/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-lianjie"></use></svg> <span class="menu_word" style="font-size:17px">友人帐</span></a></li><li><a class="site-page child faa-parent animated-hover" href="/bbs/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-laba"></use></svg> <span class="menu_word" style="font-size:17px">哔哔广场</span></a></li></ul></div><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-xiuxian"></use></svg> <span class="menu_word" style="font-size:17px">休闲</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" href="/games/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-Swf"></use></svg> <span class="menu_word" style="font-size:17px">小游戏</span></a></li></ul></div><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-guanyuwomen"></use></svg> <span class="menu_word" style="font-size:17px">关于</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" href="/essay/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-duanwenbentuijian"></use></svg> <span class="menu_word" style="font-size:17px">即刻短文</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://umami.status.sinzmise.top/share/tliXWHHcZzGWhRgI/blog.sinzmise.top"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-tongji"></use></svg> <span class="menu_word" style="font-size:17px">站点统计</span></a></li></ul></div><div class="menus_item"><a class="site-page group faa-parent animated-hover hide" href="javascript:void(0);"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-chongdonglogo"></use></svg> <span class="menu_word" style="font-size:17px">虫洞</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://www.travellings.cn/go-by-clouds.html"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-huoche"></use></svg> <span class="menu_word" style="font-size:17px">开往</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://travel.moe/go.html"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-meng"></use></svg> <span class="menu_word" style="font-size:17px">异次元之旅</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://storeweb.cn/s/1707"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-shangdian"></use></svg> <span class="menu_word" style="font-size:17px">个站商店</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://bokelu.suijiboke.gs/"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-boke"></use></svg> <span class="menu_word" style="font-size:17px">博客录</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://blogscn.fun/random.html"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-data-input"></use></svg> <span class="menu_word" style="font-size:17px">笔墨迹</span></a></li><li><a class="site-page child faa-parent animated-hover" target="_blank" rel="noopener" href="https://www.blogsclub.org/go"><svg class="menu_icon faa-tada" aria-hidden="true" style="width:1.3em;height:1.3em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-pjh-b_x"></use></svg> <span class="menu_word" style="font-size:17px">BlogsClub</span></a></li></ul></div></div><center id="name-container"><a id="page-name" href="javascript:scrollToTop()">PAGE_NAME</a></center><div id="nav-right"><div id="search-button"><a class="search faa-parent animated-hover" title="检索站内任何你想要的信息"><svg class="faa-tada icon" style="height:24px;width:24px;fill:currentColor;position:relative;top:6px" aria-hidden="true"><use xlink:href="#icon-valentine_-search-love-find-heart"></use></svg> <span>搜索</span></a></div><a class="meihua faa-parent animated-hover" onclick="toggleWinbox()" title="美化设置-自定义你的风格" id="meihua-button"><svg class="faa-tada icon" style="height:26px;width:26px;fill:currentColor;position:relative;top:8px" aria-hidden="true"><use xlink:href="#icon-tupian1"></use></svg></a><a class="sun_moon faa-parent animated-hover" onclick="switchNightMode()" title="浅色和深色模式转换" id="nightmode-button"><svg class="faa-tada" style="height:25px;width:25px;fill:currentColor;position:relative;top:7px" viewBox="0 0 1024 1024"><use id="modeicon" xlink:href="#icon-moon"></use></svg></a><div id="toggle-menu"><a><i class="fas fa-bars fa-fw"></i></a></div></div></div></nav><div id="post-info"><div id="post-firstinfo"><div class="meta-firstline"><span class="article-meta tags"><a class="article-meta__tags" href="/tags/%E7%AB%99%E7%82%B9%E6%8A%98%E8%85%BE/" tabindex="-1" itemprop="url"><span><i class="anzhiyufont anzhiyu-icon-hashtag"></i> 站点折腾</span></a><a class="article-meta__tags" href="/tags/%E9%A1%B5%E9%9D%A2%E9%AD%94%E6%94%B9/" tabindex="-1" itemprop="url"><span><i class="anzhiyufont anzhiyu-icon-hashtag"></i> 页面魔改</span></a></span></div></div><h1 class="post-title p-name">小康大佬的说说方案 ———— ispeak搭建教程</h1><div id="post-meta"><div class="meta-firstline"><span class="post-meta-date"><svg class="meta_icon post-meta-icon" style="width:25px;height:25px;position:relative;top:10px"><use xlink:href="#icon-rili"></use></svg><span class="post-meta-label">发表于</span> <time class="post-meta-date-created dt-published" datetime="2023-01-13T21:01:37.000Z" title="发表于 2023-01-13 21:01:37">2023-01-13</time><span class="post-meta-separator"></span> <svg class="meta_icon post-meta-icon" style="width:18px;height:18px;position:relative;top:5px"><use xlink:href="#icon-gengxin1"></use></svg><span class="post-meta-label">更新于</span><time class="post-meta-date-updated dt-updated" datetime="2025-01-04T12:30:30.077Z" title="更新于 2025-01-04 12:30:30">2025-01-04</time></span><span class="post-meta-categories"><span class="post-meta-separator"></span> <svg class="meta_icon post-meta-icon" style="width:18px;height:18px;position:relative;top:5px"><use xlink:href="#icon-biaoqian"></use></svg><a class="post-meta-categories p-category" href="/categories/%E7%AB%99%E7%82%B9%E6%8A%98%E8%85%BE/">站点折腾</a></span></div><div class="meta-secondline"><span class="post-meta-separator"></span> <span class="post-meta-wordcount"><svg class="meta_icon post-meta-icon" style="width:25px;height:25px;position:relative;top:8px"><use xlink:href="#icon-charuword"></use></svg><span class="post-meta-label">字数总计:</span><span class="word-count">5646</span><span class="post-meta-separator"></span> <svg class="meta_icon post-meta-icon" style="width:20px;height:20px;position:relative;top:5px"><use xlink:href="#icon-shizhong"></use></svg><span class="post-meta-label">阅读时长:</span><span>28分钟</span></span><span class="post-meta-separator"></span> <span class="post-meta-pv-cv" data-flag-title="小康大佬的说说方案 ———— ispeak搭建教程"><svg class="meta_icon post-meta-icon" style="width:25px;height:25px;position:relative;top:5px"><use xlink:href="#icon-eye"></use></svg><span class="post-meta-label">阅读量:</span><span id="busuanzi_value_page_pv"><i class="fa-solid fa-spinner fa-spin"></i></span></span><span class="post-meta-separator"></span> <span class="post-meta-position" title="作者IP属地为广东潮州"><svg class="meta_icon post-meta-icon" style="width:18px;height:18px;position:relative;top:5px"><use xlink:href="#icon-pjh-diqu"></use></svg>广东潮州</span></div></div></div><section class="main-hero-waves-area waves-area"><svg class="waves-svg" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" viewBox="0 24 150 28" preserveAspectRatio="none" shape-rendering="auto"><defs><path id="gentle-wave" d="M-160 44c30 0 58-18 88-18s58 18 88 18 58-18 88-18 58 18 88 18v44h-352Z"></path></defs><g class="parallax"><use href="#gentle-wave" x="48" y="0"></use><use href="#gentle-wave" x="48" y="3"></use><use href="#gentle-wave" x="48" y="5"></use><use href="#gentle-wave" x="48" y="7"></use></g></svg></section><div id="post-top-cover"><img class="nolazyload" id="post-top-bg" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_GVRhG42nuu.1g9uz8t24io0.webp"></div></header><main class="layout" id="content-inner"><div id="post"><article class="post-content e-content" id="article-container"><h1>前言</h1><p>搞ispeak时发现ispeak更新,能自定义评论了,也就是说我之前写的<a target="_blank" rel="noopener" href="https://blog.xsnet.eu.org/posts/43224/">ispeak教程</a>失效了<br>没办法我只能重新写了这篇教程</p><h1>教程</h1><h2 id="后端部署">后端部署</h2><h3 id="配置数据库">配置数据库</h3><div class="note info simple"><p>以下内容来自:<a target="_blank" rel="noopener" href="https://discuss.js.org/guide/Get-MongoDB-DataBase.html">https://discuss.js.org/guide/Get-MongoDB-DataBase.html</a></p></div><ol><li>注册<a target="_blank" rel="noopener" href="https://www.mongodb.com/cloud/atlas/register">MongoDB</a>账号,注册完成后会提示你创建一个组织,并且输入一个项目昵称,选择编程语言(不选也可以),随后点击右下角的 <code>Continue</code>(继续),如果没有可以跟如下图执行,点击 <code>Create an Organization</code>(创建组织)<br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Organizations-Home.png" alt="Organizations-Home"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Register-Organizations.png" alt="Register-Organizations"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Create-Organization.png" alt="Create-Organization"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/New-Project.png" alt="New-Project"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Project-Name.png" alt="Project-Name"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Create-Project.png" alt="Create-Project"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Build-Database.png" alt="Build-Database"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Select-Free.png" alt="Select-Free"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/AWS-N.Virginia.png" alt="AWS-N.Virginia"></li><li>选择免费的共享数据库,随后会跳出选择地区(选择离你服务端近的即可),点击 <code>Create Cluster</code>创建</li><li>随后您需要创建数据库用户,输入用户名和密码,继续向下滚动就是添加 IP 地址,最后点击下方的 <code>Finish and Close</code>(完成并关闭)按钮</li></ol><div class="note warning simple"><p><strong>注意</strong><br>服务器部署,则填服务器公网 IP<br><code>无服务器(ServerLess)</code>ServerLess 一般都是动态 IP,你无法得到一个固定 IP,我们建议填写 <code>0.0.0.0</code></p></div><p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Add-IP.png" alt="Add IP"></p><ol start="4"><li>稍作等待创建好数据库即可,随后点击 <code>Connect</code>(连接),点击选择 <code>Connect you application</code>(连接应用程序),然后复制连接数据库字符串</li></ol><div class="note warning simple"><p><strong>注意</strong><br>需要将字符串中的 <code><password></code>替换为您在第三步创建的数据库用户密码,修改 <code>myFirstDatabase</code>为你想要的数据库名称例如:<code>Discuss</code></p></div><p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Connect.png" alt="Connect"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://discuss.js.org/img/guide/Get-MongoDB-DataBase/Get-Connect.png" alt="Get Connect"></p><h3 id="部署kkapi">部署kkapi</h3><div class="tabs" id="部署kkapi"><ul class="nav-tabs"><li class="tab active"><button type="button" data-href="#部署kkapi-1">Vercel部署(推荐)</button></li><li class="tab"><button type="button" data-href="#部署kkapi-2">服务器部署</button></li><li class="tab"><button type="button" data-href="#部署kkapi-3">docker 部署</button></li></ul><div class="tab-contents"><div class="tab-item-content active" id="部署kkapi-1"><ol><li>点击下方按钮,跳转至 Vercel 进行部署。<br><a target="_blank" rel="noopener" href="https://vercel.com/new/clone?repository-url=https://github.com/kkfive/kkapi-open/tree/vercel"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://vercel.com/button" alt="部署到Vercel"></a></li><li>配置环境变量:<br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_wwcTzH8isA.10hmhosvut28.webp" alt="msedge_wwcTzH8isA"><br>环境变量可能随项目的迭代而增加必填的环境变量,具体请参考<a target="_blank" rel="noopener" href="https://kkapi.js.org/reference/kkapi/environment.html">官网 —— kkapi环境变量</a></li><li>重新部署<br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_owqMifozPi.37vcfu5vfpm0.webp" alt="msedge_owqMifozPi"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_5WUBTLL0NZ.1nl1z1a7qiqo.webp" alt="msedge_5WUBTLL0NZ"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_mMprAjHb9O.3b2527plrfg.webp" alt="msedge_mMprAjHb9O"></li><li>绑定域名(建议)<br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_miAwQcdm9f.3htnm9dlllq0.webp" alt="msedge_miAwQcdm9f"></li><li>初始化账户<br>浏览器访问:<br>你刚刚复制的地址/api/user/init?userName=你想设置的账户名<br>如果不指定用户名则自动将账户名设置为admin</li></ol><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div><div class="tab-item-content" id="部署kkapi-2"><div class="note info simple"><p>以下内容来自:<a target="_blank" rel="noopener" href="https://kkapi.js.org/guide/setup/deploy.html#%E7%AC%AC%E4%BA%8C%E7%A7%8D%E9%83%A8%E7%BD%B2%E5%A7%BF%E5%8A%BF%EF%BC%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%83%A8%E7%BD%B2">https://kkapi.js.org/guide/setup/deploy.html#第二种部署姿势:服务器部署</a></p></div>克隆源代码<p>git clone <a target="_blank" rel="noopener" href="https://ghproxy.com/https://github.com/kkfive/kkapi-open.git">https://ghproxy.com/https://github.com/kkfive/kkapi-open.git</a></p><ol><li><p>安装依赖<br><code>yarn install</code><br>如果没有<code>yarn</code>则先允许<code>npm i yarn -g</code>进行安装</p></li><li><p>安装 pm2</p></li></ol><p><code>npm i pm2 -g</code></p><ol start="3"><li>编译项目</li></ol><p><code>yarn build</code></p><ol start="4"><li>配置环境变量</li></ol><p>在项目目录新建文件<code>local.env</code>,将环境变量写入其中即可。例如:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">PORT=3000</span><br><span class="line">DATABASE_URL=mongodb://127.0.0.1:27017/kkpaiopen?authSource=admin</span><br><span class="line">DATABASE_USER=root</span><br><span class="line">DATABASE_PASSWORD=root</span><br><span class="line"># 加密密钥 测试</span><br><span class="line">SECRETKEY=xxxxxxxxxxxxxxx</span><br></pre></td></tr></table></figure><p>其中 PORT 表示启动的端口</p><ol start="5"><li>启动项目</li></ol><p><code>pm2 start pm2.json</code></p><p>然后通过命令<code>curl http://127.0.0.1:3000/api/user/init</code>检查是否允许成功</p><p>image-20220227101623911</p><p>更新项目</p><p>进入项目并执行一下命令</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">git pull</span><br><span class="line">yarn build</span><br><span class="line">pm2 restart pm2.json</span><br></pre></td></tr></table></figure><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div><div class="tab-item-content" id="部署kkapi-3"><p>尚未写完</p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div></div><h3 id="部署kkadmin">部署kkadmin</h3><p>介绍:kkadmin是kkapi的后台,方便发布说说</p><div class="note success simple"><p>以下部署姿势你只需要任选其一即可,无需全部部署。</p></div><div class="tabs" id="部署kkadmin"><ul class="nav-tabs"><li class="tab"><button type="button" data-href="#部署kkadmin-1">Vercel部署</button></li><li class="tab active"><button type="button" data-href="#部署kkadmin-2">CF pages部署(推荐)</button></li><li class="tab"><button type="button" data-href="#部署kkadmin-3">其他环境部署</button></li></ul><div class="tab-contents"><div class="tab-item-content" id="部署kkadmin-1"><div class="note warning simple"><p>由于构建 kkadmin 时部分依赖文件需要 nodejs16 及以上版本才可以安装,因此不能将源代码扔给 vercel 进行构建。<br>所以只能够利用 GitHub actions 构建完成后将产物扔给 vercel 进行使用</p></div>1. Fork这个项目:https://github.com/kkfive/kkadmin-open/<p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/StarWEB890/TuChuang@master/images/msedge_6HMaGfN000.1csf0rae8okg.webp" alt="msedge_6HMaGfN000"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/StarWEB890/TuChuang@master/images/msedge_UPsCgr2okQ.7k0gi7brxoc0.webp" alt="msedge_UPsCgr2okQ"><br>2. 配置变量<br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/StarWEB890/TuChuang@master/images/msedge_ktuszZjpej.7ftbduod9uc0.webp" alt="msedge_ktuszZjpej"></p><p>VITE_GLOB_API_URL(必选)<br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/StarWEB890/TuChuang@master/images/msedge_wqMbtdCCon.26m2h3r94d7k.webp" alt="msedge_wqMbtdCCon"></p><ol start="3"><li>构建actions</li></ol><p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/StarWEB890/TuChuang@master/images/msedge_yymiOm8Kek.23xjzofdum3.webp" alt="msedge_yymiOm8Kek"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/StarWEB890/TuChuang@master/images/msedge_4awdNaFJGz.1rdq0mxyfhog.webp" alt="msedge_4awdNaFJGz"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/StarWEB890/TuChuang@master/images/msedge_2uYyc6Qh4I.4p3ngtkhmh00.webp" alt="msedge_2uYyc6Qh4I"></p><ol start="4"><li>部署到Vercel<br>复制下面这个网址</li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://vercel.com/new/import?s=https://github.com/SinInno/kkadmin-open/tree/vercel</span><br></pre></td></tr></table></figure><p>并将“SinInno”改为你Github的用户名后访问你刚刚修改的网址<br>PS:如果你Fork的这个项目有改Repository name,那么请将上面的“kkapi-open”改为你这个项目的Repository name</p><p>然后直接部署</p><p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/StarWEB890/TuChuang@master/images/msedge_GJbsx9xoOw.8zgxw8og644.webp" alt="msedge_GJbsx9xoOw"></p><p>部署完成后点“Go to Dashboard”,并点左上角的“Visit”</p><p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/StarWEB890/TuChuang@master/images/msedge_Lyo0nIvIqF.d4g2uabkljk.webp" alt="msedge_Lyo0nIvIqF"></p><p>账号输入你之前初始化账户的账户名<br>密码请输入默认密码:123456<br>登入面板后请更改默认密码!</p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div><div class="tab-item-content active" id="部署kkadmin-2"><div class="note info simple"><p>如果你已经在 GitHub actions 部署了,那么 cf pages 部署时也可以选择 vercel 进行部署。也可以使用主干分支进行打包部署。<br>接下来的教程以使用 cf pages 构建为例介绍</p></div>1. fork项目(可直接fork) 2. 导入项目<p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/msedge_1bV5Of8ioS.xtthsj95ytc.webp" alt="msedge_1bV5Of8ioS"><br><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/msedge_CcnQ68DBFQ.2q893j8w72k0.webp" alt="msedge_CcnQ68DBFQ"></p><ol start="4"><li>配置环境变量</li></ol><p>环境变量参考:<a target="_blank" rel="noopener" href="https://kkapi.js.org/reference/kkadmin/environment.html">官网 —— kkadmin环境变量</a></p><p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://file.acs.pw/picGo/2022/02/27/20220227113526.png" alt="配置环境变量"></p><ol start="5"><li>等待构建完成后即可</li></ol><p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://file.acs.pw/picGo/2022/02/27/20220227114643.png" alt="构建中"></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div><div class="tab-item-content" id="部署kkadmin-3"><p>其他环境部署基本可以直接使用 GitHub 构建后的 vercel 进行,毕竟只是 HTML</p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div></div><h2 id="前端配置">前端配置</h2><h3 id="进入后台,查看个人ID">进入后台,查看个人ID</h3><p><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://file.acs.pw/picGo/2022/02/27/20220227131425.png" alt="查看个人ID"></p><h3 id="前端引入">前端引入</h3><div class="note info simple"><p>ipseak 使用 marked 依赖和 highlight 依赖,为了减少打包体积,并没有将该依赖打包,因此需要使用 cdn 进行外部引入。</p></div><div class="tabs" id="前端引入ispeak"><ul class="nav-tabs"><li class="tab"><button type="button" data-href="#前端引入ispeak-1">使用Waline</button></li><li class="tab active"><button type="button" data-href="#前端引入ispeak-2">使用Twikoo</button></li><li class="tab"><button type="button" data-href="#前端引入ispeak-3">使用Discuss</button></li><li class="tab"><button type="button" data-href="#前端引入ispeak-4">使用Artalk</button></li></ul><div class="tab-contents"><div class="tab-item-content" id="前端引入ispeak-1"><ol><li>在博客目录下运行<code>hexo new page speaks</code></li><li>编辑[blogroot]\source\speaks\<a target="_blank" rel="noopener" href="http://index.md">index.md</a>,将里面的内容替换成:</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: 说说</span><br><span class="line">comments: false</span><br><span class="line"><span class="section">aside: false</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line">{% raw %}</span><br><span class="line"></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">style</span>></span></span></span><br><span class="line"> .speak-footer,.wl-power{</span><br><span class="line"><span class="code"> display:none;</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"></style></span></span><br><span class="line"><span class="code"><div id="ispeak"></div></span></span><br><span class="line"><span class="code"><link</span></span><br><span class="line"><span class="code"> rel="stylesheet"</span></span><br><span class="line"><span class="code"> href="https://cdn.staticfile.org/highlight.js/10.6.0/styles/atom-one-dark.min.css"</span></span><br><span class="line"><span class="code">/></span></span><br><span class="line"><span class="code"><link</span></span><br><span class="line"><span class="code"> rel="stylesheet"</span></span><br><span class="line"><span class="code"> href="https://npm.elemecdn.com/ispeak@4.4.0/style.css"</span></span><br><span class="line"><span class="code">/></span></span><br><span class="line"><span class="code"><script src="https://cdn.staticfile.org/highlight.js/10.6.0/highlight.min.js"></script></span></span><br><span class="line"><span class="code"><script src="https://cdn.staticfile.org/marked/2.0.0/marked.min.js"></script></span></span><br><span class="line"><span class="code"><!-- CSS --></span></span><br><span class="line"><span class="code"><link href="https://unpkg.com/@waline/client/dist/waline.css" rel="stylesheet" /></span></span><br><span class="line"><span class="code"><script src="https://unpkg.com/@waline/client@v2/dist/waline.js"></script></span></span><br><span class="line"><span class="code"><script></span></span><br><span class="line"><span class="code"> function load_ispeak() {</span></span><br><span class="line"><span class="code"> setTimeout(function() {</span></span><br><span class="line"><span class="code"> var HEAD = document.getElementsByTagName('head')[0] || document.documentElement;</span></span><br><span class="line"><span class="code"> var src = 'https://cdn1.tianli0.top/npm/ispeak/ispeak.umd.js'</span></span><br><span class="line"><span class="code"> var script = document.createElement('script')</span></span><br><span class="line"><span class="code"> script.setAttribute('type','text/javascript')</span></span><br><span class="line"><span class="code"> script.onload = function() {</span></span><br><span class="line"><span class="code"> pjax_ispeak()</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> script.setAttribute('src', src)</span></span><br><span class="line"><span class="code"> HEAD.appendChild(script)</span></span><br><span class="line"><span class="code"> }, 1);</span></span><br><span class="line"><span class="code"> };</span></span><br><span class="line"><span class="code"> function pjax_ispeak() {</span></span><br><span class="line"><span class="code"> if(!document.querySelectorAll("#ispeak")[0])return;</span></span><br><span class="line"><span class="code"> ispeak</span></span><br><span class="line"><span class="code"> .init({</span></span><br><span class="line"><span class="code"> el: '#ispeak',//不用改</span></span><br><span class="line"><span class="code"> api: '', //填写你kkapi地址(不是kkadmin后台地址!)</span></span><br><span class="line"><span class="code"> author: '',//填写个人ID</span></span><br><span class="line"><span class="code"> pageSize: 10,//每页speak显示的条数(建议保持默认,除非你要魔改css)</span></span><br><span class="line"><span class="code"> loading_img: 'https://bu.dusays.com/2021/03/04/d2d5e983e2961.gif',//加载动画</span></span><br><span class="line"><span class="code"> comment: function (speak) {</span></span><br><span class="line"><span class="code"> const { _id, title, content } = speak</span></span><br><span class="line"><span class="code"> const contentSub = content.substring(0, 30)</span></span><br><span class="line"><span class="code"> Waline.init({</span></span><br><span class="line"><span class="code"> el: '.ispeak-comment',//不用改</span></span><br><span class="line"><span class="code"> serverURL: '',//填写你的Waline服务端地址</span></span><br><span class="line"><span class="code"> path:'/speak/info.html?q=' + _id,//不用改,除非你将上面的speak改为别的文件夹昵称</span></span><br><span class="line"><span class="code"> //后面可按照https://waline.js.org/reference/client/props.html 修改(必须放在path后面!以下为一个例子)</span></span><br><span class="line"><span class="code"> emoji: ["//unpkg.com/@waline/emojis@1.0.1/weibo","https://emoji.shojo.cn/bili/src/小黄脸","//unpkg.com/@waline/emojis@1.0.1/bilibili","https://emoji.shojo.cn/bili/src/枕边童话","https://emoji.shojo.cn/bili/src/咩栗","https://emoji.shojo.cn/bili/src/呜米","https://emoji.shojo.cn/bili/src/进击的冰糖","https://emoji.shojo.cn/bili/src/冰糖IO 蜕变·闪耀","https://emoji.shojo.cn/bili/src/多多poi","https://emoji.shojo.cn/bili/src/穆小泠","https://emoji.shojo.cn/bili/src/早稻叽"],// 表情包大全</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> load_ispeak();</span></span><br><span class="line"><span class="code"> document.addEventListener('pjax:complete', function () {</span></span><br><span class="line"><span class="code"> pjax_ispeak();</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"></script></span></span><br><span class="line"><span class="code"><!--建议标注末尾链接--></span></span><br><span class="line"><span class="code"><p style="width: 100%;text-align: end;font-size: .75em;color: #999;margin-top: 1em;">Powered by <a href="https://www.antmoe.com/speak/"><strong>iSpeak</strong></a> | Comment by <a href="https://discuss.js.org/"><strong>Waline</strong></a></p> </span></span><br><span class="line"><span class="code">{% endraw %}</span></span><br></pre></td></tr></table></figure><ol start="3"><li>在[blogroot]\source\speaks\<a target="_blank" rel="noopener" href="http://xn--info-494f001gunk.md">下新建info.md</a>,内容为下:</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: Speak</span><br><span class="line">aside: false</span><br><span class="line">comments: false</span><br><span class="line"><span class="section">description: 欢迎来到SinzMise的日记,快来看看SinzMise分享了什么! # speak介绍</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line"><!-- CSS --></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"stylesheet"</span> <span class="attr">href</span>=<span class="string">"https://cdn.staticfile.org/highlight.js/10.6.0/styles/atom-one-dark.min.css"</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">link</span> <span class="attr">href</span>=<span class="string">"https://unpkg.com/@waline/client/dist/waline.css"</span> <span class="attr">rel</span>=<span class="string">"stylesheet"</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">'content'</span>></span></span></span><br><span class="line"> <span class="language-xml"><span class="tag"><<span class="name">img</span> <span class="attr">src</span>=<span class="string">'https://bu.dusays.com/2022/05/01/626e88f349943.gif'</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line">{% btn '/speaks/',查看全部,far fa-hand-point-right,block center blue larger %}</span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">hr</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">'ispeak-comment'</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line"><!-- JS --></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://unpkg.com/@waline/client@v2/dist/waline.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://unpkg.com/marked@4.0.18/marked.min.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://cdn.staticfile.org/highlight.js/10.6.0/highlight.min.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span>></span></span></span><br><span class="line"> const searchParams = new URLSearchParams(window.location.search);</span><br><span class="line"> const speakId = searchParams.get('q');</span><br><span class="line"> const path = window.location.pathname;</span><br><span class="line"> const apiURL = 'https://(你的api地址)/api/ispeak';</span><br><span class="line"> const markedRender = (body, loading<span class="emphasis">_img='https://bu.dusays.com/2022/05/01/626e88f349943.gif') => {</span></span><br><span class="line"><span class="emphasis"> const renderer = {</span></span><br><span class="line"><span class="emphasis"> image(href, title, text) {</span></span><br><span class="line"><span class="emphasis"> return `<span class="language-xml"><span class="language-javascript"><a href=<span class="string">"${href}"</span> target=<span class="string">"_blank"</span> data-fancybox=<span class="string">"group"</span> <span class="keyword">class</span>=<span class="string">"fancybox"</span>></span></span></span></span><br><span class="line"><span class="emphasis"> <span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag"><<span class="name">img</span> <span class="attr">speak-src</span>=<span class="string">"${href}"</span> <span class="attr">src</span>=<span class="string">${loading_img}</span> <span class="attr">alt</span>=<span class="string">'${text}'</span>></span></span></span></span></span></span><br><span class="line"><span class="emphasis"> <span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag"></<span class="name">a</span>></span></span></span></span>`</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> marked.setOptions({</span></span><br><span class="line"><span class="emphasis"> renderer: new marked.Renderer(),</span></span><br><span class="line"><span class="emphasis"> highlight: function (code) {</span></span><br><span class="line"><span class="emphasis"> if (hljs) {</span></span><br><span class="line"><span class="emphasis"> return hljs.highlightAuto(code).value</span></span><br><span class="line"><span class="emphasis"> } else {</span></span><br><span class="line"><span class="emphasis"> return code</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> },</span></span><br><span class="line"><span class="emphasis"> pedantic: false,</span></span><br><span class="line"><span class="emphasis"> gfm: true,</span></span><br><span class="line"><span class="emphasis"> tables: true,</span></span><br><span class="line"><span class="emphasis"> breaks: true,</span></span><br><span class="line"><span class="emphasis"> sanitize: false,</span></span><br><span class="line"><span class="emphasis"> smartLists: true,</span></span><br><span class="line"><span class="emphasis"> smartypants: false,</span></span><br><span class="line"><span class="emphasis"> xhtml: false</span></span><br><span class="line"><span class="emphasis"> })</span></span><br><span class="line"><span class="emphasis"> marked.use({ renderer })</span></span><br><span class="line"><span class="emphasis"> return marked.parse(body)</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> fetch(`${apiURL}/get/${speakId}`)</span></span><br><span class="line"><span class="emphasis"> .then(response => response.json())</span></span><br><span class="line"><span class="emphasis"> .then(res => {</span></span><br><span class="line"><span class="emphasis"> const data = res.data;</span></span><br><span class="line"><span class="emphasis"> if(data){</span></span><br><span class="line"><span class="emphasis"> const {title,content} = data;</span></span><br><span class="line"><span class="emphasis"> const contentSub = content.substring(0, 30);</span></span><br><span class="line"><span class="emphasis"> document.querySelector('.content').innerHTML = markedRender(content);</span></span><br><span class="line"><span class="emphasis"> if(title){</span></span><br><span class="line"><span class="emphasis"> document.title = title;</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> Waline.init({</span></span><br><span class="line"><span class="emphasis"> el: '.ispeak-comment',//不用改</span></span><br><span class="line"><span class="emphasis"> serverURL: '',//填写你的Waline服务端地址</span></span><br><span class="line"><span class="emphasis"> path: path + '?q=' + _</span>id,//不用改</span><br><span class="line"><span class="code"> //后面可按照https://waline.js.org/reference/client/props.html 修改(必须放在path后面!以下为一个例子)</span></span><br><span class="line"><span class="code"> emoji: ["//unpkg.com/@waline/emojis@1.0.1/weibo","https://emoji.shojo.cn/bili/src/小黄脸","//unpkg.com/@waline/emojis@1.0.1/bilibili","https://emoji.shojo.cn/bili/src/枕边童话","https://emoji.shojo.cn/bili/src/咩栗","https://emoji.shojo.cn/bili/src/呜米","https://emoji.shojo.cn/bili/src/进击的冰糖","https://emoji.shojo.cn/bili/src/冰糖IO 蜕变·闪耀","https://emoji.shojo.cn/bili/src/多多poi","https://emoji.shojo.cn/bili/src/穆小泠","https://emoji.shojo.cn/bili/src/早稻叽"],// 表情包大全</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"></script></span></span><br></pre></td></tr></table></figure><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div><div class="tab-item-content active" id="前端引入ispeak-2"><ol><li>在博客目录下运行<code>hexo new page speaks</code></li><li>编辑[blogroot]\source\speaks\<a target="_blank" rel="noopener" href="http://index.md">index.md</a>,将里面的内容替换成:</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: 说说</span><br><span class="line">comments: false</span><br><span class="line"><span class="section">aside: false</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line">{% raw %}</span><br><span class="line"></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">style</span>></span></span></span><br><span class="line"> .speak-footer,.tk-footer{</span><br><span class="line"><span class="code"> display:none;</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"></style></span></span><br><span class="line"><span class="code"><div id="ispeak"></div></span></span><br><span class="line"><span class="code"><link</span></span><br><span class="line"><span class="code"> rel="stylesheet"</span></span><br><span class="line"><span class="code"> href="https://cdn.staticfile.org/highlight.js/10.6.0/styles/atom-one-dark.min.css"</span></span><br><span class="line"><span class="code">/></span></span><br><span class="line"><span class="code"><link</span></span><br><span class="line"><span class="code"> rel="stylesheet"</span></span><br><span class="line"><span class="code"> href="https://npm.elemecdn.com/ispeak@4.4.0/style.css"</span></span><br><span class="line"><span class="code">/></span></span><br><span class="line"><span class="code"><script src="https://cdn.staticfile.org/highlight.js/10.6.0/highlight.min.js"></script></span></span><br><span class="line"><span class="code"><script src="https://cdn.staticfile.org/marked/2.0.0/marked.min.js"></script></span></span><br><span class="line"><span class="code"><script src="https://npm.elemecdn.com/ispeak@4.4.0/ispeak.umd.js"></script></span></span><br><span class="line"><span class="code"><script src="https://npm.elemecdn.com/twikoo"></script></span></span><br><span class="line"><span class="code"><script></span></span><br><span class="line"><span class="code"> function load_ispeak() {</span></span><br><span class="line"><span class="code"> setTimeout(function() {</span></span><br><span class="line"><span class="code"> var HEAD = document.getElementsByTagName('head')[0] || document.documentElement;</span></span><br><span class="line"><span class="code"> var src = 'https://cdn1.tianli0.top/npm/ispeak/ispeak.umd.js'</span></span><br><span class="line"><span class="code"> var script = document.createElement('script')</span></span><br><span class="line"><span class="code"> script.setAttribute('type','text/javascript')</span></span><br><span class="line"><span class="code"> script.onload = function() {</span></span><br><span class="line"><span class="code"> pjax_ispeak()</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> script.setAttribute('src', src)</span></span><br><span class="line"><span class="code"> HEAD.appendChild(script)</span></span><br><span class="line"><span class="code"> }, 1);</span></span><br><span class="line"><span class="code"> };</span></span><br><span class="line"><span class="code"> function pjax_ispeak() {</span></span><br><span class="line"><span class="code"> if(!document.querySelectorAll("#ispeak")[0])return;</span></span><br><span class="line"><span class="code"> ispeak</span></span><br><span class="line"><span class="code"> .init({</span></span><br><span class="line"><span class="code"> el: '#ispeak',//不用改</span></span><br><span class="line"><span class="code"> api: '', //填写你kkapi地址(不是kkadmin后台地址!)</span></span><br><span class="line"><span class="code"> author: '',//填写个人ID</span></span><br><span class="line"><span class="code"> pageSize: 10,//每页speak显示的条数(建议保持默认,除非你要魔改css)</span></span><br><span class="line"><span class="code"> loading_img: 'https://bu.dusays.com/2021/03/04/d2d5e983e2961.gif',//加载动画</span></span><br><span class="line"><span class="code"> comment: function (speak) {</span></span><br><span class="line"><span class="code"> const { _id, title, content } = speak</span></span><br><span class="line"><span class="code"> const contentSub = content.substring(0, 30)</span></span><br><span class="line"><span class="code"> twikoo.init({</span></span><br><span class="line"><span class="code"> envId: '', // 腾讯云环境填 envId;Vercel 环境填地址(https://xxx.vercel.app)</span></span><br><span class="line"><span class="code"> el: '.ispeak-comment', // 不用改</span></span><br><span class="line"><span class="code"> //region: 'ap-guangzhou', // 环境地域,默认为 ap-shanghai,腾讯云环境填 ap-shanghai 或 ap-guangzhou;Vercel 环境不填</span></span><br><span class="line"><span class="code"> path: '/speak/info.html?q=' + _id, //不用改,除非你将上面的speak改为别的文件夹昵称</span></span><br><span class="line"><span class="code"> lang: 'zh-CN', // 用于手动设定评论区语言,支持的语言列表 https://github.com/imaegoo/twikoo/blob/main/src/client/utils/i18n/index.js</span></span><br><span class="line"><span class="code"> })</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> load_ispeak();</span></span><br><span class="line"><span class="code"> document.addEventListener('pjax:complete', function () {</span></span><br><span class="line"><span class="code"> pjax_ispeak();</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"></script></span></span><br><span class="line"><span class="code"><!--建议标注末尾链接--></span></span><br><span class="line"><span class="code"><p style="width: 100%;text-align: end;font-size: .75em;color: #999;margin-top: 1em;">Powered by <a href="https://www.antmoe.com/speak/"><strong>iSpeak</strong></a> | Comment by <a href="https://twikoo.js.org/"><strong>Twikoo</strong></a></p> </span></span><br><span class="line"><span class="code">{% endraw %}</span></span><br></pre></td></tr></table></figure><ol start="3"><li>在[blogroot]\source\speaks\<a target="_blank" rel="noopener" href="http://xn--info-494f001gunk.md">下新建info.md</a>,内容为下:</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: Speak</span><br><span class="line">aside: false</span><br><span class="line">comments: false</span><br><span class="line"><span class="section">description: 欢迎来到SinzMise的日记,快来看看SinzMise分享了什么! # speak介绍</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line"><!-- CSS --></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"stylesheet"</span> <span class="attr">href</span>=<span class="string">"https://cdn.staticfile.org/highlight.js/10.6.0/styles/atom-one-dark.min.css"</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">'content'</span>></span></span></span><br><span class="line"> <span class="language-xml"><span class="tag"><<span class="name">img</span> <span class="attr">src</span>=<span class="string">'https://bu.dusays.com/2022/05/01/626e88f349943.gif'</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line">{% btn '/speaks/',查看全部,far fa-hand-point-right,block center blue larger %}</span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">hr</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">'ispeak-comment'</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line"><!-- JS --></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://npm.elemecdn.com/twikoo"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://unpkg.com/marked@4.0.18/marked.min.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://cdn.staticfile.org/highlight.js/10.6.0/highlight.min.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span>></span></span></span><br><span class="line"> const searchParams = new URLSearchParams(window.location.search);</span><br><span class="line"> const speakId = searchParams.get('q');</span><br><span class="line"> const path = window.location.pathname;</span><br><span class="line"> const apiURL = 'https://(你的api地址)/api/ispeak';</span><br><span class="line"> const markedRender = (body, loading<span class="emphasis">_img='https://bu.dusays.com/2022/05/01/626e88f349943.gif') => {</span></span><br><span class="line"><span class="emphasis"> const renderer = {</span></span><br><span class="line"><span class="emphasis"> image(href, title, text) {</span></span><br><span class="line"><span class="emphasis"> return `<span class="language-xml"><span class="language-javascript"><a href=<span class="string">"${href}"</span> target=<span class="string">"_blank"</span> data-fancybox=<span class="string">"group"</span> <span class="keyword">class</span>=<span class="string">"fancybox"</span>></span></span></span></span><br><span class="line"><span class="emphasis"> <span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag"><<span class="name">img</span> <span class="attr">speak-src</span>=<span class="string">"${href}"</span> <span class="attr">src</span>=<span class="string">${loading_img}</span> <span class="attr">alt</span>=<span class="string">'${text}'</span>></span></span></span></span></span></span><br><span class="line"><span class="emphasis"> <span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag"></<span class="name">a</span>></span></span></span></span>`</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> marked.setOptions({</span></span><br><span class="line"><span class="emphasis"> renderer: new marked.Renderer(),</span></span><br><span class="line"><span class="emphasis"> highlight: function (code) {</span></span><br><span class="line"><span class="emphasis"> if (hljs) {</span></span><br><span class="line"><span class="emphasis"> return hljs.highlightAuto(code).value</span></span><br><span class="line"><span class="emphasis"> } else {</span></span><br><span class="line"><span class="emphasis"> return code</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> },</span></span><br><span class="line"><span class="emphasis"> pedantic: false,</span></span><br><span class="line"><span class="emphasis"> gfm: true,</span></span><br><span class="line"><span class="emphasis"> tables: true,</span></span><br><span class="line"><span class="emphasis"> breaks: true,</span></span><br><span class="line"><span class="emphasis"> sanitize: false,</span></span><br><span class="line"><span class="emphasis"> smartLists: true,</span></span><br><span class="line"><span class="emphasis"> smartypants: false,</span></span><br><span class="line"><span class="emphasis"> xhtml: false</span></span><br><span class="line"><span class="emphasis"> })</span></span><br><span class="line"><span class="emphasis"> marked.use({ renderer })</span></span><br><span class="line"><span class="emphasis"> return marked.parse(body)</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> fetch(`${apiURL}/get/${speakId}`)</span></span><br><span class="line"><span class="emphasis"> .then(response => response.json())</span></span><br><span class="line"><span class="emphasis"> .then(res => {</span></span><br><span class="line"><span class="emphasis"> const data = res.data;</span></span><br><span class="line"><span class="emphasis"> if(data){</span></span><br><span class="line"><span class="emphasis"> const {title,content} = data;</span></span><br><span class="line"><span class="emphasis"> const contentSub = content.substring(0, 30);</span></span><br><span class="line"><span class="emphasis"> document.querySelector('.content').innerHTML = markedRender(content);</span></span><br><span class="line"><span class="emphasis"> if(title){</span></span><br><span class="line"><span class="emphasis"> document.title = title;</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> twikoo.init({</span></span><br><span class="line"><span class="emphasis"> envId: '', // 腾讯云环境填 envId;Vercel 环境填地址(https://xxx.vercel.app)</span></span><br><span class="line"><span class="emphasis"> el: '.ispeak-comment', // 不用改</span></span><br><span class="line"><span class="emphasis"> //region: 'ap-guangzhou', // 环境地域,默认为 ap-shanghai,腾讯云环境填 ap-shanghai 或 ap-guangzhou;Vercel 环境不填</span></span><br><span class="line"><span class="emphasis"> path: path + '?q=' + speakId, // 不用改</span></span><br><span class="line"><span class="emphasis"> lang: 'zh-CN', // 用于手动设定评论区语言,支持的语言列表 https://github.com/imaegoo/twikoo/blob/main/src/client/utils/i18n/index.js</span></span><br><span class="line"><span class="emphasis"> })</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> });</span></span><br><span class="line"><span class="emphasis"><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span></span><br></pre></td></tr></table></figure><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div><div class="tab-item-content" id="前端引入ispeak-3"><ol><li>在博客目录下运行<code>hexo new page speaks</code></li><li>编辑[blogroot]\source\speaks\<a target="_blank" rel="noopener" href="http://index.md">index.md</a>,将里面的内容替换成:</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: 说说</span><br><span class="line">comments: false</span><br><span class="line"><span class="section">aside: false</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line">{% raw %}</span><br><span class="line"></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">style</span>></span></span></span><br><span class="line"> .speak-footer,.D-footer{</span><br><span class="line"><span class="code"> display:none;</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"></style></span></span><br><span class="line"><span class="code"><div id="ispeak"></div></span></span><br><span class="line"><span class="code"><link</span></span><br><span class="line"><span class="code"> rel="stylesheet"</span></span><br><span class="line"><span class="code"> href="https://cdn.staticfile.org/highlight.js/10.6.0/styles/atom-one-dark.min.css"</span></span><br><span class="line"><span class="code">/></span></span><br><span class="line"><span class="code"><link</span></span><br><span class="line"><span class="code"> rel="stylesheet"</span></span><br><span class="line"><span class="code"> href="https://npm.elemecdn.com/ispeak@4.4.0/style.css"</span></span><br><span class="line"><span class="code">/></span></span><br><span class="line"><span class="code"><script src="https://cdn.staticfile.org/highlight.js/10.6.0/highlight.min.js"></script></span></span><br><span class="line"><span class="code"><script src="https://cdn.staticfile.org/marked/2.0.0/marked.min.js"></script></span></span><br><span class="line"><span class="code"><script src="https://npm.elemecdn.com/ispeak@4.4.0/ispeak.umd.js"></script></span></span><br><span class="line"><span class="code"><script src="https://npm.elemecdn.com/discuss@latest/dist/discuss.js"></script></span></span><br><span class="line"><span class="code"><script></span></span><br><span class="line"><span class="code"> function load_ispeak() {</span></span><br><span class="line"><span class="code"> setTimeout(function() {</span></span><br><span class="line"><span class="code"> var HEAD = document.getElementsByTagName('head')[0] || document.documentElement;</span></span><br><span class="line"><span class="code"> var src = 'https://cdn1.tianli0.top/npm/ispeak/ispeak.umd.js'</span></span><br><span class="line"><span class="code"> var script = document.createElement('script')</span></span><br><span class="line"><span class="code"> script.setAttribute('type','text/javascript')</span></span><br><span class="line"><span class="code"> script.onload = function() {</span></span><br><span class="line"><span class="code"> pjax_ispeak()</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> script.setAttribute('src', src)</span></span><br><span class="line"><span class="code"> HEAD.appendChild(script)</span></span><br><span class="line"><span class="code"> }, 1);</span></span><br><span class="line"><span class="code"> };</span></span><br><span class="line"><span class="code"> function pjax_ispeak() {</span></span><br><span class="line"><span class="code"> if(!document.querySelectorAll("#ispeak")[0])return;</span></span><br><span class="line"><span class="code"> ispeak</span></span><br><span class="line"><span class="code"> .init({</span></span><br><span class="line"><span class="code"> el: '#ispeak',//不用改</span></span><br><span class="line"><span class="code"> api: '', //填写你kkapi地址(不是kkadmin后台地址!)</span></span><br><span class="line"><span class="code"> author: '',//填写个人ID</span></span><br><span class="line"><span class="code"> pageSize: 10,//每页speak显示的条数(建议保持默认,除非你要魔改css)</span></span><br><span class="line"><span class="code"> loading_img: 'https://bu.dusays.com/2021/03/04/d2d5e983e2961.gif',//加载动画</span></span><br><span class="line"><span class="code"> comment: function (speak) {</span></span><br><span class="line"><span class="code"> const { _id, title, content } = speak</span></span><br><span class="line"><span class="code"> const contentSub = content.substring(0, 30)</span></span><br><span class="line"><span class="code"> discuss.init({</span></span><br><span class="line"><span class="code"> el: '.ispeak-comment',// 不用改</span></span><br><span class="line"><span class="code"> serverURLs: '',//填写你的Discuss服务端地址</span></span><br><span class="line"><span class="code"> path: '/speak/info.html?q=' + _id,//不用改,除非你将上面的speak改为别的文件夹昵称</span></span><br><span class="line"><span class="code"> //后面可按照https://discuss.js.org/Quick-Start.html#%E5%AE%A2%E6%88%B7%E7%AB%AF-client 修改(必须放在path后面!以下为一个例子)</span></span><br><span class="line"><span class="code"> ph: '千山万水总是情,给个评论行不行' ,//评论框占位符</span></span><br><span class="line"><span class="code"> imgLoading: 'https://bu.dusays.com/2021/03/04/d2d5e983e2961.gif'//评论图片加载动画</span></span><br><span class="line"><span class="code"> })</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> load_ispeak();</span></span><br><span class="line"><span class="code"> document.addEventListener('pjax:complete', function () {</span></span><br><span class="line"><span class="code"> pjax_ispeak();</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"></script></span></span><br><span class="line"><span class="code"><!--建议标注末尾链接--></span></span><br><span class="line"><span class="code"><p style="width: 100%;text-align: end;font-size: .75em;color: #999;margin-top: 1em;">Powered by <a href="https://www.antmoe.com/speak/"><strong>iSpeak</strong></a> | Comment by <a href="https://discuss.js.org/"><strong>Discuss</strong></a></p> </span></span><br><span class="line"><span class="code">{% endraw %}</span></span><br></pre></td></tr></table></figure><ol start="3"><li>在[blogroot]\source\speaks\<a target="_blank" rel="noopener" href="http://xn--info-494f001gunk.md">下新建info.md</a>,内容为下:</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: Speak</span><br><span class="line">aside: false</span><br><span class="line">comments: false</span><br><span class="line"><span class="section">description: 欢迎来到SinzMise的日记,快来看看SinzMise分享了什么! # speak介绍</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line"><!-- CSS --></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"stylesheet"</span> <span class="attr">href</span>=<span class="string">"https://cdn.staticfile.org/highlight.js/10.6.0/styles/atom-one-dark.min.css"</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">'content'</span>></span></span></span><br><span class="line"> <span class="language-xml"><span class="tag"><<span class="name">img</span> <span class="attr">src</span>=<span class="string">'https://bu.dusays.com/2022/05/01/626e88f349943.gif'</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line">{% btn '/speaks/',查看全部,far fa-hand-point-right,block center blue larger %}</span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">hr</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">'ispeak-comment'</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line"><!-- JS --></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://npm.elemecdn.com/discuss@latest/dist/discuss.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://unpkg.com/marked@4.0.18/marked.min.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://cdn.staticfile.org/highlight.js/10.6.0/highlight.min.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span>></span></span></span><br><span class="line"> const searchParams = new URLSearchParams(window.location.search);</span><br><span class="line"> const speakId = searchParams.get('q');</span><br><span class="line"> const path = window.location.pathname;</span><br><span class="line"> const apiURL = 'https://(你的api地址)/api/ispeak'; //api地址</span><br><span class="line"> const markedRender = (body, loading<span class="emphasis">_img='https://bu.dusays.com/2022/05/01/626e88f349943.gif') => {</span></span><br><span class="line"><span class="emphasis"> const renderer = {</span></span><br><span class="line"><span class="emphasis"> image(href, title, text) {</span></span><br><span class="line"><span class="emphasis"> return `<span class="language-xml"><span class="language-javascript"><a href=<span class="string">"${href}"</span> target=<span class="string">"_blank"</span> data-fancybox=<span class="string">"group"</span> <span class="keyword">class</span>=<span class="string">"fancybox"</span>></span></span></span></span><br><span class="line"><span class="emphasis"> <span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag"><<span class="name">img</span> <span class="attr">speak-src</span>=<span class="string">"${href}"</span> <span class="attr">src</span>=<span class="string">${loading_img}</span> <span class="attr">alt</span>=<span class="string">'${text}'</span>></span></span></span></span></span></span><br><span class="line"><span class="emphasis"> <span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag"></<span class="name">a</span>></span></span></span></span>`</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> marked.setOptions({</span></span><br><span class="line"><span class="emphasis"> renderer: new marked.Renderer(),</span></span><br><span class="line"><span class="emphasis"> highlight: function (code) {</span></span><br><span class="line"><span class="emphasis"> if (hljs) {</span></span><br><span class="line"><span class="emphasis"> return hljs.highlightAuto(code).value</span></span><br><span class="line"><span class="emphasis"> } else {</span></span><br><span class="line"><span class="emphasis"> return code</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> },</span></span><br><span class="line"><span class="emphasis"> pedantic: false,</span></span><br><span class="line"><span class="emphasis"> gfm: true,</span></span><br><span class="line"><span class="emphasis"> tables: true,</span></span><br><span class="line"><span class="emphasis"> breaks: true,</span></span><br><span class="line"><span class="emphasis"> sanitize: false,</span></span><br><span class="line"><span class="emphasis"> smartLists: true,</span></span><br><span class="line"><span class="emphasis"> smartypants: false,</span></span><br><span class="line"><span class="emphasis"> xhtml: false</span></span><br><span class="line"><span class="emphasis"> })</span></span><br><span class="line"><span class="emphasis"> marked.use({ renderer })</span></span><br><span class="line"><span class="emphasis"> return marked.parse(body)</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> fetch(`${apiURL}/get/${speakId}`)</span></span><br><span class="line"><span class="emphasis"> .then(response => response.json())</span></span><br><span class="line"><span class="emphasis"> .then(res => {</span></span><br><span class="line"><span class="emphasis"> const data = res.data;</span></span><br><span class="line"><span class="emphasis"> if(data){</span></span><br><span class="line"><span class="emphasis"> const {title,content} = data;</span></span><br><span class="line"><span class="emphasis"> const contentSub = content.substring(0, 30);</span></span><br><span class="line"><span class="emphasis"> document.querySelector('.content').innerHTML = markedRender(content);</span></span><br><span class="line"><span class="emphasis"> if(title){</span></span><br><span class="line"><span class="emphasis"> document.title = title;</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> discuss.init({</span></span><br><span class="line"><span class="emphasis"> el: '.ispeak-comment',// 不用改</span></span><br><span class="line"><span class="emphasis"> serverURLs: '',//填写你的Discuss服务端地址</span></span><br><span class="line"><span class="emphasis"> path: path + '?q=' + speakId,// 不用改</span></span><br><span class="line"><span class="emphasis"> //后面可按照https://discuss.js.org/Quick-Start.html#%E5%AE%A2%E6%88%B7%E7%AB%AF-client 修改(必须放在path后面!以下为一个例子)</span></span><br><span class="line"><span class="emphasis"> ph: '千山万水总是情,给个评论行不行' ,//评论框占位符</span></span><br><span class="line"><span class="emphasis"> imgLoading: 'https://bu.dusays.com/2021/03/04/d2d5e983e2961.gif'//评论图片加载动画</span></span><br><span class="line"><span class="emphasis"> })</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> });</span></span><br><span class="line"><span class="emphasis"><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span></span><br></pre></td></tr></table></figure><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div><div class="tab-item-content" id="前端引入ispeak-4"><ol><li>在博客目录下运行<code>hexo new page speaks</code></li><li>编辑[blogroot]\source\speaks\<a target="_blank" rel="noopener" href="http://index.md">index.md</a>,将里面的内容替换成:</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: 说说</span><br><span class="line">comments: false</span><br><span class="line"><span class="section">aside: false</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line">{% raw %}</span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">style</span>></span></span></span><br><span class="line"> .speak-footer,.atk-list-footer{</span><br><span class="line"><span class="code"> display:none;</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"></style></span></span><br><span class="line"><span class="code"><div id="ispeak"></div></span></span><br><span class="line"><span class="code"><link</span></span><br><span class="line"><span class="code"> rel="stylesheet"</span></span><br><span class="line"><span class="code"> href="https://cdn.staticfile.org/highlight.js/10.6.0/styles/atom-one-dark.min.css"</span></span><br><span class="line"><span class="code">/></span></span><br><span class="line"><span class="code"><link</span></span><br><span class="line"><span class="code"> rel="stylesheet"</span></span><br><span class="line"><span class="code"> href="https://npm.elemecdn.com/ispeak@4.4.0/style.css"</span></span><br><span class="line"><span class="code">/></span></span><br><span class="line"><span class="code"><script src="https://cdn.staticfile.org/highlight.js/10.6.0/highlight.min.js"></script></span></span><br><span class="line"><span class="code"><script src="https://cdn.staticfile.org/marked/2.0.0/marked.min.js"></script></span></span><br><span class="line"><span class="code"><script src="https://npm.elemecdn.com/ispeak@4.4.0/ispeak.umd.js"></script></span></span><br><span class="line"><span class="code"><!-- CSS --></span></span><br><span class="line"><span class="code"><link href="https://unpkg.com/artalk@2.3.4/dist/Artalk.css" rel="stylesheet" /></span></span><br><span class="line"><span class="code"><!-- JS --></span></span><br><span class="line"><span class="code"><script src="https://unpkg.com/artalk@2.3.4/dist/Artalk.js"></script></span></span><br><span class="line"><span class="code"><script></span></span><br><span class="line"><span class="code"> function load_ispeak() {</span></span><br><span class="line"><span class="code"> setTimeout(function() {</span></span><br><span class="line"><span class="code"> var HEAD = document.getElementsByTagName('head')[0] || document.documentElement;</span></span><br><span class="line"><span class="code"> var src = 'https://cdn1.tianli0.top/npm/ispeak/ispeak.umd.js'</span></span><br><span class="line"><span class="code"> var script = document.createElement('script')</span></span><br><span class="line"><span class="code"> script.setAttribute('type','text/javascript')</span></span><br><span class="line"><span class="code"> script.onload = function() {</span></span><br><span class="line"><span class="code"> pjax_ispeak()</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> script.setAttribute('src', src)</span></span><br><span class="line"><span class="code"> HEAD.appendChild(script)</span></span><br><span class="line"><span class="code"> }, 1);</span></span><br><span class="line"><span class="code"> };</span></span><br><span class="line"><span class="code"> function pjax_ispeak() {</span></span><br><span class="line"><span class="code"> if(!document.querySelectorAll("#ispeak")[0])return;</span></span><br><span class="line"><span class="code"> ispeak</span></span><br><span class="line"><span class="code"> .init({</span></span><br><span class="line"><span class="code"> el: '#ispeak',//不用改</span></span><br><span class="line"><span class="code"> api: '', //填写你kkapi地址(不是kkadmin后台地址!)</span></span><br><span class="line"><span class="code"> author: '',//填写个人ID</span></span><br><span class="line"><span class="code"> pageSize: 10,//每页speak显示的条数(建议保持默认,除非你要魔改css)</span></span><br><span class="line"><span class="code"> loading_img: 'https://bu.dusays.com/2021/03/04/d2d5e983e2961.gif',//加载动画</span></span><br><span class="line"><span class="code"> comment: function (speak) {</span></span><br><span class="line"><span class="code"> const { _id, title, content } = speak</span></span><br><span class="line"><span class="code"> const contentSub = content.substring(0, 30)</span></span><br><span class="line"><span class="code"> new Artalk({</span></span><br><span class="line"><span class="code"> el: '.ispeak-comment', // 不用改</span></span><br><span class="line"><span class="code"> pageKey: '/speak/info.html?q=' + _id, //不用改,除非你将上面的speak改为别的文件夹昵称</span></span><br><span class="line"><span class="code"> pageTitle: title || contentSub, // 不用改</span></span><br><span class="line"><span class="code"> server: '', //填写你的Artalk服务端地址</span></span><br><span class="line"><span class="code"> site: '' // 填写你的站点名</span></span><br><span class="line"><span class="code"> })</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"> }</span></span><br><span class="line"><span class="code"> load_ispeak();</span></span><br><span class="line"><span class="code"> document.addEventListener('pjax:complete', function () {</span></span><br><span class="line"><span class="code"> pjax_ispeak();</span></span><br><span class="line"><span class="code"> });</span></span><br><span class="line"><span class="code"></script></span></span><br><span class="line"><span class="code"><!--建议标注末尾链接--></span></span><br><span class="line"><span class="code"><p style="width: 100%;text-align: end;font-size: .75em;color: #999;margin-top: 1em;">Powered by <a href="https://www.antmoe.com/speak/"><strong>iSpeak</strong></a> | Comment by <a href="https://artalk.js.org/"><strong>Artalk</strong></a></p> </span></span><br><span class="line"><span class="code">{% endraw %}</span></span><br></pre></td></tr></table></figure><ol start="3"><li>在[blogroot]\source\speaks\<a target="_blank" rel="noopener" href="http://xn--info-494f001gunk.md">下新建info.md</a>,内容为下:</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: Speak</span><br><span class="line">aside: false</span><br><span class="line">comments: false</span><br><span class="line"><span class="section">description: 欢迎来到SinzMise的日记,快来看看SinzMise分享了什么! # speak介绍</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line"><!-- CSS --></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">link</span> <span class="attr">href</span>=<span class="string">"https://unpkg.com/artalk@2.3.4/dist/Artalk.css"</span> <span class="attr">rel</span>=<span class="string">"stylesheet"</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"stylesheet"</span> <span class="attr">href</span>=<span class="string">"https://cdn.staticfile.org/highlight.js/10.6.0/styles/atom-one-dark.min.css"</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">'content'</span>></span></span></span><br><span class="line"> <span class="language-xml"><span class="tag"><<span class="name">img</span> <span class="attr">src</span>=<span class="string">'https://bu.dusays.com/2022/05/01/626e88f349943.gif'</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line">{% btn '/speaks/',查看全部,far fa-hand-point-right,block center blue larger %}</span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">hr</span> /></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">'ispeak-comment'</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line"><!-- JS --></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://unpkg.com/artalk@2.3.4/dist/Artalk.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://unpkg.com/marked@4.0.18/marked.min.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://cdn.staticfile.org/highlight.js/10.6.0/highlight.min.js"</span>></span></span><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><span class="language-xml"><span class="tag"><<span class="name">script</span>></span></span></span><br><span class="line"> const searchParams = new URLSearchParams(window.location.search);</span><br><span class="line"> const speakId = searchParams.get('q');</span><br><span class="line"> const path = window.location.pathname;</span><br><span class="line"> const apiURL = 'https://(你的api地址)/api/ispeak';</span><br><span class="line"> const markedRender = (body, loading<span class="emphasis">_img='https://bu.dusays.com/2022/05/01/626e88f349943.gif') => {</span></span><br><span class="line"><span class="emphasis"> const renderer = {</span></span><br><span class="line"><span class="emphasis"> image(href, title, text) {</span></span><br><span class="line"><span class="emphasis"> return `<span class="language-xml"><span class="language-javascript"><a href=<span class="string">"${href}"</span> target=<span class="string">"_blank"</span> data-fancybox=<span class="string">"group"</span> <span class="keyword">class</span>=<span class="string">"fancybox"</span>></span></span></span></span><br><span class="line"><span class="emphasis"> <span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag"><<span class="name">img</span> <span class="attr">speak-src</span>=<span class="string">"${href}"</span> <span class="attr">src</span>=<span class="string">${loading_img}</span> <span class="attr">alt</span>=<span class="string">'${text}'</span>></span></span></span></span></span></span><br><span class="line"><span class="emphasis"> <span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag"></<span class="name">a</span>></span></span></span></span>`</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> marked.setOptions({</span></span><br><span class="line"><span class="emphasis"> renderer: new marked.Renderer(),</span></span><br><span class="line"><span class="emphasis"> highlight: function (code) {</span></span><br><span class="line"><span class="emphasis"> if (hljs) {</span></span><br><span class="line"><span class="emphasis"> return hljs.highlightAuto(code).value</span></span><br><span class="line"><span class="emphasis"> } else {</span></span><br><span class="line"><span class="emphasis"> return code</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> },</span></span><br><span class="line"><span class="emphasis"> pedantic: false,</span></span><br><span class="line"><span class="emphasis"> gfm: true,</span></span><br><span class="line"><span class="emphasis"> tables: true,</span></span><br><span class="line"><span class="emphasis"> breaks: true,</span></span><br><span class="line"><span class="emphasis"> sanitize: false,</span></span><br><span class="line"><span class="emphasis"> smartLists: true,</span></span><br><span class="line"><span class="emphasis"> smartypants: false,</span></span><br><span class="line"><span class="emphasis"> xhtml: false</span></span><br><span class="line"><span class="emphasis"> })</span></span><br><span class="line"><span class="emphasis"> marked.use({ renderer })</span></span><br><span class="line"><span class="emphasis"> return marked.parse(body)</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> fetch(`${apiURL}/get/${speakId}`)</span></span><br><span class="line"><span class="emphasis"> .then(response => response.json())</span></span><br><span class="line"><span class="emphasis"> .then(res => {</span></span><br><span class="line"><span class="emphasis"> const data = res.data;</span></span><br><span class="line"><span class="emphasis"> if(data){</span></span><br><span class="line"><span class="emphasis"> const {title,content} = data;</span></span><br><span class="line"><span class="emphasis"> const contentSub = content.substring(0, 30);</span></span><br><span class="line"><span class="emphasis"> document.querySelector('.content').innerHTML = markedRender(content);</span></span><br><span class="line"><span class="emphasis"> if(title){</span></span><br><span class="line"><span class="emphasis"> document.title = title;</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> new Artalk({</span></span><br><span class="line"><span class="emphasis"> el: '.ispeak-comment', // 不用改</span></span><br><span class="line"><span class="emphasis"> pageKey: path + '?q=' + speakId, // 不用改</span></span><br><span class="line"><span class="emphasis"> pageTitle: title || contentSub, // 不用改</span></span><br><span class="line"><span class="emphasis"> server: '', //填写你的Artalk服务端地址</span></span><br><span class="line"><span class="emphasis"> site: '' // 填写你的站点名</span></span><br><span class="line"><span class="emphasis"> })</span></span><br><span class="line"><span class="emphasis"> }</span></span><br><span class="line"><span class="emphasis"> });</span></span><br><span class="line"><span class="emphasis"><span class="language-xml"><span class="tag"></<span class="name">script</span>></span></span></span></span><br></pre></td></tr></table></figure><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div></div></article><div class="post-copyright"><div class="post-copyright__title"><span class="post-copyright-info"><h>小康大佬的说说方案 ———— ispeak搭建教程</h></span></div><div class="post-copyright__type"><span class="post-copyright-info"><a href="https://blog.sinzmise.top/posts/38964/">https://blog.sinzmise.top/posts/38964/</a></span></div><div class="post-copyright-m"><div class="post-copyright-m-info"><div class="post-copyright-a"><h>文章作者</h><div class="post-copyright-cc-info"><h>王九弦SZ·Ninty</h></div></div><div class="post-copyright-c"><h>发表于</h><div class="post-copyright-cc-info"><h>2023-01-13</h></div></div><div class="post-copyright-u"><h>更新于</h><div class="post-copyright-cc-info"><h>2025-01-04</h></div></div><div class="post-copyright-c"><h>许可协议</h><div class="post-copyright-cc-info"><a class="icon" rel="noopener" target="_blank" title="Creative Commons" href="https://creativecommons.org/"><i class="fab fa-creative-commons"></i></a><a rel="noopener" target="_blank" title="CC BY-NC-SA 4.0" href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a></div></div></div></div></div><div class="tag_share"><div class="post-meta__tag-list"><a class="post-meta__tags" href="/tags/%E7%AB%99%E7%82%B9%E6%8A%98%E8%85%BE/"><div class="tags-punctuation"><svg class="faa-tada icon" style="height:1.1em;width:1.1em;fill:currentColor;position:relative;top:2px;margin-right:3px" aria-hidden="true"><use xlink:href="#icon-sekuaibiaoqian"></use></svg></div>站点折腾</a><a class="post-meta__tags" href="/tags/%E9%A1%B5%E9%9D%A2%E9%AD%94%E6%94%B9/"><div class="tags-punctuation"><svg class="faa-tada icon" style="height:1.1em;width:1.1em;fill:currentColor;position:relative;top:2px;margin-right:3px" aria-hidden="true"><use xlink:href="#icon-sekuaibiaoqian"></use></svg></div>页面魔改</a></div><div class="post_share"><div class="social-share" data-image="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_GVRhG42nuu.1g9uz8t24io0.webp" data-sites="facebook,twitter,wechat,weibo,qq"></div><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/butterfly-extsrc/sharejs/dist/css/share.min.css" media="print" onload='this.media="all"'><script src="https://jsd.cdn.storisinz.site/npm/butterfly-extsrc/sharejs/dist/js/social-share.min.js" defer></script></div></div><nav class="pagination-post" id="pagination"><div class="prev-post pull-left"><a href="/posts/61417/"><img class="prev-cover" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230128/30165599-36623bea-93a6-11e7-8956-1ddf99ce0e6f.2rbu2i9xfvy0.webp" onerror='onerror=null,src="/assets/r2.jpg"' alt="cover of previous post"><div class="pagination-info"><div class="label">上一篇</div><div class="prev_info">自建Meting服务</div></div></a></div><div class="next-post pull-right"><a href="/posts/22945/"><img class="next-cover" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/logo.22azkjyis5uo.webp" onerror='onerror=null,src="/assets/r2.jpg"' alt="cover of next post"><div class="pagination-info"><div class="label">下一篇</div><div class="next_info">butterfly主题添加音乐页面(适配手机)</div></div></a></div></nav><div class="relatedPosts"><div class="headline"><i class="fas fa-thumbs-up fa-fw"></i><span>相关推荐</span></div><div class="relatedPosts-list"><div><a href="/posts/10045/" title="为博客添加一个游戏收藏页(npm插件版)"><img class="cover" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/picx-images-hosting@master/20240525/fe131d7f5a6b38b23cc967316c13dae2.8dwp7xp4q5.webp" alt="cover"><div class="content is-center"><div class="date"><i class="fas fa-history fa-fw"></i> 2025-01-04</div><div class="title">为博客添加一个游戏收藏页(npm插件版)</div></div></a></div><div><a href="/posts/22945/" title="butterfly主题添加音乐页面(适配手机)"><img class="cover" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/logo.22azkjyis5uo.webp" alt="cover"><div class="content is-center"><div class="date"><i class="fas fa-history fa-fw"></i> 2025-01-04</div><div class="title">butterfly主题添加音乐页面(适配手机)</div></div></a></div><div><a href="/posts/53662/" title="博客大更新"><img class="cover" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://files.blog.sinzmise.top/images/645fa3cf90d70.webp" alt="cover"><div class="content is-center"><div class="date"><i class="fas fa-history fa-fw"></i> 2025-01-04</div><div class="title">博客大更新</div></div></a></div><div><a href="/posts/16107/" title="新起点,新出发"><img class="cover" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20221230/46348.3e004dfapae0.webp" alt="cover"><div class="content is-center"><div class="date"><i class="fas fa-history fa-fw"></i> 2025-01-04</div><div class="title">新起点,新出发</div></div></a></div><div><a href="/posts/57692/" title="Ruffle测试"><img class="cover" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://images1.blog.sinzmise.top/images/Canvas-Ruom.7pbzp97mh.webp" alt="cover"><div class="content is-center"><div class="date"><i class="fas fa-history fa-fw"></i> 2025-01-04</div><div class="title">Ruffle测试</div></div></a></div><div><a href="/posts/28536/" title="自建不蒜子API"><img class="cover" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://vip1.loli.io/2022/05/11/eKfrdV9p48IcCj5.jpg" alt="cover"><div class="content is-center"><div class="date"><i class="fas fa-history fa-fw"></i> 2025-01-04</div><div class="title">自建不蒜子API</div></div></a></div></div></div><hr><div id="post-comment"><div class="comment-head"><div class="comment-headline"><i class="fas fa-comments fa-fw"></i> <span>评论</span></div><div id="comment-switch"><span class="first-comment">Twikoo</span><span class="switch-btn"></span><span class="second-comment">Idisqus</span></div></div><div class="comment-wrap"><div><div id="twikoo-wrap"></div></div><div><input id="comment-toggle" type="checkbox" disabled> <span>加载 Disqus 原生评论框</span><div id="idisqus-container"></div><footer class="idsqs-footer-container"><p class="idsqs-footer">Powered by <a class="idsqs-disqus-logo" href="https://disqus.com" rel="external nofollow noopener noreferrer" target="_blank"></a> & <a class="idsqs-idisqus-logo" href="https://github.com/fooleap/disqus-php-api" rel="noreferrer" target="_blank">iDisqus</a></p></footer></div></div></div><hr><div id="post-comment"><div class="comment-head"><div class="comment-headline"><i class="fas fa-comments fa-fw"></i> <span>网络回响</span></div></div><div class="comment-wrap"><div id="webmentions"></div><form class="webmention-input-group" action="https://webmention.io/blog.sinzmise.top/webmention" method="post" style="margin:2ch 0"><label class="webmention-label" for="source">欲提交/移除对本文的回应,请于此提交您的文章地址:</label><input class="webmention-input" name="source" placeholder="Your URL" required type="url"><input class="webmention-input" name="target" type="hidden" value="https://blog.sinzmise.top/posts/23226/"><input class="webmention-input" style="background:var(--font-color)" type="submit" value="提交"></form></div></div></div><div class="aside-content" id="aside-content"><div class="card-widget card-info h-card"><div class="bg-blur"></div><div class="author_top is-center"><div class="card-info-avatar"><div class="avatar-img"><img class="u-photo u-logo" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="/img/avatar.png" onerror='this.onerror=null,this.src="/assets/r1.jpg"' alt="avatar"></div><div class="author-status-box"><div class="author-status"><g-emoji class="g-emoji" alias="palm_tree" fallback-src="https://lskypro.acozycotage.net/LightPicture/2022/12/fe1dc0402e623096.jpg">🐟</g-emoji><span>认真摸鱼中</span></div></div></div><br><a class="author-info__name p-name u-url" href="/" style="color:#555">王九弦SZ·Ninty</a><div class="author-info__description">The Story,The Dream.</div></div><div class="card-info-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">45</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">14</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">5</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://www.sinzmise.top/"><span>个人主页</span><i class="faa-passing animated" style="padding-left:20px;display:inline-block;vertical-align:middle"><svg class="icon" style="height:28px;width:28px;fill:currentColor;position:relative;top:5px"><use xlink:href="#icon-xiaoqiche"></use></svg></i></a><div class="card-info-social-icons is-center"><a class="social-icon faa-parent animated-hover" href="https://github.com/SinzMise" target="_blank" rel="me" title="Github"><svg class="social_icon faa-tada" aria-hidden="true" style="width:1.15em;height:1.15em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-github"></use></svg></a><a class="social-icon faa-parent animated-hover" href="https://space.bilibili.com/479627766" target="_blank" rel="me" title="Bilibili"><svg class="social_icon faa-tada" aria-hidden="true" style="width:1.15em;height:1.15em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-bilibili"></use></svg></a><a class="social-icon faa-parent animated-hover" href="mailto:email@sinzmise.top" target="_blank" rel="me" title="Email"><svg class="social_icon faa-tada" aria-hidden="true" style="width:1.15em;height:1.15em;vertical-align:-.15em;fill:currentColor;overflow:hidden"><use xlink:href="#icon-youxiang"></use></svg></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><a class="faa-parent animated-hover"><svg class="faa-tada icon" style="height:25px;width:25px;fill:currentColor;position:relative;top:5px" aria-hidden="true"><use xlink:href="#icon-gonggao"></use></svg></a><span style="font-weight:700">公告栏</span></div><div class="announcement_content"><center>果然,还是Butterfly真香</center></div><div id="welcome-info"></div></div><div class="sticky_layout"><div class="card-widget" id="card-toc"><div class="item-headline"><svg class="meta_icon" style="width:22px;height:22px;position:relative;top:5px"><use xlink:href="#icon-mulu1"></use></svg><span style="font-weight:700">目录</span><span class="toc-percentage"></span></div><div class="toc-content"><ol class="toc"><li class="toc-item toc-level-1"><a class="toc-link"><span class="toc-text">前言</span></a></li><li class="toc-item toc-level-1"><a class="toc-link"><span class="toc-text">教程</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%90%8E%E7%AB%AF%E9%83%A8%E7%BD%B2"><span class="toc-text">后端部署</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E9%85%8D%E7%BD%AE%E6%95%B0%E6%8D%AE%E5%BA%93"><span class="toc-text">配置数据库</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E9%83%A8%E7%BD%B2kkapi"><span class="toc-text">部署kkapi</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E9%83%A8%E7%BD%B2kkadmin"><span class="toc-text">部署kkadmin</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%89%8D%E7%AB%AF%E9%85%8D%E7%BD%AE"><span class="toc-text">前端配置</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E8%BF%9B%E5%85%A5%E5%90%8E%E5%8F%B0%EF%BC%8C%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BAID"><span class="toc-text">进入后台,查看个人ID</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%89%8D%E7%AB%AF%E5%BC%95%E5%85%A5"><span class="toc-text">前端引入</span></a></li></ol></li></ol></li></ol></div></div></div></div></main><footer id="footer" style="background-color:transparent"><div id="footer-wrap"><div id="ft"><div class="ft-item-1"><div class="t-top"><div class="t-t-l"><p class="ft-t t-l-t">格言🧬</p><div class="bg-ad"><div>再看看那个光点,它就在这里,这是家园,这是我们 —— 你所爱的每一个人,你认识的一个人,你听说过的每一个人,曾经有过的每一个人,都在它上面度过他们的一生✨</div><div class="btn-xz-box"><a class="btn-xz" target="_blank" rel="noopener" href="https://stellarium.org/">穿梭到星空之旅途</a></div></div></div><div class="t-t-r"><p class="ft-t t-l-t">猜你想看</p><ul class="ft-links"><li><a href="/tags/">文章标签</a><a href="/categories/">文章分类</a></li><li><a href="/link/">友情链接</a><a href="/fcircle/">朋友圈</a></li></ul></div></div></div><div class="ft-item-2"><p class="ft-t">推荐友链⌛</p><div class="ft-img-group"><div class="img-group-item"><a target="_blank" rel="noopener" href="https://www.lihaoyu.cn" title="/%E6%99%93%E9%9B%A8%E6%9D%82%E8%AE%B0"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://blog-api.lihaoyu.cn/images/profile/avatar-128x.webp" alt=""></a></div><div class="img-group-item"><a target="_blank" rel="noopener" href="https://dusays.com/" title="/%E6%9D%9C%E8%80%81%E5%B8%88%E8%AF%B4"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://cdn.dusays.com/avatar.png" alt=""></a></div><div class="img-group-item"><a target="_blank" rel="noopener" href="https://blog.tianli0.top/" title="/Tianli"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://q2.qlogo.cn/headimg_dl?dst_uin=507249007&spec=640" alt=""></a></div><div class="img-group-item"><a target="_blank" rel="noopener" href="https://blog.zhheo.com/" title="/%E5%BC%A0%E6%B4%AAHeo"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://bu.dusays.com/2022/12/28/63ac2812183aa.png" alt=""></a></div><div class="img-group-item"><a target="_blank" rel="noopener" href="https://www.qcqx.cn/" title="/%E8%BD%BB%E7%AC%91Chuckle"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://www.qcqx.cn/head.webp" alt=""></a></div><div class="img-group-item"><a target="_blank" rel="noopener" href="https://kmar.top/" title="/%E5%B1%B1%E5%B2%B3%E5%BA%93%E5%8D%9A%C2%B7%E7%A9%BA%E6%A2%A6"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://npm.elemecdn.com/@kmar/fonts@1/avatar/own.png" alt=""></a></div><div class="img-group-item"><a target="_blank" rel="noopener" href="https://blog.qjqq.cn/" title="/%E9%9D%92%E6%A1%94%E6%B0%94%E7%90%83"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://q2.qlogo.cn/headimg_dl?dst_uin=1645253&spec=640" alt=""></a></div><div class="img-group-item"><a target="_blank" rel="noopener" href="https://bikari.top" title="/%E5%BE%AE%E5%85%89%E6%A1%A3%E6%A1%88"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://cravatar.cn/avatar/ECB2EA87C4532F007838D86D02798F89" alt=""></a></div></div></div></div><div class="footer_custom_text"><a href="https://www.travellings.cn/go.html" class="social flat-btn" target="_blank" rel="external nofollow noopener noreferrer" itemprop="url" alt="开往-友链接力"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://www.travellings.cn/assets/logo.gif" class="lazyload" data-srcset="https://www.travellings.cn/assets/logo.gif" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="height:24px"></a><a href="https://boringbay.com" class="social flat-btn" target="_blank" rel="external nofollow noopener noreferrer" itemprop="url" alt="无聊湾 🥱 The Boring Bay"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://boringbay.com/api/badge/blog.sinzmise.top" class="lazyload" data-srcset="https://boringbay.com/api/badge/blog.sinzmise.top" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="height:24px"></a><a href="https://blogscn.fun/" class="social flat-btn" target="_blank" rel="external nofollow noopener noreferrer" itemprop="url" alt="本站已加入BLOGS·CN"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://photo.xiangming.site/img/blogscn.png" class="lazyload" data-srcset="https://photo.xiangming.site/img/blogscn.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="height:24px"></a><a href="https://blogscn.fun/random.html" class="social flat-btn" target="_blank" rel="external nofollow noopener noreferrer" itemprop="url" alt="BLOGS·CN随机访问"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://photo.xiangming.site/img/footer.gif" class="lazyload" data-srcset="https://photo.xiangming.site/img/footer.gif" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="height:24px"></a><a href="https://www.blogsclub.org/go" target="_blank" title="空间穿梭-随机访问BlogsClub成员博客"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://www.blogsclub.org/images/shuttle_1.png"></a><br><a target="_blank" rel="noopener" href="https://xn--sr8hvo.ws/previous">←</a> An <a target="_blank" rel="noopener" href="https://xn--sr8hvo.ws">IndieWeb Webring</a> 🕸💍 <a target="_blank" rel="noopener" href="https://xn--sr8hvo.ws/next">→</a><br>©2021 · <a href="/">中弦局·汐塔魔法屋</a><br><a target="_blank" rel="noopener" href="https://icp.gov.moe/?keyword=20231033">萌ICP备20231033号</a> | <a href="https://icp.yuncheng.fun/id.php?keyword=20241025" target="_blank">团ICP备20241025号</a> | <a target="_blank" rel="noopener" href="https://beian.miit.cn.com/gov/search.php?query=20240818">MIIT备20240818号</a> | <a target="_blank" rel="noopener" href="https://guan.ma/hao/2024000155/">官码2024000155号</a> | <a href="https://icp.snzy.cc/?id=2024120181" title="梵AIA盟2024120181号" target="_blank"><img style="width:20px;height:20px" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://icp.snzy.cc/static/picture/icpba.png">梵AIA盟2024120181号</a> | <a target="_blank" rel="noopener" href="https://icp.sepocatch.xyz/search.php?keyword=blog.sinzmise.top" id="SepocatchICPv5Link">SICP备20243448号</a><br>我加入的:<a target="_blank" rel="noopener" href="https://zhblogs.ohyee.cc/">中文博客列表</a> | <a target="_blank" rel="noopener" href="https://storeweb.cn/member/o/1585">个站商店</a> | <a target="_blank" rel="noopener" href="https://bf.zzxworld.com/s/995">BlogFinder</a> | <a target="_blank" rel="noopener" href="https://sites.applinzi.com/site-info?siteType=life&siteId=64cb373190e35300a8eec654">站点聚合平台</a> | <a target="_blank" rel="noopener" href="https://boke.lu/">博客录</a> | <a target="_blank" rel="noopener" href="https://rssblog.cn/member/d711afd659d65c2ba2d3b18697818cf7/">RssBlog</a> | <a target="_blank" rel="noopener" href="https://blogscn.fun/">笔墨迹</a> | <a target="_blank" rel="noopener" href="https://daohang.lusongsong.com/">博客大全</a> | <a target="_blank" rel="noopener" href="https://www.blogsclub.org/blog/99.html">BlogsClub</a> | <a target="_blank" rel="noopener" href="https://ourblo.gs/blogs/55/">OurBlogs</a><br><a href="https://ipw.cn/ipv6webcheck/?site=blog.sinzmise.top" title="本站支持IPv6访问" target="_blank"><img style="display:inline-block;vertical-align:middle" alt="本站支持IPv6访问" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://static.ipw.cn/icon/ipv6-s1.svg"></a><a href="https://ipw.cn/ssl/?site=blog.sinzmise.top" title="本站支持SSL安全访问" target="_blank"><img style="display:inline-block;vertical-align:middle" alt="本站支持SSL安全访问" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://static.ipw.cn/icon/ssl-s1.svg"></a></div><div id="workboard"></div><p id="ghbdages"><a class="github-badge" target="_blank" href="https://hexo.io/" style="margin-inline:5px" title="博客框架为Hexo_v6.2.0"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://files.blog.sinzmise.top/images/Frame-Hexo-blue.svg" alt=""></a><a class="github-badge" target="_blank" href="https://butterfly.js.org/" style="margin-inline:5px" title="主题版本Butterfly_v4.3.1"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://files.blog.sinzmise.top/images/Theme-Butterfly-6513df.svg" alt=""></a><a class="github-badge" target="_blank" href="https://pages.cloudflare.com/" style="margin-inline:5px" title="本站采用多线部署,主线路部署到Cloudflare Pages"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://files.blog.sinzmise.top/images/HostCF.svg" alt=""></a><a class="github-badge" target="_blank" href="https://cdn.ledcdn.com/" style="margin-inline:5px" title="本站由LEDCDN提供站点加速服务"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://files.blog.sinzmise.top/images/LEDCDN.svg" alt=""></a><a class="github-badge" target="_blank" href="https://51.la/" style="margin-inline:5px" title="本站数据分析得益于51la技术支持"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://files.blog.sinzmise.top/images/Analytics-51la-3db1eb.svg" alt=""></a><a class="github-badge" target="_blank" href="https://github.com/" style="margin-inline:5px" title="本站项目由GitHub托管"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://img.shields.io/badge/Source-Github-d021d6?style=flat&logo=GitHub" alt=""></a><a class="github-badge" target="_blank" href="http://creativecommons.org/licenses/by-nc-sa/4.0/" style="margin-inline:5px" title="本站采用知识共享署名-非商业性使用-相同方式共享4.0国际许可协议进行许可"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://img.shields.io/badge/Copyright-BY--NC--SA%204.0-d42328?style=flat&logo=Claris" alt=""></a></p></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="readmode" type="button" title="阅读模式"><i class="fas fa-book-open"></i></button><a class="icon-V hidden" onclick="switchNightMode()" title="浅色和深色模式转换"><svg width="25" height="25" viewBox="0 0 1024 1024"><use id="modeicon" xlink:href="#icon-moon"></use></svg></a><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="设置"><i class="fas fa-cog right_side"></i></button><button class="close" id="mobile-toc-button" type="button" title="目录"><i class="fas fa-list-ul"></i></button><button class="share" type="button" title="分享链接" onclick="share()"><i class="fas fa-share-nodes"></i></button><a id="to_comment" href="#post-comment" title="直达评论"><i class="fas fa-comments"></i></a><button id="go-up" type="button" title="回到顶部"><i class="fas fa-arrow-up"></i><span id="percent">0<span>%</span></span></button><button id="go-down" type="button" title="直达底部" onclick="btf.scrollToDest(document.body.scrollHeight,500)"><i class="fas fa-arrow-down"></i></button></div></div><div class="docsearch-wrap"><div id="docsearch" style="display:none"></div><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/@docsearch/css/dist/style.min.css"><script src="https://jsd.cdn.storisinz.site/npm/@docsearch/js/dist/umd/index.min.js"></script><script>(()=>{docsearch(Object.assign({appId:"QAS05YI2PH",apiKey:"67ffd4c9fa1234148ec4f8b27dfdb2a7",indexName:"sinzmise",container:"#docsearch"},null));const e=()=>{document.querySelector("#search-button > .search").addEventListener("click",(()=>{document.querySelector(".DocSearch-Button").click()}))};e(),window.addEventListener("pjax:complete",e)})()</script></div><div class="js-pjax" id="rightMenu"><div class="rightMenu-group rightMenu-small"><a class="rightMenu-item" href="javascript:window.history.back();"><i class="fa fa-arrow-left"></i></a><a class="rightMenu-item" href="javascript:window.history.forward();"><i class="fa fa-arrow-right"></i></a><a class="rightMenu-item" href="javascript:window.location.reload();"><i class="fa fa-refresh"></i></a><a class="rightMenu-item" href="javascript:rmf.scrollToTop();"><i class="fa fa-arrow-up"></i></a></div><div class="rightMenu-group rightMenu-line hide" id="menu-text"><a class="rightMenu-item" href="javascript:rmf.copySelect();"><i class="fa fa-copy"></i><span>复制</span></a><a class="rightMenu-item" href="javascript:window.open("https://bing.com/search?q="+window.getSelection().toString());window.location.reload();"><i class="fa fa-search"></i><span>必应搜索</span></a></div><div class="rightMenu-group rightMenu-line hide" id="menu-too"><a class="rightMenu-item" href="javascript:window.open(window.getSelection().toString());window.location.reload();"><i class="fa fa-link"></i><span>转到链接</span></a></div><div class="rightMenu-group rightMenu-line hide" id="menu-paste"><a class="rightMenu-item" href="javascript:rmf.paste()"><i class="fa fa-copy"></i><span>粘贴</span></a></div><div class="rightMenu-group rightMenu-line hide" id="menu-post"><a class="rightMenu-item" href="#post-comment"><i class="fas fa-comment"></i><span>评论</span></a><a class="rightMenu-item" href="javascript:rmf.copyWordsLink()"><i class="fa fa-link"></i><span>复制本文地址</span></a></div><div class="rightMenu-group rightMenu-line hide" id="menu-to"><a class="rightMenu-item" href="javascript:rmf.openWithNewTab()"><i class="fa fa-window-restore"></i><span>在新窗口打开</span></a><a class="rightMenu-item" id="menu-too" href="javascript:rmf.open()"><i class="fa fa-link"></i><span>转到链接</span></a><a class="rightMenu-item" href="javascript:rmf.copyLink()"><i class="fa fa-copy"></i><span>复制链接</span></a></div><div class="rightMenu-group rightMenu-line hide" id="menu-img"><a class="rightMenu-item" href="javascript:rmf.saveAs()"><i class="fa fa-download"></i><span>保存图片</span></a><a class="rightMenu-item" href="javascript:rmf.openWithNewTab()"><i class="fa fa-window-restore"></i><span>在新窗口打开</span></a><a class="rightMenu-item" href="javascript:rmf.copyLink()"><i class="fa fa-copy"></i><span>复制图片链接</span></a></div><div class="rightMenu-group rightMenu-line"><a class="rightMenu-item" href="javascript:toRandomPost()"><i class="fa fa-paper-plane"></i><span>随便逛逛</span></a><a class="rightMenu-item" href="javascript:switchNightMode();"><i class="fa fa-moon"></i><span>昼夜切换</span></a><a class="rightMenu-item" href="/about/"><i class="fa fa-info-circle"></i><span>关于我</span></a><a class="rightMenu-item" href="javascript:toggleWinbox();"><i class="fas fa-cog"></i><span>主题设置</span></a><a class="rightMenu-item" href="javascript:rmf.fullScreen();"><i class="fas fa-expand"></i><span>切换全屏</span></a><a class="rightMenu-item" href="javascript:window.print();"><i class="fa-solid fa-print"></i><span>打印页面</span></a></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><script src="https://cdnjs.cdn.storisinz.site/ajax/libs/fancyapps-ui/4.0.31/fancybox.umd.min.js"></script><script src="https://cdnjs.cdn.storisinz.site/ajax/libs/instant.page/5.1.0/instantpage.min.js" type="module"></script><script src="https://cdnjs.cdn.storisinz.site/ajax/libs/vanilla-lazyload/17.3.1/lazyload.iife.min.js"></script><script async>var preloader={endLoading:()=>{document.body.style.overflow="auto",document.getElementById("loading-box").classList.add("loaded")},initLoading:()=>{document.body.style.overflow="",document.getElementById("loading-box").classList.remove("loaded")}};window.addEventListener("load",preloader.endLoading()),setTimeout((function(){preloader.endLoading()}),5e3),document.getElementById("loading-box").addEventListener("click",(()=>{preloader.endLoading()}))</script><div class="js-pjax"><script>(()=>{const t=()=>{twikoo.init(Object.assign({el:"#twikoo-wrap",envId:"https://tk.pl.blog.sinzmise.top/",region:"",onCommentLoaded:function(){btf.loadLightbox(document.querySelectorAll("#twikoo .tk-content img:not(.tk-owo-emotion)"))}},null))},o=()=>{"object"!=typeof twikoo?getScript("https://jsd.cdn.storisinz.site/npm/twikoo/dist/twikoo.all.min.js").then(t):setTimeout(t,0)};o()})()</script><style>.idsqs-footer-container{border-top:2px solid #e6e8ee;color:#555;font-size:16px;font-weight:700;line-height:1.5;margin-top:12px;padding-right:10px;padding-top:10px;text-align:right}.idsqs-footer{color:#64778b}.idsqs-disqus-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 438 80'%3E%3Cpath fill='%23575B5D' d='M30.2 1.6H1v76h28.9C57 77.6 73 61.3 73 39.4v-.2c0-22-15.7-37.6-42.9-37.6zm21.3 38.1c0 12.3-8.4 19.3-21 19.3H22V20.3h8.5c12.6 0 21 7 21 19.2v.2zm35.6 38h21.2V1.5H87.1v76zm70-47.4c-10.4-2.4-13-4-13-7.4v-.2c0-2.7 2.4-5 7.6-5 6.7 0 14.3 2.7 21.2 7.6l10.6-14.9A47.9 47.9 0 0 0 152.2.3c-18.3 0-29.4 10.2-29.4 24.3v.2c0 15.7 12.4 20.3 28.6 24 10.4 2.3 12.9 4 12.9 7.2v.2c0 3.3-3 5.2-8.7 5.2-8.8 0-17.2-3.1-24.7-9l-11.7 14a53.1 53.1 0 0 0 35.6 12.5c18.5 0 30.7-9.2 30.7-24.7V54c0-14.3-10.8-20-28.3-23.7zm120.7 9.3v-.2A39.5 39.5 0 0 0 236.9.1c-23.4 0-41 17.7-41 39.5v.2a39.5 39.5 0 0 0 40.8 39.4c8.7 0 16.6-2.5 23.1-6.8l8.4 7.5L279 68.1l-7.9-6.6a38 38 0 0 0 6.8-21.9zm-21.4.5c0 2.6-.5 5-1.3 7.3l-10.4-9.3-10.6 12 10.5 9a21.7 21.7 0 0 1-7.7 1.4c-11.6 0-19.4-9.7-19.4-20.7v-.2c0-11 7.7-20.5 19.2-20.5 11.7 0 19.7 9.7 19.7 20.7v.3zm83.5 4.3c0 10.6-5.5 15.6-14 15.6s-14-5.2-14-16.1V1.6h-21.4v42.7C290.5 68 304 79 325.7 79s35.6-10.8 35.6-35.3V1.5h-21.4v42.8zm68.9-14.1c-10.6-2.4-13.2-4-13.2-7.4v-.2c0-2.7 2.5-5 7.6-5 6.8 0 14.4 2.7 21.3 7.6l10.6-14.9A47.9 47.9 0 0 0 403.8.3c-18.3 0-29.5 10.2-29.5 24.3v.2c0 15.7 12.5 20.3 28.7 24 10.3 2.3 12.8 4 12.8 7.2v.2c0 3.3-3 5.3-8.7 5.3-8.8 0-17.1-3.2-24.6-9.2l-11.7 14A53.1 53.1 0 0 0 406.4 79c18.5 0 30.7-9.2 30.7-24.7V54c0-14.3-10.8-20-28.3-23.7z'/%3E%3C/svg%3E");background-position:50% 50%;background-repeat:no-repeat;display:inline-block;height:12px;width:65.7px}</style><script>function loadiDisqus(){function i(){new iDisqus("idisqus-container",{api:"https://idq.pl.blog.sinzmise.top/blog/zh",forum:"cetahousezh",mode:3,toggle:"comment-toggle",site:"https://blog.sinzmise.top",init:!0})}"function"==typeof iDisqus?i():(!function(){const i=document.createElement("link");i.rel="stylesheet",i.href="https://idq.pl.blog.sinzmise.top/dist/iDisqus.min.css",document.head.appendChild(i)}(),getScript("https://idq.pl.blog.sinzmise.top/dist/iDisqus.min.js").then(i))}{function loadOtherComment(){loadiDisqus()}setTimeout(loadiDisqus,0)}</script><div id="webmen-root"></div><script>function loadWebMention(){if(null!=document.getElementById("webmentionjs"))document.getElementById("webmentionjs").remove(),loadWebMention();else{let e=document.createElement("script");e.setAttribute("src","/js/webmention.js"),e.setAttribute("id","webmentionjs"),document.getElementById("webmen-root").insertAdjacentElement("afterbegin",e)}}loadWebMention()</script></div><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/anzhiyu-theme-static/icon/ali_iconfont_css.min.css"><script src="https://jsd.cdn.storisinz.site/npm/jquery.marquee/jquery.marquee.min.js"></script><script src="https://jsd.cdn.storisinz.site/npm/@ruffle-rs/ruffle"></script><script src="/js/ceta/random.js"></script><script defer src="https://umami.status.sinzmise.top/script.js" data-website-id="f1d455c0-5a05-4974-8c7f-cc8deb3eff18"></script><script async data-pjax src="/bbs/bbs.js"></script><script src="https://jsd.cdn.storisinz.site/npm/swiper@10.3.1/swiper-bundle.min.js"></script><script src="https://cdnjs.cdn.storisinz.site/ajax/libs/jquery/3.6.3/jquery.min.js"></script><script src="https://jsd.cdn.storisinz.site/npm/axios/dist/axios.min.js"></script><script>var meting_api="https://meting.api.sinzmise.eu.org/api?server=:server&type=:type&id=:id&auth=:auth&r=:r"</script><script async src="https://jsd.cdn.storisinz.site/npm/vue@2.6.14/dist/vue.min.js"></script><script async src="https://jsd.cdn.storisinz.site/npm/element-ui@2.15.6/lib/index.js"></script><script async src="https://cdnjs.cdn.storisinz.site/ajax/libs/clipboard.js/2.0.11/clipboard.min.js"></script><script defer src="https://jsd.cdn.storisinz.site/npm/sweetalert2@8.19.0/dist/sweetalert2.all.js"></script><script async src="https://jsd.cdn.storisinz.site/npm/pace-js@1.2.4/pace.min.js"></script><script defer src="https://jsd.cdn.storisinz.site/gh/nextapps-de/winbox/dist/winbox.bundle.min.js"></script><script async src="//at.alicdn.com/t/c/font_3586335_hsivh70x0fm.js"></script><script async src="//at.alicdn.com/t/c/font_3636804_gr02jmjr3y9.js"></script><script async src="//at.alicdn.com/t/c/font_3612150_kfv55xn3u2g.js"></script><script async src="//at.alicdn.com/t/c/font_4199232_wlo8truegv.js"></script><script async src="/js/Gold-ingot.js"></script><canvas id="universe"></canvas><canvas id="snow"></canvas><script defer src="/js/fomal.js"></script><link rel="stylesheet" href="https://jsd.cdn.storisinz.site/npm/aplayer/dist/APlayer.min.css" media="print" onload='this.media="all"'><script src="https://jsd.cdn.storisinz.site/npm/aplayer/dist/APlayer.min.js"></script><script src="https://jsd.cdn.storisinz.site/npm/meting/dist/Meting.min.js"></script><script src="https://jsd.cdn.storisinz.site/npm/pjax/pjax.min.js"></script><script>let pjaxSelectors=["head > title","#config-diff","#body-wrap","#rightside-config-hide","#rightside-config-show","#web_bg",".js-pjax","#bibi","body > title","#app","#tag-echarts","#posts-echart","#categories-echarts"];var pjax=new Pjax({elements:'a:not([target="_blank"]):not([href="/bbs/"])',selectors:pjaxSelectors,cacheBust:!1,analytics:!0,scrollRestoration:!1});document.addEventListener("pjax:send",(function(){if(window.tocScrollFn&&window.removeEventListener("scroll",window.tocScrollFn),window.scrollCollect&&window.removeEventListener("scroll",scrollCollect),"object"==typeof preloader&&preloader.initLoading(),document.getElementById("rightside").style.cssText="opacity: ''; transform: ''",window.aplayers)for(let e=0;e<window.aplayers.length;e++)window.aplayers[e].options.fixed||window.aplayers[e].destroy();"object"==typeof typed&&typed.destroy();const e=document.body.classList;e.contains("read-mode")&&e.remove("read-mode"),"object"==typeof disqusjs&&disqusjs.destroy()})),document.addEventListener("pjax:complete",(function(){window.refreshFn(),document.querySelectorAll("script[data-pjax]").forEach((e=>{const t=document.createElement("script"),o=e.text||e.textContent||e.innerHTML||"";Array.from(e.attributes).forEach((e=>t.setAttribute(e.name,e.value))),t.appendChild(document.createTextNode(o)),e.parentNode.replaceChild(t,e)})),GLOBAL_CONFIG.islazyload&&window.lazyLoadInstance.update(),"function"==typeof chatBtnFn&&chatBtnFn(),"function"==typeof panguInit&&panguInit(),"function"==typeof gtag&>ag("config","G-7MR59SK1DP",{page_path:window.location.pathname}),"object"==typeof _hmt&&_hmt.push(["_trackPageview",window.location.pathname]),"function"==typeof loadMeting&&document.getElementsByClassName("aplayer").length&&loadMeting(),"object"==typeof Prism&&Prism.highlightAll(),"object"==typeof preloader&&preloader.endLoading()})),document.addEventListener("pjax:error",(e=>{404===e.request.status&&pjax.loadUrl("/404.html")}))</script><script async data-prefix="busuanzi_value" data-pjax pjax src="https://jsd.cdn.storisinz.site/npm/penndu@16.0.0/bsz.js"></script></div><script data-pjax>function butterfly_swiper_injector_config(){var s=document.getElementById("recent-posts");console.log("已挂载butterfly_swiper"),s.insertAdjacentHTML("afterbegin",'<div class="recent-post-item" style="height: auto;width: 100%"><div class="blog-slider swiper-container-fade swiper-container-horizontal" id="swiper_container"><div class="blog-slider__wrp swiper-wrapper" style="transition-duration: 0ms;"><div class="blog-slider__item swiper-slide" style="width: 750px; opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;"><a class="blog-slider__img" onclick="pjax.loadUrl("posts/61417/");" href="javascript:void(0);" alt=""><img width="48" height="48" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230128/30165599-36623bea-93a6-11e7-8956-1ddf99ce0e6f.2rbu2i9xfvy0.webp" alt="" onerror="this.src=https://unpkg.zhimg.com/akilar-candyassets/image/loading.gif; this.onerror = null;"/></a><div class="blog-slider__content"><span class="blog-slider__code">2023-01-19</span><a class="blog-slider__title" onclick="pjax.loadUrl("posts/61417/");" href="javascript:void(0);" alt="">自建Meting服务</a><div class="blog-slider__text">Meting官方API用不了了,所以。。。。。</div><a class="blog-slider__button" onclick="pjax.loadUrl("posts/61417/");" href="javascript:void(0);" alt="">详情 </a></div></div><div class="blog-slider__item swiper-slide" style="width: 750px; opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;"><a class="blog-slider__img" onclick="pjax.loadUrl("posts/54481/");" href="javascript:void(0);" alt=""><img width="48" height="48" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/R-C.7iu7u13vibs0.webp" alt="" onerror="this.src=https://unpkg.zhimg.com/akilar-candyassets/image/loading.gif; this.onerror = null;"/></a><div class="blog-slider__content"><span class="blog-slider__code">2023-03-12</span><a class="blog-slider__title" onclick="pjax.loadUrl("posts/54481/");" href="javascript:void(0);" alt="">千千静听复活教程</a><div class="blog-slider__text">中考尚未结束就来更新的屑</div><a class="blog-slider__button" onclick="pjax.loadUrl("posts/54481/");" href="javascript:void(0);" alt="">详情 </a></div></div><div class="blog-slider__item swiper-slide" style="width: 750px; opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;"><a class="blog-slider__img" onclick="pjax.loadUrl("posts/38964/");" href="javascript:void(0);" alt=""><img width="48" height="48" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/msedge_GVRhG42nuu.1g9uz8t24io0.webp" alt="" onerror="this.src=https://unpkg.zhimg.com/akilar-candyassets/image/loading.gif; this.onerror = null;"/></a><div class="blog-slider__content"><span class="blog-slider__code">2023-01-13</span><a class="blog-slider__title" onclick="pjax.loadUrl("posts/38964/");" href="javascript:void(0);" alt="">小康大佬的说说方案 ———— ispeak搭建教程</a><div class="blog-slider__text">这篇文章是我之前写过的教程的重写</div><a class="blog-slider__button" onclick="pjax.loadUrl("posts/38964/");" href="javascript:void(0);" alt="">详情 </a></div></div><div class="blog-slider__item swiper-slide" style="width: 750px; opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;"><a class="blog-slider__img" onclick="pjax.loadUrl("posts/22945/");" href="javascript:void(0);" alt=""><img width="48" height="48" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://jsd.cdn.storisinz.site/gh/SinzMise/MYPictures@master/20230114/logo.22azkjyis5uo.webp" alt="" onerror="this.src=https://unpkg.zhimg.com/akilar-candyassets/image/loading.gif; this.onerror = null;"/></a><div class="blog-slider__content"><span class="blog-slider__code">2023-01-08</span><a class="blog-slider__title" onclick="pjax.loadUrl("posts/22945/");" href="javascript:void(0);" alt="">butterfly主题添加音乐页面(适配手机)</a><div class="blog-slider__text">原先的音乐页面存在BUG:手机访问会错乱,所以我重新找了个音乐播放器源码</div><a class="blog-slider__button" onclick="pjax.loadUrl("posts/22945/");" href="javascript:void(0);" alt="">详情 </a></div></div></div><div class="blog-slider__pagination swiper-pagination-clickable swiper-pagination-bullets"></div></div></div>')}for(var elist="undefined".split(","),cpage=location.pathname,epage="/",flag=0,i=0;i<elist.length;i++)cpage.includes(elist[i])&&flag++;("all"===epage&&0==flag||epage===cpage)&&butterfly_swiper_injector_config()</script><script defer src="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-swiper/lib/swiper.min.js"></script><script defer data-pjax src="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-swiper/lib/swiper_init.js"></script><div class="js-pjax"><script async>for(var arr=document.getElementsByClassName("recent-post-item"),i=0;i<arr.length;i++)arr[i].classList.add("wow"),arr[i].classList.add("animate__zoomIn"),arr[i].setAttribute("data-wow-duration","2s"),arr[i].setAttribute("data-wow-delay","200ms"),arr[i].setAttribute("data-wow-offset","30"),arr[i].setAttribute("data-wow-iteration","1")</script><script async>for(var arr=document.getElementsByClassName("category-bar"),i=0;i<arr.length;i++)arr[i].classList.add("wow"),arr[i].classList.add("animate__zoomIn"),arr[i].setAttribute("data-wow-duration","2s"),arr[i].setAttribute("data-wow-delay","200ms"),arr[i].setAttribute("data-wow-offset","30"),arr[i].setAttribute("data-wow-iteration","1")</script><script async>for(var arr=document.getElementsByClassName("card-widget"),i=0;i<arr.length;i++)arr[i].classList.add("wow"),arr[i].classList.add("animate__zoomIn"),arr[i].setAttribute("data-wow-duration","2s"),arr[i].setAttribute("data-wow-delay","200ms"),arr[i].setAttribute("data-wow-offset","30"),arr[i].setAttribute("data-wow-iteration","1")</script></div><script defer src="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-wowjs/lib/wow.min.js"></script><script defer src="https://jsd.cdn.storisinz.site/npm/hexo-butterfly-wowjs/lib/wow_init.js"></script><script data-pjax src="https://jsd.cdn.storisinz.site/npm/hexo-filter-gitcalendar/lib/gitcalendar.js"></script><script data-pjax>function gitcalendar_injector_config(){document.getElementById("gitZone").insertAdjacentHTML("afterbegin",'<div class="recent-post-item" id="gitcalendarBar" style="width:100%;height:auto;padding:10px;"><style>#git_container{min-height: 320px}@media screen and (max-width:650px) {#git_container{min-height: 0px}}</style><div id="git_loading" style="width:10%;height:100%;margin:0 auto;display: block;"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 50 50" style="enable-background:new 0 0 50 50" xml:space="preserve"><path fill="#d0d0d0" d="M25.251,6.461c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615V6.461z" transform="rotate(275.098 25 25)"><animatetransform attributeType="xml" attributeName="transform" type="rotate" from="0 25 25" to="360 25 25" dur="0.6s" repeatCount="indefinite"></animatetransform></path></svg><style>#git_container{display: none;}</style></div><div id="git_container"></div></div>'),console.log("已挂载gitcalendar")}document.getElementById("gitZone")&&"/site/census/"===location.pathname&&(gitcalendar_injector_config(),GitCalendarInit("/api?null",["#d9e0df","#c6e0dc","#a8dcd4","#9adcd2","#89ded1","#77e0d0","#5fdecb","#47dcc6","#39dcc3","#1fdabe","#00dab9"],"null"))</script></body></html>
|