<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="/atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-CN">
  <title>柯讴朽丘的生活日志</title>
  <subtitle>和喜欢的人在夏日夜晚牵手慢步</subtitle>
  <link href="https://koxiuqiu.cn/atom.xml" rel="self" type="application/atom+xml" />
  <link href="https://koxiuqiu.cn/" rel="alternate" type="text/html" />
  <id>https://koxiuqiu.cn/</id>
  <updated>2026-07-07T16:00:00.000Z</updated>
  <author><name>朽丘秋雨</name><uri>https://koxiuqiu.cn/</uri></author>
  <icon>https://cn-nb1.rains3.com/kxqimage/xiaokezip.png</icon>
  <generator uri="https://hexo.io/">Hexo</generator>
  <entry>
    <title>关于备案、主题开发和短暂停更的一点说明</title>
    <link href="https://koxiuqiu.cn/posts/35p2607081/" rel="alternate" type="text/html" />
    <id>https://koxiuqiu.cn/posts/35p2607081/</id>
    <published>2026-07-07T16:00:00.000Z</published>
    <updated>2026-07-07T16:00:00.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="博客开发" scheme="https://koxiuqiu.cn/categories/%E5%8D%9A%E5%AE%A2%E5%BC%80%E5%8F%91/" label="分类" />
    <category term="通知" scheme="https://koxiuqiu.cn/tags/%E9%80%9A%E7%9F%A5/" label="标签" />
    <category term="博客优化" scheme="https://koxiuqiu.cn/tags/%E5%8D%9A%E5%AE%A2%E4%BC%98%E5%8C%96/" label="标签" />
    <category term="程序更替" scheme="https://koxiuqiu.cn/tags/%E7%A8%8B%E5%BA%8F%E6%9B%B4%E6%9B%BF/" label="标签" />
    <summary type="text">别来无恙。 最近小站长时间访问不了，并不是跑路，也不是又双叒叕出什么问题了，只是最近正在处理备案相关的事情。原本以为这件事一周左右就能走完流程，结果中途被一些历史遗留问题卡住了，进度比预想中慢了很多。 简单说一下：我以前所在公司的域名联系人信息里，还留着我的联系方式。这个信息和我自己的备案产生了冲突，导致个人备案被退回。最开始对方说三天左右能处理好，我想着个人备案提交到管局也需要时间，就又重新提交了一次，打算把时间卡上。 结果三天过去了，问题并没有解决，于是备案又被驳回。第三次提交已经是半个月后的事情了，那段时间我个人生活也比较忙，就没有第一时间恢复小站...</summary>
    <content type="html"><![CDATA[<p>别来无恙。</p>
<p>最近小站长时间访问不了，并不是跑路，也不是又双叒叕出什么问题了，只是最近正在处理备案相关的事情。原本以为这件事一周左右就能走完流程，结果中途被一些历史遗留问题卡住了，进度比预想中慢了很多。</p>
<p>简单说一下：我以前所在公司的域名联系人信息里，还留着我的联系方式。这个信息和我自己的备案产生了冲突，导致个人备案被退回。最开始对方说三天左右能处理好，我想着个人备案提交到管局也需要时间，就又重新提交了一次，打算把时间卡上。</p>
<p>结果三天过去了，问题并没有解决，于是备案又被驳回。第三次提交已经是半个月后的事情了，那段时间我个人生活也比较忙，就没有第一时间恢复小站。因为已经决定走备案，所以服务器也先换到了大陆，到时候备案通过后解析过去就行，没想到真正拖住我的反而不是博客本身。</p>
<p>后续这半个月里，沟通也比较反复。有时候联系不上，有时候说着说着就没下文了，换其他负责人也基本没有结果。最后是临时用了其他联系方式，才勉强把联系人冲突的问题处理过去一点。目前我仍然在尝试联系相关人员把剩下的问题彻底理顺，不过我毕竟已经不在那里工作了，也不再负责帮他们处理这些事情，这本来也不是我的义务。</p>
<p>然后就是又过去一个月，这个文章是再7月8日凌晨的时候临时编写的，实际上恢复那天我构建了这个文件我也不知道是什么时候你们能看到哈哈哈</p>
<aside class="stellar-note">这段不是为了抱怨谁，只是给大家解释一下为什么最近小站状态不稳定。能打开的时候就当小站探头，打不开的时候就当它还在备案流程里排队发呆。</aside>

<hr>
<h1 id="主题开发也没有停"><a href="#主题开发也没有停" class="headerlink" title="主题开发也没有停"></a>主题开发也没有停</h1><p>虽然博客外部访问有点折腾，但这段时间主题开发其实一直在往前推进。更准确一点说，是从最开始的“能用就行”，慢慢变成了“既要好看，也要顺手，还要能兼容以前的文章”。</p>
<p>这套主题现在已经不只是简单的 Hexo 皮肤了，里面塞了不少真正围绕自己写作习惯做出来的东西：</p>
<section class="stellar-progress"><header>主题开发进度</header><ul class="stellar-progress__items"><li class="stellar-progress__item stellar-progress__item--done"><span>完成</span><p>双主题模式已经完成，默认主题偏粉白二次元，简约主题则偏纸张阅读模式。</p></li><li class="stellar-progress__item stellar-progress__item--done"><span>完成</span><p>首页焦点、轮播、人员卡片、移动端折叠与文章卡片动效都做过多轮优化。</p></li><li class="stellar-progress__item stellar-progress__item--done"><span>完成</span><p>秘密空间、关于页面、小站历史、足迹、时光画廊这些互动页面已经搭出雏形。</p></li><li class="stellar-progress__item stellar-progress__item--done"><span>完成</span><p>说说页面改成了瀑布流，也兼容 Markdown、图片和 Artalk 留言。</p></li><li class="stellar-progress__item stellar-progress__item--done"><span>完成</span><p>文章页适配了目录、图片放大、Artalk 评论区样式、路由规范化和旧文章语法。</p></li><li class="stellar-progress__item stellar-progress__item--doing"><span>进行中</span><p>继续补 Stellar 外挂标签兼容，以及一些适合日常写文的小组件。</p></li><li class="stellar-progress__item stellar-progress__item--doing"><span>进行中</span><p>同时也准备开发自己喜欢的样式，想要什么弄什么。</p></li><li class="stellar-progress__item stellar-progress__item--todo"><span>待办</span><p>等设备稳定后，再慢慢补主题细节、页面内容和更多小功能。</p></li></ul></section>

<p>其中最折腾的部分，反而不是某个单独页面，而是“兼容”。以前的文章来自其他框架和主题，里面有很多不同写法，比如普通 Markdown 图片、Stellar 外挂标签、各种折叠块和提示块。为了让老文章不要一构建就炸，主题里专门补了一层兼容逻辑。</p>
<p>最近还顺手做了几件很细的小事：比如没有封面的文章不再硬塞封面模块；首页焦点会优先读取置顶文章；文章列表卡片高度统一；图片拖动保护和图片来源弱隐藏也做了开关；本地访问 <code>/index.html</code>、<code>/index,html</code> 或者少了末尾斜杠时，也会被规范到正常目录。</p>
<hr>
<h1 id="关于某位闺蜜和灵感互抄"><a href="#关于某位闺蜜和灵感互抄" class="headerlink" title="关于某位闺蜜和灵感互抄"></a>关于某位闺蜜和灵感互抄</h1><p>顺便轻松吐槽一下，<a href="https://www.xscnet.cn/">Mete0r</a> ，闺蜜闺蜜，我们这样互相抄袭主题设计的鬼点子创意真的没问题吗：（</p>
<p>至于我从零写自己的主题，和闺蜜那边的站点之间有什么瓜葛，只能说：有些鬼点子实在太好抄了，当然也可能是我这边写着写着，对方看着看着，然后双方都露出了“你这设计怎么有点眼熟”的表情。</p>
<section class="stellar-chat"><header>灵感互抄小剧场</header><div class="stellar-chat__body"><div class="stellar-chat__item stellar-chat__item--me"><span>小柯</span><p>我一个个抄袭，闺蜜闺蜜</p></div><div class="stellar-chat__item stellar-chat__item--friend"><span>Mete0r</span><p>嘿嘿</p></div><div class="stellar-chat__item stellar-chat__item--me"><span>小柯</span><p>没招了</p></div><div class="stellar-chat__item stellar-chat__item--friend"><span>Mete0r</span><p>我现在已经全量上线了</p></div><div class="stellar-chat__item stellar-chat__item--note"><p>以上为玩笑吐槽，主打一个互相迫害。相似设计更多是审美和灵感互相影响，不是正经吵架。</p></div></div></section>

<p>所以如果你看到两边主题设计里有一些雷同的地方，也不用太震惊。博客圈嘛，很多时候就是你给我一点灵感，我给你一点灵感，最后大家都在对方的脑洞里添砖加瓦。只要不是恶意照搬，反而还挺有趣。</p>
<p>当然，我这边还是会尽量继续做出自己的味道。默认主题会继续保留二次元、粉白、轻互动的方向；简约主题则会尽量服务阅读，不搞太多花活。两套主题各走各的路，互相不拖后腿。</p>
<hr>
<h1 id="接下来可能会短暂停更"><a href="#接下来可能会短暂停更" class="headerlink" title="接下来可能会短暂停更"></a>接下来可能会短暂停更</h1><p>最后说一下更新安排。</p>
<p>随便水水的。博主目前紧急前往外地出差，暂时没有稳定设备，接下来可能无法持续更新，也可能没有办法及时修主题里的小问题。后续大概率需要重新采购设备，但什么时候能弄好还不确定。</p>
<p>所以这段时间如果文章更新变慢、功能修复不及时，就先当它进入了“出差省电模式”。等备案和设备都稳定下来，再慢慢回来补。</p>
<p>总之，小站还在，人也还在，只是最近事情有点多。感谢还愿意点进来看一眼的朋友。</p>
]]></content>
  </entry>
  <entry>
    <title>如何启用域名DNSSEC的设置以及吃瓜某蒂云服务商跑路这件事</title>
    <link href="https://koxiuqiu.cn/posts/34p2605101/" rel="alternate" type="text/html" />
    <link href="https://cn-nb1.rains3.com/kxqimage/img/20260510220931694.webp" rel="enclosure" type="image/webp" />
    <id>https://koxiuqiu.cn/posts/34p2605101/</id>
    <published>2026-05-10T13:50:00.000Z</published>
    <updated>2026-05-10T13:50:00.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="学习笔记" scheme="https://koxiuqiu.cn/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/" label="分类" />
    <category term="DNSSEC" scheme="https://koxiuqiu.cn/tags/DNSSEC/" label="标签" />
    <category term="域名" scheme="https://koxiuqiu.cn/tags/%E5%9F%9F%E5%90%8D/" label="标签" />
    <category term="域名安全" scheme="https://koxiuqiu.cn/tags/%E5%9F%9F%E5%90%8D%E5%AE%89%E5%85%A8/" label="标签" />
    <summary type="text">别来无恙；有一段时间不在互联网冒头了，特意来水一下表示我活着。 最近发生的事情有些多，最近的一件事情相信各位IT都有所了解，前段时间在忙也就没怎么特别区了解。关于某蒂云服务商破产清算这件事，也就是跑路。（详细吃瓜可以翻到下边看。 不过主要是聊聊关于域名保护。 域名DNSSEC(本主题) DNSSEC（DNS 安全扩展）提供了来源鉴定和数据完整性的扩展，有助于防止 DNS 缓存污染等恶意行为。 什么是DNSSEC DNSSEC（Domain Name System Security Extensions，域名系统安全扩展） ，可以把它理解为 互联网域名的“...</summary>
    <content type="html"><![CDATA[<p>别来无恙；有一段时间不在互联网冒头了，特意来水一下表示我活着。</p>
<hr>
<p>最近发生的事情有些多，最近的一件事情相信各位IT都有所了解，前段时间在忙也就没怎么特别区了解。关于某蒂云服务商破产清算这件事，也就是跑路。（详细吃瓜可以翻到下边看。</p>
<p>不过主要是聊聊关于域名保护。</p>
<h1 id="域名DNSSEC-本主题"><a href="#域名DNSSEC-本主题" class="headerlink" title="域名DNSSEC(本主题)"></a>域名DNSSEC(本主题)</h1><blockquote>
<p>DNSSEC（DNS 安全扩展）提供了来源鉴定和数据完整性的扩展，有助于防止 DNS 缓存污染等恶意行为。</p>
</blockquote>
<h2 id="什么是DNSSEC"><a href="#什么是DNSSEC" class="headerlink" title="什么是DNSSEC"></a>什么是DNSSEC</h2><p><strong>DNSSEC（Domain Name System Security Extensions，域名系统安全扩展）</strong>，可以把它理解为<strong>互联网域名的“防伪验真系统”</strong>。</p>
<p>常规DNS就像一本没有防伪标识的通讯录，负责把域名（网址）翻译成服务器IP地址，方便设备联网访问；而DNSSEC是给这本通讯录加装加密防伪标签，依托密码学技术，搭配数字签名、数据校验、密钥管理三大机制，给每一条域名解析记录上锁。</p>
<p>简单来说，它的核心作用就是：<strong>保证你查到的域名解析信息真实、未被篡改</strong>，从根源抵御网络中间人篡改、域名伪造等恶意攻击，弥补传统DNS天生的安全漏洞。</p>
<blockquote>
<p><strong>术语标注</strong>：密码学 → 一门通过加密算法保护数据、防止信息泄露篡改的技术学科；数字签名 → 相当于网络数据的“手写防伪签章”，唯一且不可仿制。</p>
</blockquote>
<p>但是开启是有一些问题来着，这是我所了解过的一些问题，在兼容性、访问速度、使用门槛上存在弊端。</p>
<h2 id="解析失败"><a href="#解析失败" class="headerlink" title="解析失败"></a>解析失败</h2><p>目前仍有大量老旧DNS解析服务器，硬件系统、程序版本落后，<strong>不兼容DNSSEC验证协议</strong>。部分传统宽带运营商的DNS服务器，未开通DNSSEC校验功能，无法识别加密签名记录，最终出现解析报错、网页打不开等问题。</p>
<p>海外比较场景？至少我目前就是如此，不过貌似不影响搜索引擎应该是没什么大问题，域名没有锁死后续有什么问题在动态关闭吧。</p>
<p>除此之外，开启DNSSEC后，域名将<strong>不支持子域名托管</strong>，对有子域名部署需求的用户限制较大。</p>
<h2 id="轻微影响使用体验"><a href="#轻微影响使用体验" class="headerlink" title="轻微影响使用体验"></a>轻微影响使用体验</h2><p>DNSSEC为完成完整验真流程，需要额外查询四类加密解析记录：<strong>DNSKEY（公钥记录）、RRSIG（数字签名记录）、DS（密钥摘要记录）、NSEC（域名不存在验证记录）</strong>，多轮查询核验会拉长解析耗时。</p>
<p>正常情况下，开启DNSSEC后解析延迟会增加10~50ms。该延迟对普通网页浏览几乎无感知，但对实时网络游戏、高频金融交易、直播推流等对时延高度敏感的场景，会产生直观负面影响。同时，为保障签名时效性，会缩短数据缓存时效（TTL），服务器需要频繁重复核验数据，加重网络运行负载。</p>
<blockquote>
<p><strong>术语标注</strong>：TTL（缓存生存时间），指数据在服务器缓存中保留的时长，时长越短，重复查询频率越高。</p>
</blockquote>
<h2 id="如何开启DNSSEC"><a href="#如何开启DNSSEC" class="headerlink" title="如何开启DNSSEC"></a>如何开启DNSSEC</h2><figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260510221158583.png" alt="" loading="lazy" decoding="async"></figure>

<p>以腾讯云为例子，找到对应的操作台(不懂的看本文下方一个目录”付费开启的问题”里有写)然后添加DNSSEC，加密算法和摘要类型要确定好没要选错。</p>
<p>然后前往cloudflare或者是华W云国际版获取记录，都是先在平台添加好自己域名然后找到DNSSEC，开启之后获取对应的信息，cloudflare分别是：<code>摘要</code> <code>密钥标记</code>，华W云国际版就是<code>密钥标签</code> <code>摘要</code> 。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260510221300012.png" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260510221350573.png" alt="" loading="lazy" decoding="async"></figure>

<h2 id="如何验证开启"><a href="#如何验证开启" class="headerlink" title="如何验证开启"></a>如何验证开启</h2><p><a href="https://who.cx/">WHO.CX - Whois查询</a>现以支持直接查询，直接输入自己域名查询即可，如果ＷＨＯ出现很杂乱的广告请通知我，会更新文章并寻找替补服务。</p>
<h2 id="付费开启的问题"><a href="#付费开启的问题" class="headerlink" title="付费开启的问题"></a>付费开启的问题</h2><p>大陆两大巨头目前都是给付费用户提供服务，不过我的话腾讯云也是可以开的，你可以选择先登录好平台然后使用：<a href="https://console.cloud.tencent.com/domain/all-domain/all">我的域名 - 域名注册 - 控制台</a> 进入域名管理，然后点进去域名管理找到域名安全翻最下边就可以看到一个DNSSEC，这里就可以添加DNSSEC记录,其余就不知道了。</p>
<hr>
<h1 id="服务商倒闭-题外话"><a href="#服务商倒闭-题外话" class="headerlink" title="服务商倒闭(题外话)"></a>服务商倒闭(题外话)</h1><figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260510221429189.png" alt="" loading="lazy" decoding="async"></figure>

<p>如图，老牌知名云服务商狐 * 云正式官宣停止运营、进入破产清算流程。</p>
<p>其实在官方公告发布之前，网上就已经出现不少吐槽这家厂商的声音。我当时也专门私下核实过相关情况，不会随意跟风吃瓜、乱传不实消息。我一直秉持一个原则：<strong>没有官方实锤和明确依据，绝不随便造谣传谣</strong>。</p>
<p>平台维护没维持几天，在 5 月 7 日前后，圈内就开始流出服务商疑似跑路的消息。等到凌晨一两点，官方正式公告终于落地，确认停运营消息属实。这件事也挺让人意外，我一直关注到将近凌晨四点才休息。</p>
<hr>
<p>2026 年 5 月初，主打低价套餐、永久服务器套餐的深 * 市狐 * 云网络科技有限公司，资金链彻底断裂，全线业务宣告停摆。</p>
<p>期间官网出现无法访问情况（并非关停，只是短时受攻击影响），大批服务器集中下线，用户数据被锁无法正常取回，不少站长、个人开发者和小型小微企业都受到不小损失。(不过后续都给办法提取了,上游宿主机服务商自费赞助)</p>
<p>这次崩盘绝非偶然。直白来讲：<strong>IDC 行业靠永久套餐、超低价引流的畸形运营模式，已经走到了尽头</strong>。</p>
<p>这类靠新用户充值兜底、维持旧用户服务的经营模式，本身就不符合正常商业逻辑，一旦新增用户停滞，资金链断裂只是迟早的事。</p>
<h2 id="办公地址虚假"><a href="#办公地址虚假" class="headerlink" title="办公地址虚假"></a>办公地址虚假</h2><p>起初是有厂商的线下办公公司地址被查，是虚假地址，而且挂牌居然还是另一家公司；</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260510221459788.png" alt="" loading="lazy" decoding="async"></figure>

<p>其实到这一步我反倒没太意外，因为行业里这类情况其实挺常见的。对我个人来说，只要服务商服务稳定、使用体验在线、口碑靠谱，有些行业潜规则我并不会过分纠结。</p>
<p>当然我也不是偏袒这家服务商，从它推出所谓永久机型、定价远低于行业成本这些操作开始，我心里就一直留有顾虑和防备，也<strong>从来不会把重要业务、生产项目放到这类平台</strong>，始终保持谨慎不重仓。</p>
<p>不过对此老板的解释是去的地方是错的，不过说这话的重要性已经不高了其实；</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260510221629127.png" alt="" loading="lazy" decoding="async"></figure>

<h2 id="资金亏损破产"><a href="#资金亏损破产" class="headerlink" title="资金亏损破产"></a>资金亏损破产</h2><p>现在说的是公司账户上已经资金全部亏损贴补完了，老板和公司账户上资金基本赔完，甚至传出了“老板已经在撸网dai”的消息了；不过也只是听说了，老板给我带来的印象还是良好的。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260510221703598.png" alt="" loading="lazy" decoding="async"></figure>

<p>目前官网也已经发布了最新通告，不过其实相对于之前杜老师遇到的跑路服务商现象貌似好很多，至少还通知你了，也想办法去要点时间迁移。（不过我好像看到了付费拿数据的字眼，不过貌似不是全部都是付费拿数据）</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260510221754432.png" alt="" loading="lazy" decoding="async"></figure>

<p>永久云服务器崩盘复盘：低价永久终究是套路吗？</p>
<h2 id="大致经过复盘"><a href="#大致经过复盘" class="headerlink" title="大致经过复盘"></a>大致经过复盘</h2><h3 id="伏笔"><a href="#伏笔" class="headerlink" title="伏笔"></a>伏笔</h3><p>其实早在2025年底，这家服务商就已经破绽百出。</p>
<p>2026年元旦，官方直接官宣修改代理规则，直白承认旗下代理管控混乱，滋生了大量违规项目。不仅平台承压，其合作业务还被华为云清退。</p>
<p>说白了，<strong>合规问题早就亮红灯，业务根基从那时候就不稳了</strong>，这次崩盘只是时间问题。</p>
<h3 id="出事"><a href="#出事" class="headerlink" title="出事"></a>出事</h3><p>5月7日左右，平台全面崩盘，场面彻底失控：</p>
<ul>
<li><strong>官网瘫痪</strong>：官方域名频繁报错，间歇性无法访问；</li>
<li><strong>数据备份困难</strong>：官方通知用户自行备份数据，但服务器提前下线，多数用户无法连通机器。后续服务器重新开机，值得好评的是，上游宿主机服务商主动自费协助用户导出数据，良心程度拉满；</li>
<li><strong>大规模用户维权</strong>：大量受害用户扎堆建维权群。有人几百元入坑，也有人上万投入、多账号持仓，目前统计表格里的集体亏损金额接近八十万。我个人观点：现在很多维权群本质只是引流、搞二次推广，实际维权作用微乎其微。</li>
</ul>
<p>现阶段，最大的接盘者就是近期刚入手机器的用户。直白点说就是踩坑韭菜；反观早期上车、成本已经回本的用户，基本没有损失，正常备份数据即可。</p>
<h2 id="关于本次崩盘的个人看法"><a href="#关于本次崩盘的个人看法" class="headerlink" title="关于本次崩盘的个人看法"></a>关于本次崩盘的个人看法</h2><p>很多人疑惑，好好的云服务商怎么说没就没？直白来讲，这家平台的商业模式从一开始就是死局。</p>
<h3 id="1、永久服务器的底层模式"><a href="#1、永久服务器的底层模式" class="headerlink" title="1、永久服务器的底层模式"></a>1、永久服务器的底层模式</h3><p>市面上这种低价永久服务器，商业模式偏向资金流转模式。</p>
<p>稍微懂点行业常识都明白：云服务器不存在真正意义上的永久低价。硬件存在物理损耗、机房需要电费、IP成本、运维成本，每一台机器每一天都在产生开销。</p>
<p>低价买断终身使用权，本身就违背正常的经济逻辑。平台只能不断吸纳新用户充值，用新进用户的资金填补前期运营窟窿。<strong>一旦没有新用户入场，资金链会瞬间断裂</strong>，跑路、崩盘都是必然结果。</p>
<h3 id="2、服务器质量与行业超售现状"><a href="#2、服务器质量与行业超售现状" class="headerlink" title="2、服务器质量与行业超售现状"></a>2、服务器质量与行业超售现状</h3><p>这家服务商后期质量是否肉眼下降，我不作评价。早期它推广流量巨大，我并没有看到大量性能拉胯的负面反馈。</p>
<p>但绝大多数低价服务商，都会采用行业通用手段：<strong>宿主机超售超开</strong>，压缩硬件成本。</p>
<p>什么是超售？简单说：卖出的资源份额，大于物理服务器本身的硬件承载上限。</p>
<p>举个通俗易懂的例子：</p>
<p>一台物理机硬件为4核4G，采用KVM架构。正常1核1G的配置，最多只能拆分4台虚拟机。</p>
<p>而超售就是：在同一台物理机上硬开出8台虚拟机。</p>
<p>核心逻辑为<strong>CPU超售、内存不超售</strong>，把有限的算力分摊给更多用户使用。</p>
<p>客观来讲，如果商家提前告知、价格极低，一个愿打一个愿挨，我对此没有任何意见。</p>
<h3 id="3、个人客观观点"><a href="#3、个人客观观点" class="headerlink" title="3、个人客观观点"></a>3、个人客观观点</h3><p>在我眼里，合理超开、动态调节性能完全可以接受。</p>
<p>只要我需要性能跑任务的时候，机器能达标；闲置的时候资源回收，用来分给其他用户，这种模式完全合理。</p>
<p>哪怕是一线大厂，低配机器同样卡顿、争抢资源。底层逻辑永远都是一台物理机拆分给多名用户共用。</p>
<p>云行业永远遵循：一分钱一分货。想要稳定、独享、高性能，只能加预算上高配独享机。</p>
<blockquote>
<p>来源于其他服务商：</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260510221834980.png" alt="" loading="lazy" decoding="async"></figure>
</blockquote>
<h2 id="其他看法"><a href="#其他看法" class="headerlink" title="其他看法"></a>其他看法</h2><p>关于服务商挑选，我自己有一套长期实用的判断逻辑。低价机器可以碰，但一定要明白它为什么便宜；所有看似不合理的低价背后，必然有对应的因果和成本缺陷。</p>
<p>我的建议很直白：<strong>不是不能用低价机，而是尽量选择短期付费模式</strong>。按月、按年续费最为稳妥，千万不要一时冲动大额预充、一次性砸太多额度，日常使用额度够用就好，克制大额充值欲望。</p>
<p>哪怕是使用一线大厂，我也坚持多重备份策略：月度完整大备份、每日增量小备份。这都是往年多次丢失数据踩坑换来的实战经验，数据永远是自己的底线。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260510221906968.png" alt="" loading="lazy" decoding="async"></figure>

<p>最后总结一句：低价机可以正常使用，前提是认清机器定位、做好数据防护、理性把控预算。认准靠谱平台后，不要因为一点小问题就频繁换服务商跳槽。小白建议稳定稳妥好，毕竟不是和我们一样的老油条，更别提老油条也有时候脑子糊涂中招……</p>
<p>本人不接任何广告，没有恰饭推广，如果需要靠谱平台参考建议，私下交流即可。</p>
]]></content>
  </entry>
  <entry>
    <title>快速登记自己的作品版权合法保护自己的绘画等艺术作品</title>
    <link href="https://koxiuqiu.cn/posts/33p2604191/" rel="alternate" type="text/html" />
    <link href="https://cn-nb1.rains3.com/kxqimage/img/20260419232757028.webp" rel="enclosure" type="image/webp" />
    <id>https://koxiuqiu.cn/posts/33p2604191/</id>
    <published>2026-04-19T15:05:00.000Z</published>
    <updated>2026-04-19T15:05:00.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="学习笔记" scheme="https://koxiuqiu.cn/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/" label="分类" />
    <category term="版权保护" scheme="https://koxiuqiu.cn/tags/%E7%89%88%E6%9D%83%E4%BF%9D%E6%8A%A4/" label="标签" />
    <category term="原创创作" scheme="https://koxiuqiu.cn/tags/%E5%8E%9F%E5%88%9B%E5%88%9B%E4%BD%9C/" label="标签" />
    <category term="版权登记流程" scheme="https://koxiuqiu.cn/tags/%E7%89%88%E6%9D%83%E7%99%BB%E8%AE%B0%E6%B5%81%E7%A8%8B/" label="标签" />
    <summary type="text">别来无恙；来听一首音乐吗？ 网易云音乐 打开歌曲 关于本文 突然想到一个很刺眼的问题：太多创作者根本不会保护自己的 OC。 熬夜构思的设定、精心塑造的灵魂，随便被人抄袭盗用、私自二改流转，更过分的是直接抢注版权，把别人的心血据为己有。 属于自己的东西，怎么能任由外人觊觎偷窃？ 所以，我打算简单的分享一下给oc上版权，将oc彻底确权，牢牢锁死、杜绝一切窥探与盗取的经过吧。 准备材料 准备两三张张自己OC图片就好了，比如白底和其他颜色的底色，很简单，如果有三视图那就更好了，更完整的图片有助于追责。 然后是自己的实名认证，身份证正反面。 原创作品，尽量完整的图...</summary>
    <content type="html"><![CDATA[<p>别来无恙；来听一首音乐吗？</p>
<figure class="stellar-music stellar-music--netease" data-music-service="netease"><div class="stellar-music__player"></div><figcaption class="stellar-music__meta"><span>网易云音乐</span><a href="https://music.163.com/#/song?id=2062401413" target="_blank" rel="noopener noreferrer">打开歌曲</a></figcaption></figure>

<hr>
<h2 id="关于本文"><a href="#关于本文" class="headerlink" title="关于本文"></a>关于本文</h2><p>突然想到一个很刺眼的问题：太多创作者根本不会保护自己的 OC。</p>
<p>熬夜构思的设定、精心塑造的灵魂，随便被人抄袭盗用、私自二改流转，更过分的是直接抢注版权，把别人的心血据为己有。</p>
<blockquote>
<p>属于自己的东西，怎么能任由外人觊觎偷窃？</p>
</blockquote>
<p>所以，我打算简单的分享一下给oc上版权，将oc彻底确权，牢牢锁死、杜绝一切窥探与盗取的经过吧。</p>
<h2 id="准备材料"><a href="#准备材料" class="headerlink" title="准备材料"></a>准备材料</h2><p>准备两三张张自己OC图片就好了，比如白底和其他颜色的底色，很简单，如果有三视图那就更好了，更完整的图片有助于追责。</p>
<p>然后是自己的实名认证，身份证正反面。</p>
<ol>
<li>原创作品，尽量完整的图片如三视图没有也可以</li>
<li>身份证信息，需要正反面提供，10日工作日审核的则是多需要一个手持身份证</li>
</ol>
<hr>
<p>不过，完善作品的同时，还请保留自己的作品材料（不是提交材料）：</p>
<ul>
<li><strong>PS 分层工程源文件（.psd）</strong></li>
</ul>
<p>核心最强有力证据：分层图层、手绘草稿层、线稿层、上色分层、修改痕迹，直接证明<strong>你独立创作、创作过程</strong>。</p>
<ul>
<li><strong>多版本成品图</strong></li>
</ul>
<p>透明底、白底、三视图等成品图，用于区分最终定稿版本，方便对比盗图篡改。</p>
<ul>
<li><strong>二传 &#x2F; 过程截图</strong></li>
</ul>
<p>中途发过的碎片、局部图、草稿分享记录，形成<strong>时间线闭环</strong>。</p>
<ul>
<li><strong>作品完成时间</strong></li>
</ul>
<p>锁定<strong>创作完成时间节点</strong>，防止反咬，比如说创作截图下边先事先开个北京时间站点什么的？</p>
<hr>
<h2 id="开始操作"><a href="#开始操作" class="headerlink" title="开始操作"></a>开始操作</h2><p>在WX小程序搜索<strong>中胤</strong>，读音为：<code>zhongyin</code></p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260419225801414.png" alt="" loading="lazy" decoding="async"></figure>

<p>然后直接关注，并打开菜单版权平台，找到版权登记入口，这时候他会跳转到一个文章图片，点击就会自动打开小程序。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260419225747512.png" alt="" loading="lazy" decoding="async"></figure>

<p>点进去后就会直接让你开始操作地方版权，这时候可以不着急，先点击左上角的<strong>小房子</strong>图标返回主页，点击我的登记，然后把自己的个人信息完善一下，申请人列表添加好自己的<strong>实名创作者</strong>信息。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260419225648866.png" alt="" loading="lazy" decoding="async"></figure>

<p>要保证是自己的信息，最好不要接用其他人，填写好代表法人就行。</p>
<p>然后返回菜单找到下方的地方版权开始登记，建议是先完成审核证书下来之后在发表自己的oc，所以这里填写好信息上传好图片之后，选择未发表，签名。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260419225609031.png" alt="" loading="lazy" decoding="async"></figure>

<p>设置好之后下一步就是补充作品说明，著作人就是之前添加过的法人信息，作者和著作人都选择好就行，如果是多人创作的话可能比较复杂了，建议是自己创作，其他资料就可以上传自己的创作经历截图，注意有时间证明，如果是文字作品就是需要提供完整的背景啊设定等，接着签名就可以直接下一步了！</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260419225549353.png" alt="" loading="lazy" decoding="async"></figure>

<p>接下来就是最后一步，提交版权给版权局了。需要注意的是，工作日不包括周末和节假日，如版权局不上班不通过可全额退款，平台承担官费，这个平台貌似亏本帮助别人的，压力很大。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260419225525875.png" alt="" loading="lazy" decoding="async"></figure>

<p>如果你想免费注册版权就使用第一个的59个自然日，等两个月左右就可以下证了，如果等不及可以选择10个工作日或者其他的，20个工作日记得应该就是需要手持身份证的，比较麻烦，根据官方说法是版权局最新要求的，没办法。</p>
<p>如果你在之前的第一步绑定好通知了，开始审核、下证书都会通知你的，耐性等待就好！下证之后就可以在<strong>我的登记</strong>里面找到已下证下载证书了！</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260419225501676.png" alt="" loading="lazy" decoding="async"></figure>

<h2 id="其他注意"><a href="#其他注意" class="headerlink" title="其他注意"></a>其他注意</h2><p>需要注意的是，同一个人是可以重复提交的，这个没事，并且如果自己提交了但是后边又做了一些细小改动也可以不用重复提交的，都是生效的。官方说法就是这样的。</p>
<blockquote><p>没有审核的可以自己撤回，审核中（办理中）的无法撤回，提交时系统提示过你，请谨慎登记，作品小改动不影响，改动较多可以再次登记，同一个人名下可以重复登记，名称重复也可以；也可以加上比如孙悟空2.0版本，3.0版本；如果要强制撤回，需要提供材料，安排工作人员拿着材料 线下开车去版权局一趟，帮忙强制撤回，很麻烦，并且需要补贴一定费用，不过大部分费用由平台承担。（通过下证的无法撤回）</p>
</blockquote>

<p>整体上的操作其实没什么复杂的，无非就是准备点材料，提交，然后就是等待就行，十分方便，睡前十分钟就可以解决，后续有什么疑问可以留言交流。</p>
]]></content>
  </entry>
  <entry>
    <title>实现Artalk中间页安全跳转和表情包小图BUG预览</title>
    <link href="https://koxiuqiu.cn/posts/32p2604141/" rel="alternate" type="text/html" />
    <link href="https://cn-nb1.rains3.com/kxqimage/img/20260414213556660.png" rel="enclosure" type="image/png" />
    <id>https://koxiuqiu.cn/posts/32p2604141/</id>
    <published>2026-04-14T13:35:00.000Z</published>
    <updated>2026-04-14T13:35:00.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="博客开发" scheme="https://koxiuqiu.cn/categories/%E5%8D%9A%E5%AE%A2%E5%BC%80%E5%8F%91/" label="分类" />
    <category term="教程" scheme="https://koxiuqiu.cn/tags/%E6%95%99%E7%A8%8B/" label="标签" />
    <category term="博客优化" scheme="https://koxiuqiu.cn/tags/%E5%8D%9A%E5%AE%A2%E4%BC%98%E5%8C%96/" label="标签" />
    <category term="JavaScript" scheme="https://koxiuqiu.cn/tags/JavaScript/" label="标签" />
    <category term="安全" scheme="https://koxiuqiu.cn/tags/%E5%AE%89%E5%85%A8/" label="标签" />
    <summary type="text">别来无恙；来首歌听听？ 网易云音乐 打开歌曲 关于本文 操作之前建议整个HEXO目录备份一下，养成好习惯方便回退 Artalk 评论区表情包优化教程（放大显示）以及评论区链接跳转实现中间页安全跳转！ 文章和站点渲染的链接跳转参考： 给Hexo和留言添加跳转中间页 - 朽丘秋雨 以及柳哥哥的插件 安全跳转页面·插件版 | LiuShen’s Blog 需要注意的是，柳神的插件是和本教程冲突的，如果安装了，需要前往hexo配置文件关闭插件： 1 2 3 4 hexo_safego: # 基本功能设置 general: enable: false # 启用插件...</summary>
    <content type="html"><![CDATA[<p>别来无恙；来首歌听听？</p>
<figure class="stellar-music stellar-music--netease" data-music-service="netease"><div class="stellar-music__player"></div><figcaption class="stellar-music__meta"><span>网易云音乐</span><a href="https://music.163.com/#/song?id=1337702711" target="_blank" rel="noopener noreferrer">打开歌曲</a></figcaption></figure>

<hr>
<h2 id="关于本文"><a href="#关于本文" class="headerlink" title="关于本文"></a>关于本文</h2><p><strong>操作之前建议整个HEXO目录备份一下，养成好习惯方便回退</strong></p>
<blockquote>
<p>Artalk 评论区表情包优化教程（放大显示）以及评论区链接跳转实现中间页安全跳转！</p>
</blockquote>
<p>文章和站点渲染的链接跳转参考：<a href="https://koxiuqiu.cn/posts/25p26191/">给Hexo和留言添加跳转中间页 - 朽丘秋雨</a>以及柳哥哥的插件<a href="https://blog.liushen.fun/posts/1dfd1f41/">安全跳转页面·插件版 | LiuShen’s Blog</a></p>
<p>需要注意的是，柳神的插件是和本教程冲突的，如果安装了，需要前往hexo配置文件关闭插件：</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></pre></td><td class="code"><pre><span class="line">hexo_safego:</span><br><span class="line">  # 基本功能设置</span><br><span class="line">  general:</span><br><span class="line">    enable: false                # 启用插件</span><br></pre></td></tr></table></figure>

<p>支持柳神插件的是twikoo，<a href="https://koxiuqiu.cn/posts/25p26191/">给Hexo和留言添加跳转中间页 - 朽丘秋雨</a>，本教程的Artalk中间页自带渲染整站点。</p>
<hr>
<p>本文为 <strong>保姆级教程</strong><span class="stellar-blur">(也许吧)</span>，全程无复杂操作，只需按步骤复制、粘贴、替换，即可实现两个核心功能：</p>
<ul>
<li>评论区表情包默认放大显示，解决模糊、尺寸过小问题</li>
<li>点击表情包弹出超大预览，预览尺寸清晰且不变形</li>
<li>安全跳转中间页，更安全的跳转方式</li>
</ul>
<p>适用场景：使用 <strong>hexo-theme-stellar 主题</strong>，<strong>Artalk</strong> 评论已安装并正常使用（其他使用 <strong>Artalk</strong> 的主题可参考，核心步骤一致）。</p>
<h2 id="一、前期准备"><a href="#一、前期准备" class="headerlink" title="一、前期准备"></a>一、前期准备</h2><h3 id="确认文件路径"><a href="#确认文件路径" class="headerlink" title="确认文件路径"></a>确认文件路径</h3><p>本次修改的核心文件为 Artalk 评论样式文件，默认路径（hexo-theme-stellar 主题）：</p>
<blockquote>
<p>hexo-theme-stellar&#x2F;source&#x2F;css&#x2F;_plugins&#x2F;comments&#x2F;artalk.styl</p>
</blockquote>
<p>⚠️ 注意：</p>
<ul>
<li>若你的主题不是 <strong>stellar</strong>，找到主题源文件（非 hexo 根目录，是主题自身的源文件），在主题目录下搜索 <code>artalk.styl</code> 即可（通常在 css&#x2F;plugins、css&#x2F;_plugins 或 comments 相关文件夹内）。</li>
<li>修改前建议备份原文件（复制一份 artalk.styl 并重命名为 artalk.styl.bak），避免修改出错无法恢复。</li>
<li>有的主题有的hexo是在themes文件夹，有的是node_modules</li>
</ul>
<h2 id="详细步骤-表情图片预览"><a href="#详细步骤-表情图片预览" class="headerlink" title="详细步骤(表情图片预览)"></a>详细步骤(表情图片预览)</h2><h3 id="步骤1：打开-Artalk-样式"><a href="#步骤1：打开-Artalk-样式" class="headerlink" title="步骤1：打开 Artalk 样式"></a>步骤1：打开 Artalk 样式</h3><ol>
<li>找到你的主题源文件目录（以 stellar 为例）：<code>hexo-theme-stellar/source/css/_plugins/comments/</code>或<code>theme/stellar/source/css/_plugins/comments/</code>，总之是主题源文件。</li>
<li>找到 <code>artalk.styl</code> 文件，开始修改，理论上其他系统也可以用吧，找到对应的就行。</li>
</ol>
<h3 id="步骤2：替换样式源码"><a href="#步骤2：替换样式源码" class="headerlink" title="步骤2：替换样式源码"></a>步骤2：替换样式源码</h3><ol>
<li>全选 <code>artalk.styl</code> 原文件中的所有内容，删除（或直接覆盖）。</li>
<li>复制下面的 <strong>完整优化后源码</strong>，粘贴到 <code>artalk.styl</code> 中，保存文件。</li>
</ol>
<p>⚠️ 注意：以下源码是完整的 <code>artalk.styl</code> 内容，已包含表情包放大、预览样式，无需修改任何内容，直接复制粘贴即可。</p>
<blockquote>
<p>基于stellar主题，如果你是stellar那就应该是没什么问题的，基于原文件改的，如果不是或者不同可以看下方另一个的样式，来具体自己自行修改。</p>
</blockquote>
<section class="stellar-folders"><div class="stellar-folders__label">artalk.styl</div>

<figure class="highlight stylus"><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><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-class">.cmt-body</span><span class="selector-class">.artalk</span> <span class="selector-class">.artalk</span></span><br><span class="line">  <span class="attribute">margin-top</span>: <span class="number">1rem</span></span><br><span class="line">  <span class="selector-class">.atk-editor-plug-preview</span></span><br><span class="line">    <span class="built_in">scrollbar</span>(<span class="number">0</span>, <span class="number">0</span>)</span><br><span class="line">  <span class="selector-class">.atk-main-editor</span></span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="variable">$border</span>-card</span><br><span class="line">    <span class="selector-class">.atk-header</span>,<span class="selector-class">.atk-editor-user-wrap</span></span><br><span class="line">      <span class="attribute">border-bottom</span>: <span class="number">1px</span> dashed <span class="built_in">var</span>(--block-border)</span><br><span class="line">      <span class="attribute">padding</span>: <span class="number">0.5rem</span> <span class="number">1rem</span></span><br><span class="line">      <span class="attribute">margin</span>: <span class="number">0</span></span><br><span class="line">      <span class="selector-class">.atk-editor-user</span></span><br><span class="line">        <span class="attribute">padding</span>: <span class="number">0</span></span><br><span class="line">    <span class="selector-class">.atk-editor-user-wrap</span><span class="selector-pseudo">:empty</span></span><br><span class="line">      <span class="attribute">visibility</span>: hidden</span><br><span class="line">      <span class="attribute">padding</span>: <span class="number">0</span></span><br><span class="line">    &gt;<span class="selector-class">.atk-bottom</span> </span><br><span class="line">      <span class="attribute">padding</span>: <span class="number">8px</span></span><br><span class="line">      <span class="selector-class">.atk-state-btn</span></span><br><span class="line">        <span class="attribute">height</span>: <span class="number">2rem</span></span><br><span class="line">        <span class="attribute">border-radius</span>: <span class="number">100px</span></span><br><span class="line">        <span class="selector-class">.atk-cancel</span></span><br><span class="line">          <span class="attribute">background</span>: none</span><br><span class="line">      <span class="selector-class">.atk-plug-btn</span></span><br><span class="line">        <span class="attribute">border-radius</span>: <span class="number">32px</span></span><br><span class="line">        <span class="attribute">height</span>: <span class="number">2rem</span></span><br><span class="line">        <span class="attribute">width</span> <span class="number">2rem</span></span><br><span class="line">      <span class="selector-class">.atk-send-btn</span></span><br><span class="line">        <span class="attribute">height</span>: <span class="number">2rem</span></span><br><span class="line">        <span class="attribute">border-radius</span>: <span class="number">100px</span></span><br><span class="line">        <span class="attribute">min-width</span>: <span class="number">5em</span></span><br><span class="line">        trans1 <span class="attribute">all</span></span><br><span class="line">        <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">          <span class="attr">--at-color-main</span>: <span class="selector-tag">var</span>(<span class="attr">--accent</span>)</span><br><span class="line">        <span class="selector-pseudo">&amp;:empty</span></span><br><span class="line">          <span class="attribute">display</span>: none</span><br><span class="line">  .atk-list-comments-wrap&gt;<span class="selector-class">.atk-comment-wrap</span></span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="variable">$border</span>-card</span><br><span class="line">    <span class="attribute">background</span>: <span class="built_in">var</span>(--card)</span><br><span class="line">    <span class="attribute">box-shadow</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">8px</span> <span class="number">0px</span> <span class="built_in">rgba</span>(<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0.02</span>)</span><br><span class="line">    &gt;<span class="selector-class">.atk-comment</span></span><br><span class="line">      <span class="attribute">padding</span>: <span class="number">1rem</span></span><br><span class="line">    &amp;+<span class="selector-class">.atk-comment-wrap</span></span><br><span class="line">      <span class="attribute">margin-top</span>: .<span class="number">5rem</span></span><br><span class="line">  <span class="selector-class">.atk-comment-children</span></span><br><span class="line">    <span class="attribute">border-top</span>: <span class="number">1px</span> dashed <span class="built_in">var</span>(--block-border)</span><br><span class="line">    <span class="attribute">margin-top</span>: .<span class="number">5rem</span></span><br><span class="line">  <span class="selector-class">.atk-avatar</span></span><br><span class="line">    <span class="attribute">padding</span>: <span class="number">0</span></span><br><span class="line">  <span class="selector-class">.atk-avatar</span> <span class="selector-tag">img</span></span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="number">50%</span></span><br><span class="line">    <span class="attribute">width</span>: <span class="number">36px</span></span><br><span class="line">    <span class="attribute">height</span>: <span class="number">36px</span></span><br><span class="line">  .atk-comment-wrap&gt;.atk-comment&gt;<span class="selector-class">.atk-main</span></span><br><span class="line">    <span class="attribute">margin-left</span>: <span class="built_in">calc</span>(<span class="number">36px</span> + .<span class="number">5rem</span>)</span><br><span class="line">  .atk-comment&gt;.atk-main&gt;<span class="selector-class">.atk-header</span> <span class="selector-class">.atk-item</span><span class="selector-class">.atk-nick</span></span><br><span class="line">    <span class="attribute">color</span>: <span class="built_in">var</span>(--text-p3)</span><br><span class="line">    <span class="attribute">font-weight</span>: <span class="number">500</span></span><br><span class="line"></span><br><span class="line">  <span class="selector-class">.atk-badge-wrap</span> <span class="selector-tag">span</span></span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="number">100px</span></span><br><span class="line">  <span class="selector-class">.atk-height-limit-btn</span></span><br><span class="line">    <span class="attribute">padding</span>: <span class="number">0.5rem</span> <span class="number">2rem</span></span><br><span class="line">  <span class="selector-class">.atk-list-read-more</span> </span><br><span class="line">    <span class="attribute">margin-top</span>: <span class="number">2.5rem</span></span><br><span class="line">    <span class="attribute">padding-bottom</span>: <span class="number">1.5rem</span></span><br><span class="line">    <span class="selector-class">.atk-list-read-more-inner</span></span><br><span class="line">      <span class="attribute">padding</span>: <span class="number">1rem</span> <span class="number">2rem</span></span><br><span class="line">      <span class="attribute">border-radius</span>: <span class="variable">$border</span>-button</span><br><span class="line">      <span class="attribute">height</span>: <span class="number">3rem</span></span><br><span class="line">      <span class="attribute">width</span>: <span class="number">12rem</span></span><br><span class="line">      <span class="attribute">margin</span>: -<span class="number">1.5rem</span> auto <span class="number">0</span></span><br><span class="line">      <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">        <span class="attribute">background</span>: <span class="built_in">var</span>(--card)</span><br><span class="line">  <span class="selector-class">.atk-list-footer</span> <span class="selector-class">.atk-copyright</span></span><br><span class="line">    <span class="attribute">padding</span>: <span class="number">1rem</span></span><br><span class="line">  <span class="selector-class">.atk-error-layer</span></span><br><span class="line">    <span class="attribute">background</span>: none</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.with-fancybox</span> <span class="selector-class">.atk-content</span> <span class="selector-tag">img</span><span class="selector-pseudo">:not</span>(<span class="selector-attr">[atk-emoticon]</span>)</span><br><span class="line">  <span class="attribute">cursor</span>: zoom-in</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.cmt-body</span></span><br><span class="line">  <span class="selector-class">.artalk</span>, <span class="selector-class">.atk-layer-wrap</span>, <span class="selector-class">.artalk</span><span class="selector-class">.atk-dark-mode</span>, <span class="selector-class">.atk-layer-wrap</span><span class="selector-class">.atk-dark-mode</span></span><br><span class="line">    <span class="attr">--at-color-font</span>: <span class="selector-tag">var</span>(<span class="attr">--text-p1</span>)</span><br><span class="line">    <span class="attr">--at-color-deep</span>: <span class="selector-tag">var</span>(<span class="attr">--text-p2</span>)</span><br><span class="line">    <span class="attr">--at-color-sub</span>: <span class="selector-tag">var</span>(<span class="attr">--text-p3</span>)</span><br><span class="line">    <span class="attr">--at-color-grey</span>: <span class="selector-tag">var</span>(<span class="attr">--text-p4</span>)</span><br><span class="line">    <span class="attr">--at-color-meta</span>: <span class="selector-tag">var</span>(<span class="attr">--text-p4</span>)</span><br><span class="line">    <span class="keyword">if</span> <span class="variable">$site</span>-<span class="attribute">background-image</span></span><br><span class="line">      <span class="attr">--at-color-border</span>: transparent</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">      <span class="attr">--at-color-border</span>: <span class="selector-tag">var</span>(<span class="attr">--block-border</span>)</span><br><span class="line">    <span class="attr">--at-color-light</span>: <span class="selector-tag">var</span>(<span class="attr">--link</span>)</span><br><span class="line">    <span class="attr">--at-color-bg</span>: <span class="selector-tag">var</span>(<span class="attr">--card</span>)</span><br><span class="line">    <span class="attr">--at-color-bg-transl</span>: <span class="selector-tag">var</span>(<span class="attr">--card</span>)</span><br><span class="line">    <span class="attr">--at-color-bg-grey</span>: <span class="selector-tag">var</span>(<span class="attr">--block</span>)</span><br><span class="line">    <span class="attr">--at-color-bg-grey-transl</span>: <span class="selector-tag">var</span>(<span class="attr">--block-border</span>)</span><br><span class="line">    <span class="attr">--at-color-bg-light</span>: <span class="selector-tag">var</span>(<span class="attr">--theme</span>)</span><br><span class="line">    <span class="attr">--at-color-main</span>: <span class="selector-tag">var</span>(<span class="attr">--theme</span>)</span><br><span class="line">    <span class="attr">--at-color-red</span>: <span class="variable">$c</span>-red</span><br><span class="line">    <span class="attr">--at-color-green</span>: <span class="variable">$c</span>-green</span><br><span class="line">    <span class="attr">--at-color-gradient</span>: <span class="built_in">linear-gradient</span>(<span class="number">180deg</span>, transparent, <span class="selector-tag">var</span>(<span class="attr">--card</span>), <span class="number">50%</span>, <span class="selector-tag">var</span>(<span class="attr">--card</span>))</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">// fix style</span></span><br><span class="line"><span class="selector-class">.cmt-body</span><span class="selector-class">.artalk</span></span><br><span class="line">  .atk-comment&gt;.atk-main&gt;<span class="selector-class">.atk-body</span></span><br><span class="line">    <span class="attribute">overflow</span>: visible</span><br><span class="line">  <span class="selector-class">.artalk</span> pre <span class="selector-tag">code</span>, <span class="selector-class">.atk-layer-wrap</span> pre <span class="selector-tag">code</span></span><br><span class="line">    <span class="attribute">background</span>: none</span><br><span class="line">  .atk-main-editor&gt;.atk-textarea-wrap&gt;<span class="selector-class">.atk-textarea</span></span><br><span class="line">    <span class="attribute">background</span>: none</span><br><span class="line">    <span class="attribute">padding</span>: <span class="number">1rem</span></span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span></span><br><span class="line">    <span class="attribute">border</span>: none</span><br><span class="line"></span><br><span class="line">  <span class="selector-class">.atk-loading</span></span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="variable">$border</span>-card</span><br><span class="line">  <span class="selector-class">.atk-main-editor</span> <span class="selector-class">.atk-editor-user-wrap</span> <span class="selector-class">.atk-editor-user</span> <span class="selector-class">.atk-user-profile-btn</span></span><br><span class="line">    <span class="attribute">padding</span>: <span class="number">0</span></span><br><span class="line">  <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">    <span class="attribute">background</span>: none</span><br><span class="line">  </span><br><span class="line">  .artalk&gt;.atk-list&gt;<span class="selector-class">.atk-list-header</span> </span><br><span class="line">    <span class="attribute">padding</span>: .<span class="number">5rem</span> <span class="number">1rem</span></span><br><span class="line">    <span class="selector-class">.atk-comment-count</span></span><br><span class="line">      <span class="attribute">display</span>: flex</span><br><span class="line">      <span class="attribute">align-items</span>: baseline</span><br><span class="line">  .artalk&gt;.atk-list&gt;<span class="selector-class">.atk-list-header</span> <span class="selector-class">.atk-dropdown-wrap</span> <span class="selector-class">.atk-arrow-down-icon</span></span><br><span class="line">    <span class="attribute">height</span>: <span class="number">8px</span></span><br><span class="line">  .artalk&gt;.atk-list&gt;<span class="selector-class">.atk-list-header</span> <span class="selector-class">.atk-text</span></span><br><span class="line">    <span class="attribute">display</span>: block</span><br><span class="line"></span><br><span class="line">  <span class="selector-class">.atk-notify-wrap</span> <span class="selector-class">.atk-notify</span></span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="variable">$border</span>-bar</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">8px</span></span><br><span class="line">  </span><br><span class="line">  <span class="comment">// emoticons</span></span><br><span class="line">  .atk-editor-plug-emoticons&gt;.atk-grp-wrap&gt;<span class="selector-class">.atk-grp</span></span><br><span class="line">    <span class="attribute">padding</span>: .<span class="number">5rem</span></span><br><span class="line">    <span class="attribute">margin-bottom</span>: <span class="number">32px</span></span><br><span class="line">  .atk-editor-plug-emoticons&gt;.atk-grp-wrap&gt;<span class="selector-class">.atk-grp</span><span class="selector-attr">[data-type=image]</span>&gt;<span class="selector-class">.atk-item</span></span><br><span class="line">    <span class="attribute">width</span> <span class="number">3rem</span></span><br><span class="line">    <span class="attribute">height</span>: <span class="number">3rem</span></span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span></span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="number">4px</span></span><br><span class="line">    <span class="attribute">padding</span>: .<span class="number">5rem</span></span><br><span class="line">    &gt;<span class="selector-tag">img</span></span><br><span class="line">      <span class="attribute">border-radius</span>: <span class="number">4px</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">// override</span></span><br><span class="line"><span class="selector-class">.md-text</span> <span class="selector-class">.cmt-body</span><span class="selector-class">.artalk</span> <span class="selector-class">.artalk</span></span><br><span class="line">  <span class="attr">--gap-p</span>: <span class="number">1rem</span></span><br><span class="line">  <span class="selector-tag">p</span></span><br><span class="line">    <span class="attribute">line-height</span>: <span class="number">1.5</span></span><br><span class="line">    <span class="attribute">font-size</span>: <span class="variable">$fs</span>-<span class="number">15</span></span><br><span class="line">    &gt;<span class="selector-tag">img</span></span><br><span class="line">      <span class="attribute">margin</span>: <span class="built_in">var</span>(--gap-p) auto</span><br><span class="line">      <span class="attribute">border-radius</span>: <span class="variable">$border</span>-image-s</span><br><span class="line">  a&gt;<span class="selector-tag">img</span></span><br><span class="line">    <span class="attribute">display</span>: inline</span><br><span class="line">  <span class="selector-tag">img</span><span class="selector-attr">[atk-emoticon]</span></span><br><span class="line">    <span class="attribute">max-height</span>: <span class="number">3.5em</span></span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">scale</span>(<span class="number">1</span>)</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">6px</span></span><br><span class="line">    <span class="attribute">vertical-align</span>: bottom</span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="number">4px</span></span><br><span class="line">    <span class="attribute">image-rendering</span>: crisp-edges</span><br><span class="line">    <span class="attribute">cursor</span>: pointer</span><br><span class="line">  <span class="selector-tag">ul</span> <span class="selector-tag">li</span>, <span class="selector-tag">ol</span> <span class="selector-tag">li</span></span><br><span class="line">    <span class="attribute">font-size</span>: <span class="variable">$fs</span>-<span class="number">14</span></span><br><span class="line">  <span class="selector-tag">blockquote</span></span><br><span class="line">    <span class="attribute">position</span>: relative</span><br><span class="line">    <span class="attribute">border-left</span>: none</span><br><span class="line">    <span class="attribute">background</span>: none</span><br><span class="line">    <span class="attribute">padding</span>: <span class="number">0.25rem</span> <span class="number">1rem</span></span><br><span class="line">    <span class="selector-tag">p</span></span><br><span class="line">      <span class="attribute">color</span>: <span class="built_in">var</span>(--text-p3)</span><br><span class="line">  <span class="selector-class">.atk-content</span> <span class="selector-tag">a</span></span><br><span class="line">    <span class="attr">--at-color-main</span>: <span class="selector-tag">var</span>(<span class="attr">--link</span>)</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#owo-big</span></span><br><span class="line">  <span class="attribute">display</span>: none</span><br><span class="line">  <span class="attribute">position</span>: absolute</span><br><span class="line">  <span class="attribute">z-index</span>: <span class="number">9999</span></span><br><span class="line">  <span class="attribute">pointer-events</span>: none</span><br><span class="line">  <span class="attribute">width</span>: <span class="number">280px</span></span><br><span class="line">  <span class="attribute">height</span>: <span class="number">280px</span></span><br><span class="line">  <span class="attribute">padding</span>: <span class="number">16px</span></span><br><span class="line">  <span class="attribute">background</span>: <span class="built_in">var</span>(--liushen-card-secondbg, <span class="built_in">var</span>(--card))</span><br><span class="line">  <span class="attribute">border</span>: <span class="built_in">var</span>(--liushen-card-border, <span class="number">1px</span> solid <span class="built_in">var</span>(--block-border))</span><br><span class="line">  <span class="attribute">border-radius</span>: <span class="number">12px</span></span><br><span class="line">  <span class="attribute">box-shadow</span>: <span class="built_in">var</span>(--liushen-nav-shadow, <span class="number">0</span> <span class="number">4px</span> <span class="number">15px</span> <span class="built_in">rgba</span>(<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0.15</span>))</span><br><span class="line">  <span class="attribute">opacity</span>: <span class="number">0</span></span><br><span class="line">  <span class="attribute">transition</span>: opacity <span class="number">0.2s</span> ease</span><br><span class="line">  <span class="selector-tag">img</span></span><br><span class="line">    <span class="attribute">width</span>: <span class="number">100%</span></span><br><span class="line">    <span class="attribute">height</span>: <span class="number">100%</span></span><br><span class="line">    <span class="attribute">object-fit</span>: contain</span><br></pre></td></tr></table></figure></section>

<h4 id="具体的修改"><a href="#具体的修改" class="headerlink" title="具体的修改"></a>具体的修改</h4><blockquote>
<p>修改表情包默认大小（原始代码）</p>
</blockquote>
<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">img[atk-emoticon]</span><br><span class="line">  max-height: 1.5em</span><br><span class="line">  transform: scale(1.2)</span><br><span class="line">  margin: 0 4px</span><br><span class="line">  vertical-align: bottom</span><br><span class="line">  border-radius: 4px</span><br></pre></td></tr></table></figure>

<blockquote>
<p>修改表情包默认大小（优化后代码）</p>
</blockquote>
<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">img[atk-emoticon]</span><br><span class="line">  max-height: 3.5em     &lt;-- 改大：1.5em → 3.5em</span><br><span class="line">  transform: scale(1)   &lt;-- 修复模糊：关闭缩放</span><br><span class="line">  margin: 0 6px        &lt;-- 微调间距</span><br><span class="line">  vertical-align: bottom</span><br><span class="line">  border-radius: 4px</span><br></pre></td></tr></table></figure>

<blockquote>
<p>末尾代码（新增以下全部代码）</p>
</blockquote>
<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><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></pre></td><td class="code"><pre><span class="line">#owo-big</span><br><span class="line">  display: none</span><br><span class="line">  position: absolute</span><br><span class="line">  z-index: 9999</span><br><span class="line">  pointer-events: none</span><br><span class="line">  width: 280px      &lt;-- 预览框大小</span><br><span class="line">  height: 280px</span><br><span class="line">  padding: 16px</span><br><span class="line">  background: var(--liushen-card-secondbg, var(--card))</span><br><span class="line">  border: var(--liushen-card-border, 1px solid var(--block-border))</span><br><span class="line">  border-radius: 12px</span><br><span class="line">  box-shadow: var(--liushen-nav-shadow, 0 4px 15px rgba(0,0,0,0.15))</span><br><span class="line">  opacity: 0</span><br><span class="line">  transition: opacity 0.2s ease</span><br><span class="line"></span><br><span class="line">  img</span><br><span class="line">    width: 100%</span><br><span class="line">    height: 100%</span><br><span class="line">    object-fit: contain</span><br></pre></td></tr></table></figure>

<h4 id="直接手动修改"><a href="#直接手动修改" class="headerlink" title="直接手动修改"></a>直接手动修改</h4><ol>
<li>找到 <code>img[atk-emoticon]</code></li>
<li>把 <code>max-height</code> 改成 <code>3.5em</code></li>
<li>加上：</li>
</ol>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">image-rendering: crisp-edges</span><br><span class="line">cursor: pointer</span><br></pre></td></tr></table></figure>

<ol>
<li>在文件最底部粘贴：</li>
</ol>
<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><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></pre></td><td class="code"><pre><span class="line">#owo-big</span><br><span class="line">  display: none</span><br><span class="line">  position: absolute</span><br><span class="line">  z-index: 9999</span><br><span class="line">  pointer-events: none</span><br><span class="line">  width: 280px</span><br><span class="line">  height: 280px</span><br><span class="line">  padding: 16px</span><br><span class="line">  background: var(--liushen-card-secondbg, var(--card))</span><br><span class="line">  border: var(--liushen-card-border, 1px solid var(--block-border))</span><br><span class="line">  border-radius: 12px</span><br><span class="line">  box-shadow: var(--liushen-nav-shadow, 0 4px 15px rgba(0,0,0,0.15))</span><br><span class="line">  opacity: 0</span><br><span class="line">  transition: opacity 0.2s ease</span><br><span class="line">  img</span><br><span class="line">    width: 100%</span><br><span class="line">    height: 100%</span><br><span class="line">    object-fit: contain</span><br></pre></td></tr></table></figure>

<h3 id="步骤3：添加预览JS-CSS"><a href="#步骤3：添加预览JS-CSS" class="headerlink" title="步骤3：添加预览JS,CSS"></a>步骤3：添加预览JS,CSS</h3><blockquote>
<p>（实现点击表情包弹出预览）</p>
</blockquote>
<p>仅修改CSS无法实现“点击放大”功能，需添加一段简单JS，步骤如下：</p>
<ol>
<li>打开 hexo 的自定义JS文件（这是我推荐丢的位置，方便找，也可以丢主题源文件夹）：hexo根目录&#x2F;source&#x2F;js&#x2F;ak.js（若没有 ak.js，新建一个即可，如果有同名自己换一个文件名）      </li>
<li>打开 ak.js 文件，将下面的JS代码复制粘贴到文件末尾，保存。</li>
</ol>
<p><strong>感谢：<a href="https://inkss.cn/post/17e0ee16/">评论区表情包放大 - 枋柚梓博客</a>提供的文章帮助</strong></p>
<section class="stellar-folders"><div class="stellar-folders__label">ak.js</div>

<figure class="highlight javascript"><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><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * 评论区表情包放大弹出层 完整实现</span></span><br><span class="line"><span class="comment"> * 适配：Artalk/Valine/Waline/自定义评论系统</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">EmojiEnlarge</span> &#123;</span><br><span class="line">  <span class="title function_">constructor</span>(<span class="params">options = &#123;&#125;</span>) &#123;</span><br><span class="line">    <span class="comment">// 配置项（可自定义修改）</span></span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">config</span> = &#123;</span><br><span class="line">      <span class="attr">zoomRatio</span>: <span class="number">3</span>, <span class="comment">// 放大倍数</span></span><br><span class="line">      <span class="attr">maxSize</span>: <span class="number">220</span>, <span class="comment">// 最大宽高</span></span><br><span class="line">      <span class="comment">// 表情包选择器（适配你的评论系统，默认兼容Artalk）</span></span><br><span class="line">      <span class="attr">emojiSelector</span>: <span class="string">&#x27;img[atk-emoticon],.atk-grp img,.atk-comment-wrap img&#x27;</span>,</span><br><span class="line">      ...options</span><br><span class="line">    &#125;;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 创建全局弹出层</span></span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">popup</span> = <span class="variable language_">this</span>.<span class="title function_">createPopup</span>();</span><br><span class="line">    <span class="comment">// 初始化监听</span></span><br><span class="line">    <span class="variable language_">this</span>.<span class="title function_">init</span>();</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 1. 创建悬浮弹出层DOM</span></span><br><span class="line">  <span class="title function_">createPopup</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="keyword">const</span> popup = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&#x27;div&#x27;</span>);</span><br><span class="line">    popup.<span class="property">className</span> = <span class="string">&#x27;emoji-popup&#x27;</span>;</span><br><span class="line">    popup.<span class="property">innerHTML</span> = <span class="string">`</span></span><br><span class="line"><span class="string">      &lt;img class=&quot;emoji-img&quot; src=&quot;&quot; alt=&quot;&quot;&gt;</span></span><br><span class="line"><span class="string">      &lt;div class=&quot;emoji-alt&quot;&gt;&lt;/div&gt;</span></span><br><span class="line"><span class="string">    `</span>;</span><br><span class="line">    <span class="variable language_">document</span>.<span class="property">body</span>.<span class="title function_">appendChild</span>(popup);</span><br><span class="line">    <span class="keyword">return</span> popup;</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 2. 计算图片放大尺寸（核心算法，沿用并优化你的代码）</span></span><br><span class="line">  <span class="title function_">calculateSize</span>(<span class="params">img</span>) &#123;</span><br><span class="line">    <span class="keyword">const</span> &#123; zoomRatio, maxSize &#125; = <span class="variable language_">this</span>.<span class="property">config</span>;</span><br><span class="line">    <span class="keyword">const</span> &#123; clientWidth, clientHeight &#125; = img;</span><br><span class="line">    <span class="keyword">const</span> &#123; naturalWidth, naturalHeight &#125; = img;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 基础放大尺寸</span></span><br><span class="line">    <span class="keyword">let</span> tempW = clientWidth * zoomRatio;</span><br><span class="line">    <span class="keyword">let</span> tempH = clientHeight * zoomRatio;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 等比约束：不超过最大尺寸</span></span><br><span class="line">    <span class="keyword">const</span> ratio = tempW / tempH;</span><br><span class="line">    <span class="keyword">if</span> (tempW &gt; maxSize) &#123;</span><br><span class="line">      tempW = maxSize;</span><br><span class="line">      tempH = tempW / ratio;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (tempH &gt; maxSize) &#123;</span><br><span class="line">      tempH = maxSize;</span><br><span class="line">      tempW = tempH * ratio;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> &#123; <span class="attr">width</span>: tempW, <span class="attr">height</span>: tempH &#125;;</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 3. 鼠标悬浮触发放大</span></span><br><span class="line">  <span class="title function_">handleMouseOver</span>(<span class="params">e</span>) &#123;</span><br><span class="line">    <span class="comment">// 仅鼠标触发，排除触屏/触控笔</span></span><br><span class="line">    <span class="keyword">if</span> (e.<span class="property">pointerType</span> !== <span class="string">&#x27;mouse&#x27;</span>) <span class="keyword">return</span>;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">const</span> target = e.<span class="property">target</span>;</span><br><span class="line">    <span class="comment">// 判断是否为表情包图片</span></span><br><span class="line">    <span class="keyword">if</span> (!target.<span class="title function_">matches</span>(<span class="variable language_">this</span>.<span class="property">config</span>.<span class="property">emojiSelector</span>)) <span class="keyword">return</span>;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">const</span> img = target;</span><br><span class="line">    <span class="keyword">if</span> (!img.<span class="property">src</span>) <span class="keyword">return</span>;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 计算尺寸</span></span><br><span class="line">    <span class="keyword">const</span> &#123; width, height &#125; = <span class="variable language_">this</span>.<span class="title function_">calculateSize</span>(img);</span><br><span class="line">    <span class="keyword">const</span> popupImg = <span class="variable language_">this</span>.<span class="property">popup</span>.<span class="title function_">querySelector</span>(<span class="string">&#x27;.emoji-img&#x27;</span>);</span><br><span class="line">    <span class="keyword">const</span> popupAlt = <span class="variable language_">this</span>.<span class="property">popup</span>.<span class="title function_">querySelector</span>(<span class="string">&#x27;.emoji-alt&#x27;</span>);</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 设置弹出层内容</span></span><br><span class="line">    popupImg.<span class="property">src</span> = img.<span class="property">src</span>;</span><br><span class="line">    popupImg.<span class="property">width</span> = width;</span><br><span class="line">    popupImg.<span class="property">height</span> = height;</span><br><span class="line">    popupAlt.<span class="property">textContent</span> = img.<span class="property">alt</span> || <span class="string">&#x27;图片窗预览&#x27;</span>;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 设置位置（鼠标右下角，避免超出屏幕）</span></span><br><span class="line">    <span class="keyword">const</span> gap = <span class="number">10</span>;</span><br><span class="line">    <span class="keyword">let</span> left = e.<span class="property">clientX</span> + gap;</span><br><span class="line">    <span class="keyword">let</span> top = e.<span class="property">clientY</span> + gap;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 右边界检测</span></span><br><span class="line">    <span class="keyword">if</span> (left + width &gt; <span class="variable language_">window</span>.<span class="property">innerWidth</span>) &#123;</span><br><span class="line">      left = e.<span class="property">clientX</span> - width - gap;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">// 下边界检测</span></span><br><span class="line">    <span class="keyword">if</span> (top + height + <span class="number">30</span> &gt; <span class="variable language_">window</span>.<span class="property">innerHeight</span>) &#123;</span><br><span class="line">      top = e.<span class="property">clientY</span> - height - <span class="number">30</span>;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">popup</span>.<span class="property">style</span>.<span class="property">left</span> = <span class="string">`<span class="subst">$&#123;left&#125;</span>px`</span>;</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">popup</span>.<span class="property">style</span>.<span class="property">top</span> = <span class="string">`<span class="subst">$&#123;top&#125;</span>px`</span>;</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">popup</span>.<span class="property">style</span>.<span class="property">display</span> = <span class="string">&#x27;block&#x27;</span>;</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 4. 鼠标离开隐藏弹出层</span></span><br><span class="line">  <span class="title function_">handleMouseOut</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">popup</span>.<span class="property">style</span>.<span class="property">display</span> = <span class="string">&#x27;none&#x27;</span>;</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 5. 绑定事件到元素</span></span><br><span class="line">  <span class="title function_">bindEvents</span>(<span class="params">element</span>) &#123;</span><br><span class="line">    element.<span class="title function_">addEventListener</span>(<span class="string">&#x27;pointerover&#x27;</span>, <span class="variable language_">this</span>.<span class="property">handleMouseOver</span>.<span class="title function_">bind</span>(<span class="variable language_">this</span>));</span><br><span class="line">    element.<span class="title function_">addEventListener</span>(<span class="string">&#x27;pointerout&#x27;</span>, <span class="variable language_">this</span>.<span class="property">handleMouseOut</span>.<span class="title function_">bind</span>(<span class="variable language_">this</span>));</span><br><span class="line">    element.<span class="title function_">addEventListener</span>(<span class="string">&#x27;pointermove&#x27;</span>, <span class="variable language_">this</span>.<span class="property">handleMouseOver</span>.<span class="title function_">bind</span>(<span class="variable language_">this</span>)); <span class="comment">// 跟随鼠标</span></span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 6. 监听动态新增评论（MutationObserver）</span></span><br><span class="line">  <span class="title function_">observeComments</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="keyword">const</span> observer = <span class="keyword">new</span> <span class="title class_">MutationObserver</span>(<span class="function">(<span class="params">mutations</span>) =&gt;</span> &#123;</span><br><span class="line">      mutations.<span class="title function_">forEach</span>(<span class="function"><span class="params">mutation</span> =&gt;</span> &#123;</span><br><span class="line">        mutation.<span class="property">addedNodes</span>.<span class="title function_">forEach</span>(<span class="function"><span class="params">node</span> =&gt;</span> &#123;</span><br><span class="line">          <span class="keyword">if</span> (node.<span class="property">nodeType</span> === <span class="number">1</span>) &#123;</span><br><span class="line">            <span class="comment">// 给新增节点绑定事件</span></span><br><span class="line">            <span class="variable language_">this</span>.<span class="title function_">bindEvents</span>(node);</span><br><span class="line">            <span class="comment">// 递归处理子元素</span></span><br><span class="line">            <span class="keyword">if</span> (node.<span class="property">querySelectorAll</span>) &#123;</span><br><span class="line">              node.<span class="title function_">querySelectorAll</span>(<span class="string">&#x27;*&#x27;</span>).<span class="title function_">forEach</span>(<span class="function"><span class="params">el</span> =&gt;</span> <span class="variable language_">this</span>.<span class="title function_">bindEvents</span>(el));</span><br><span class="line">            &#125;</span><br><span class="line">          &#125;</span><br><span class="line">        &#125;);</span><br><span class="line">      &#125;);</span><br><span class="line">    &#125;);</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 监听整个body（适配所有评论区容器）</span></span><br><span class="line">    observer.<span class="title function_">observe</span>(<span class="variable language_">document</span>.<span class="property">body</span>, &#123;</span><br><span class="line">      <span class="attr">childList</span>: <span class="literal">true</span>,</span><br><span class="line">      <span class="attr">subtree</span>: <span class="literal">true</span></span><br><span class="line">    &#125;);</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 初始化</span></span><br><span class="line">  <span class="title function_">init</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="comment">// 给现有元素绑定事件</span></span><br><span class="line">    <span class="variable language_">document</span>.<span class="title function_">querySelectorAll</span>(<span class="string">&#x27;*&#x27;</span>).<span class="title function_">forEach</span>(<span class="function"><span class="params">el</span> =&gt;</span> <span class="variable language_">this</span>.<span class="title function_">bindEvents</span>(el));</span><br><span class="line">    <span class="comment">// 监听动态新增元素</span></span><br><span class="line">    <span class="variable language_">this</span>.<span class="title function_">observeComments</span>();</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// ========== 初始化使用 ==========</span></span><br><span class="line"><span class="comment">// 默认配置（适配Artalk）</span></span><br><span class="line"><span class="variable language_">window</span>.<span class="property">emojiEnlarge</span> = <span class="keyword">new</span> <span class="title class_">EmojiEnlarge</span>();</span><br><span class="line"></span><br><span class="line"><span class="comment">// 自定义配置示例（适配其他评论系统）</span></span><br><span class="line"><span class="comment">// window.emojiEnlarge = new EmojiEnlarge(&#123;</span></span><br><span class="line"><span class="comment">//   zoomRatio: 2.5,</span></span><br><span class="line"><span class="comment">//   maxSize: 250,</span></span><br><span class="line"><span class="comment">//   emojiSelector: &#x27;img.emoji,.comment-content img&#x27;</span></span><br><span class="line"><span class="comment">// &#125;);</span></span><br></pre></td></tr></table></figure></section>

<p><strong>这则是ak-1.js</strong></p>
<blockquote>
<ol>
<li>打开 hexo 的自定义JS文件（这是我推荐丢的位置，方便找，也可以丢主题源文件夹）：hexo根目录&#x2F;source&#x2F;js&#x2F;ak-1.js（若没有 ak-1.js，新建一个即可，如果有同名自己换一个文件名）      </li>
<li>打开 ak-1.js 文件，将下面的JS代码复制粘贴到文件末尾，保存ak-1.js文件</li>
</ol>
</blockquote>
<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><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></pre></td><td class="code"><pre><span class="line">document.addEventListener(&#x27;click&#x27;, function (e) &#123;</span><br><span class="line">  const img = e.target.closest(&#x27;img[atk-emoticon]&#x27;)</span><br><span class="line">  if (!img) return</span><br><span class="line">  const owo = document.createElement(&#x27;div&#x27;)</span><br><span class="line">  owo.id = &#x27;owo-big&#x27;</span><br><span class="line">  owo.innerHTML = `&lt;img src=&quot;$&#123;img.src&#125;&quot;&gt;`</span><br><span class="line">  document.body.appendChild(owo)</span><br><span class="line">  owo.style.left = e.pageX + 10 + &#x27;px&#x27;</span><br><span class="line">  owo.style.top = e.pageY + 10 + &#x27;px&#x27;</span><br><span class="line">  owo.style.display = &#x27;block&#x27;</span><br><span class="line">  setTimeout(() =&gt; owo.style.opacity = 1, 10)</span><br><span class="line">  setTimeout(() =&gt; &#123;</span><br><span class="line">    owo.remove()</span><br><span class="line">  &#125;, 1500)</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure>

<blockquote>
<ol>
<li>打开 hexo 的自定义JS文件（这是我推荐丢的位置，方便找，也可以丢主题源文件夹）：hexo根目录&#x2F;source&#x2F;css&#x2F;ak.css （若没有 ak.css ，新建一个即可，如果有同名自己换一个文件名）      </li>
<li>打开 ak.css 文件，将下面的css代码复制粘贴到文件末尾，保存。ak.css文件</li>
</ol>
</blockquote>
<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><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></pre></td><td class="code"><pre><span class="line">/* 表情包放大弹出层 全局样式 */</span><br><span class="line">.emoji-popup &#123;</span><br><span class="line">  position: fixed;</span><br><span class="line">  z-index: 99999;</span><br><span class="line">  background: #fff;</span><br><span class="line">  border-radius: 6px;</span><br><span class="line">  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);</span><br><span class="line">  padding: 4px;</span><br><span class="line">  display: none; /* 默认隐藏 */</span><br><span class="line">  pointer-events: none; /* 不阻挡鼠标事件 */</span><br><span class="line">&#125;</span><br><span class="line">/* 弹出层内图片 */</span><br><span class="line">.emoji-popup img &#123;</span><br><span class="line">  display: block;</span><br><span class="line">  object-fit: contain;</span><br><span class="line">  border-radius: 4px;</span><br><span class="line">&#125;</span><br><span class="line">/* 图片alt文字提示 */</span><br><span class="line">.emoji-popup .emoji-alt &#123;</span><br><span class="line">  font-size: 12px;</span><br><span class="line">  color: #666;</span><br><span class="line">  text-align: center;</span><br><span class="line">  margin-top: 4px;</span><br><span class="line">  white-space: nowrap;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<p>随后引用：</p>
<p>主题配置文件，这里是stellar主题所以是<code>_config.stellar.yml</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></pre></td><td class="code"><pre><span class="line">head:</span><br><span class="line">...</span><br><span class="line">- &lt;link rel=&quot;stylesheet&quot; href=&quot;/css/ak.css&quot;&gt; #artalk评论预览</span><br></pre></td></tr></table></figure>

<pre><code>script:
...
- &lt;script src=&quot;/js/ak.js&quot;&gt;&lt;/script&gt; #artalk评论预览
- &lt;script src=&quot;/js/ak-1.js&quot;&gt;&lt;/script&gt; #artalk评论预览
</code></pre>
<h3 id="步骤4：重启hexo"><a href="#步骤4：重启hexo" class="headerlink" title="步骤4：重启hexo"></a>步骤4：重启hexo</h3><p>修改完成后，需重启hexo才能生效，执行以下命令（在hexo根目录执行）：</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><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"><span class="comment"># 清除缓存（可选，避免缓存导致不生效）</span></span><br><span class="line">hexo clean</span><br><span class="line"><span class="comment"># 启动本地预览（查看效果）</span></span><br><span class="line">hexo s</span><br><span class="line"><span class="comment"># 或构建</span></span><br><span class="line">hexo g</span><br></pre></td></tr></table></figure>

<p>打开本地博客localhost:4000，进入评论区，测试功能；或者推送hexo d看</p>
<p>若测试正常，执行 <code>hexo d</code> 部署到线上，线上即可生效。</p>
<h2 id="详细步骤-Artalk跳转中间页"><a href="#详细步骤-Artalk跳转中间页" class="headerlink" title="详细步骤(Artalk跳转中间页)"></a>详细步骤(Artalk跳转中间页)</h2><h3 id="创建js脚本"><a href="#创建js脚本" class="headerlink" title="创建js脚本"></a>创建js脚本</h3><p>打开 hexo 的自定义JS文件（这是我推荐丢的位置，方便找，也可以丢主题源文件夹）：hexo根目录&#x2F;source&#x2F;js&#x2F;xx.js（若没有 xx.js，新建一个即可，如果有同名自己换一个文件名）</p>
<p><strong>文件名字可随意xx.js</strong>，建议使用下边的推荐方案，更加完善完全，用这段虽然是方便了那么一步但是如果你用了柳神的中间页插件可能会出现冲突渲染hexo g后报错。</p>
<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">根据游客反馈出现致命BUD，请使用推荐方案</span><br></pre></td></tr></table></figure>

<p>如果想加白名单，就使用以下方案：</p>
<section class="stellar-folders"><div class="stellar-folders__label">推荐方案</div>
<blockquote>
<p>js文件代码：</p>
</blockquote>
<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><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></pre></td><td class="code"><pre><span class="line">(function() &#123;</span><br><span class="line">    // ======================</span><br><span class="line">    // ✅ 白名单（在这里添加）</span><br><span class="line">    // ======================</span><br><span class="line">    window.DOMAIN_WHITELIST = [</span><br><span class="line">        &quot;koxiuqiu.cn&quot;,</span><br><span class="line">        &quot;blogscn.fun&quot;,</span><br><span class="line">        &quot;www.foreverblog.cn&quot;,</span><br><span class="line">    ];</span><br><span class="line"></span><br><span class="line">    var siteDomain = window.location.hostname;</span><br><span class="line">    var redirectPage = &#x27;/link.html&#x27;;</span><br><span class="line">    var DOMAIN_WHITELIST = window.DOMAIN_WHITELIST || [];</span><br><span class="line"></span><br><span class="line">    function isExternalLink(url) &#123;</span><br><span class="line">        if (!url || !/^https?:\/\//.test(url)) return false;</span><br><span class="line">        try &#123;</span><br><span class="line">            var h = new URL(url).hostname.replace(/^www\./, &#x27;&#x27;);</span><br><span class="line">            var s = siteDomain.replace(/^www\./, &#x27;&#x27;);</span><br><span class="line"></span><br><span class="line">            // 白名单匹配</span><br><span class="line">            for (var i = 0; i &lt; DOMAIN_WHITELIST.length; i++) &#123;</span><br><span class="line">                var whiteDomain = DOMAIN_WHITELIST[i].replace(/^www\./, &#x27;&#x27;);</span><br><span class="line">                if (h === whiteDomain || h.endsWith(&#x27;.&#x27; + whiteDomain)) &#123;</span><br><span class="line">                    return false;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            return h !== s;</span><br><span class="line">        &#125; catch &#123;</span><br><span class="line">            return false;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    function fixLink(link) &#123;</span><br><span class="line">        var href = link.href;</span><br><span class="line">        if (!href) return;</span><br><span class="line">        if (href.includes(redirectPage)) return;</span><br><span class="line">        if (isExternalLink(href)) &#123;</span><br><span class="line">            link.href = redirectPage + &#x27;?url=&#x27; + encodeURIComponent(href);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    function run() &#123;</span><br><span class="line">        document.querySelectorAll(&#x27;a[target=&quot;_blank&quot;]&#x27;).forEach(fixLink);</span><br><span class="line">    &#125;</span><br><span class="line">    // 轮询强制覆盖，解决 Artalk 异步渲染问题</span><br><span class="line">    setTimeout(run, 300);</span><br><span class="line">    setTimeout(run, 800);</span><br><span class="line">    setInterval(run, 2000);</span><br><span class="line"></span><br><span class="line">    var observer = new MutationObserver(run);</span><br><span class="line">    observer.observe(document.body, &#123;</span><br><span class="line">        childList: true,</span><br><span class="line">        subtree: true</span><br><span class="line">    &#125;);</span><br><span class="line">&#125;)();</span><br></pre></td></tr></table></figure></section>

<h3 id="html中间页样式文件"><a href="#html中间页样式文件" class="headerlink" title="html中间页样式文件"></a>html中间页样式文件</h3><p>注意：需要自己修改<code>【】</code>中的内容，<code>【】</code>分别是中间页图标和中间页页面logo（不需要要加【】符号），并且直接放在<strong>source</strong>可能不会构建，需要自己直接放在<code>public</code>文件目录直接推送运行，如果每次用<code>hexo clean</code>需要重新放一次，建议备份一个。</p>
<section class="stellar-folders"><div class="stellar-folders__label">link.html</div>

<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><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><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br><span class="line">473</span><br><span class="line">474</span><br><span class="line">475</span><br><span class="line">476</span><br><span class="line">477</span><br><span class="line">478</span><br><span class="line">479</span><br><span class="line">480</span><br><span class="line">481</span><br><span class="line">482</span><br><span class="line">483</span><br><span class="line">484</span><br><span class="line">485</span><br><span class="line">486</span><br><span class="line">487</span><br><span class="line">488</span><br><span class="line">489</span><br><span class="line">490</span><br><span class="line">491</span><br><span class="line">492</span><br><span class="line">493</span><br><span class="line">494</span><br><span class="line">495</span><br><span class="line">496</span><br><span class="line">497</span><br><span class="line">498</span><br><span class="line">499</span><br><span class="line">500</span><br><span class="line">501</span><br><span class="line">502</span><br><span class="line">503</span><br><span class="line">504</span><br><span class="line">505</span><br><span class="line">506</span><br><span class="line">507</span><br><span class="line">508</span><br><span class="line">509</span><br><span class="line">510</span><br><span class="line">511</span><br><span class="line">512</span><br><span class="line">513</span><br><span class="line">514</span><br><span class="line">515</span><br><span class="line">516</span><br><span class="line">517</span><br><span class="line">518</span><br><span class="line">519</span><br><span class="line">520</span><br><span class="line">521</span><br><span class="line">522</span><br><span class="line">523</span><br><span class="line">524</span><br><span class="line">525</span><br><span class="line">526</span><br><span class="line">527</span><br><span class="line">528</span><br><span class="line">529</span><br><span class="line">530</span><br><span class="line">531</span><br><span class="line">532</span><br><span class="line">533</span><br><span class="line">534</span><br><span class="line">535</span><br><span class="line">536</span><br><span class="line">537</span><br><span class="line">538</span><br><span class="line">539</span><br><span class="line">540</span><br><span class="line">541</span><br><span class="line">542</span><br><span class="line">543</span><br><span class="line">544</span><br><span class="line">545</span><br><span class="line">546</span><br><span class="line">547</span><br><span class="line">548</span><br><span class="line">549</span><br><span class="line">550</span><br><span class="line">551</span><br><span class="line">552</span><br><span class="line">553</span><br><span class="line">554</span><br><span class="line">555</span><br><span class="line">556</span><br><span class="line">557</span><br><span class="line">558</span><br><span class="line">559</span><br><span class="line">560</span><br><span class="line">561</span><br><span class="line">562</span><br><span class="line">563</span><br><span class="line">564</span><br><span class="line">565</span><br><span class="line">566</span><br><span class="line">567</span><br><span class="line">568</span><br><span class="line">569</span><br><span class="line">570</span><br><span class="line">571</span><br><span class="line">572</span><br><span class="line">573</span><br><span class="line">574</span><br><span class="line">575</span><br><span class="line">576</span><br><span class="line">577</span><br><span class="line">578</span><br><span class="line">579</span><br><span class="line">580</span><br><span class="line">581</span><br><span class="line">582</span><br><span class="line">583</span><br><span class="line">584</span><br><span class="line">585</span><br><span class="line">586</span><br><span class="line">587</span><br><span class="line">588</span><br><span class="line">589</span><br><span class="line">590</span><br><span class="line">591</span><br><span class="line">592</span><br><span class="line">593</span><br><span class="line">594</span><br><span class="line">595</span><br><span class="line">596</span><br><span class="line">597</span><br><span class="line">598</span><br><span class="line">599</span><br><span class="line">600</span><br><span class="line">601</span><br><span class="line">602</span><br><span class="line">603</span><br><span class="line">604</span><br><span class="line">605</span><br><span class="line">606</span><br><span class="line">607</span><br><span class="line">608</span><br><span class="line">609</span><br><span class="line">610</span><br><span class="line">611</span><br><span class="line">612</span><br><span class="line">613</span><br><span class="line">614</span><br><span class="line">615</span><br><span class="line">616</span><br><span class="line">617</span><br><span class="line">618</span><br><span class="line">619</span><br><span class="line">620</span><br><span class="line">621</span><br><span class="line">622</span><br><span class="line">623</span><br><span class="line">624</span><br><span class="line">625</span><br><span class="line">626</span><br><span class="line">627</span><br><span class="line">628</span><br><span class="line">629</span><br><span class="line">630</span><br><span class="line">631</span><br><span class="line">632</span><br><span class="line">633</span><br><span class="line">634</span><br><span class="line">635</span><br><span class="line">636</span><br><span class="line">637</span><br><span class="line">638</span><br><span class="line">639</span><br><span class="line">640</span><br><span class="line">641</span><br><span class="line">642</span><br><span class="line">643</span><br><span class="line">644</span><br><span class="line">645</span><br><span class="line">646</span><br><span class="line">647</span><br><span class="line">648</span><br><span class="line">649</span><br><span class="line">650</span><br><span class="line">651</span><br><span class="line">652</span><br><span class="line">653</span><br><span class="line">654</span><br><span class="line">655</span><br><span class="line">656</span><br><span class="line">657</span><br><span class="line">658</span><br><span class="line">659</span><br><span class="line">660</span><br><span class="line">661</span><br><span class="line">662</span><br><span class="line">663</span><br><span class="line">664</span><br><span class="line">665</span><br><span class="line">666</span><br><span class="line">667</span><br><span class="line">668</span><br><span class="line">669</span><br><span class="line">670</span><br><span class="line">671</span><br><span class="line">672</span><br><span class="line">673</span><br><span class="line">674</span><br><span class="line">675</span><br><span class="line">676</span><br><span class="line">677</span><br><span class="line">678</span><br><span class="line">679</span><br><span class="line">680</span><br><span class="line">681</span><br><span class="line">682</span><br><span class="line">683</span><br><span class="line">684</span><br><span class="line">685</span><br><span class="line">686</span><br><span class="line">687</span><br><span class="line">688</span><br><span class="line">689</span><br><span class="line">690</span><br><span class="line">691</span><br><span class="line">692</span><br><span class="line">693</span><br><span class="line">694</span><br><span class="line">695</span><br><span class="line">696</span><br><span class="line">697</span><br><span class="line">698</span><br><span class="line">699</span><br><span class="line">700</span><br><span class="line">701</span><br><span class="line">702</span><br><span class="line">703</span><br><span class="line">704</span><br><span class="line">705</span><br><span class="line">706</span><br><span class="line">707</span><br><span class="line">708</span><br><span class="line">709</span><br><span class="line">710</span><br><span class="line">711</span><br><span class="line">712</span><br><span class="line">713</span><br><span class="line">714</span><br><span class="line">715</span><br><span class="line">716</span><br><span class="line">717</span><br><span class="line">718</span><br><span class="line">719</span><br><span class="line">720</span><br><span class="line">721</span><br><span class="line">722</span><br><span class="line">723</span><br><span class="line">724</span><br><span class="line">725</span><br><span class="line">726</span><br><span class="line">727</span><br><span class="line">728</span><br><span class="line">729</span><br><span class="line">730</span><br><span class="line">731</span><br><span class="line">732</span><br><span class="line">733</span><br><span class="line">734</span><br><span class="line">735</span><br><span class="line">736</span><br><span class="line">737</span><br><span class="line">738</span><br><span class="line">739</span><br><span class="line">740</span><br><span class="line">741</span><br><span class="line">742</span><br><span class="line">743</span><br><span class="line">744</span><br><span class="line">745</span><br><span class="line">746</span><br><span class="line">747</span><br><span class="line">748</span><br><span class="line">749</span><br><span class="line">750</span><br><span class="line">751</span><br><span class="line">752</span><br><span class="line">753</span><br><span class="line">754</span><br><span class="line">755</span><br><span class="line">756</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html lang=&quot;zh&quot;&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;</span><br><span class="line">    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,initial-scale=1,user-scalable=no&quot;&gt;</span><br><span class="line">    &lt;link rel=&quot;icon&quot; href=&quot;【中间页网站图标】&quot; type=&quot;image/x-icon&quot;&gt;</span><br><span class="line">    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;</span><br><span class="line">    &lt;meta name=&quot;robots&quot; content=&quot;noindex, nofollow&quot;/&gt;</span><br><span class="line">    &lt;title&gt;😃页面加载中，请稍候...&lt;/title&gt;</span><br><span class="line">    &lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line">        * &#123;</span><br><span class="line">            margin: 0;</span><br><span class="line">            padding: 0;</span><br><span class="line">            box-sizing: border-box;</span><br><span class="line">            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;Helvetica Neue&quot;, Arial, sans-serif;</span><br><span class="line">        &#125;</span><br><span class="line">        body &#123;</span><br><span class="line">            overflow: hidden;</span><br><span class="line">            height: 100vh;</span><br><span class="line">            width: 100vw;</span><br><span class="line">            margin: 0;</span><br><span class="line">            padding: 0;</span><br><span class="line">            transition: background 0.5s ease-in-out, color 0.3s ease;</span><br><span class="line">            animation: pageFadeIn 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards;</span><br><span class="line">            opacity: 0;</span><br><span class="line">            background: linear-gradient(135deg, #121212, #181818);</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        .tip-modal, .copy-success-modal &#123;</span><br><span class="line">            position: fixed;</span><br><span class="line">            top: 0;</span><br><span class="line">            left: 0;</span><br><span class="line">            width: 100vw;</span><br><span class="line">            height: 100vh;</span><br><span class="line">            display: flex;</span><br><span class="line">            align-items: center;</span><br><span class="line">            justify-content: center;</span><br><span class="line">            background: rgba(0, 0, 0, 0.6);</span><br><span class="line">            z-index: 1000;</span><br><span class="line">            transition: all 0.6s cubic-bezier(0.4, 0, 0.2, 1);</span><br><span class="line">        &#125;</span><br><span class="line">        .tip-modal.hidden, .copy-success-modal.hidden &#123;</span><br><span class="line">            opacity: 0;</span><br><span class="line">            pointer-events: none;</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-content, .copy-success-content &#123;</span><br><span class="line">            width: 90%;</span><br><span class="line">            max-width: 420px;</span><br><span class="line">            padding: 36px;</span><br><span class="line">            border-radius: 24px;</span><br><span class="line">            backdrop-filter: blur(20px);</span><br><span class="line">            -webkit-backdrop-filter: blur(20px);</span><br><span class="line">            border: 1px solid rgba(40, 40, 40, 0.8);</span><br><span class="line">            box-shadow: 0 0 40px rgba(0, 0, 0, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.1);</span><br><span class="line">            text-align: center;</span><br><span class="line">            transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);</span><br><span class="line">            position: relative;</span><br><span class="line">            background: rgba(26, 26, 26, 0.88);</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        .tip-modal.hidden .modal-content, .copy-success-modal.hidden .copy-success-content &#123;</span><br><span class="line">            transform: translateY(30px) scale(0.95);</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-title, .copy-success-title &#123;</span><br><span class="line">            font-size: 22px;</span><br><span class="line">            font-weight: 700;</span><br><span class="line">            margin-bottom: 16px;</span><br><span class="line">            letter-spacing: 0.8px;</span><br><span class="line">            color: inherit;</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-desc, .copy-success-desc &#123;</span><br><span class="line">            font-size: 15px;</span><br><span class="line">            line-height: 1.7;</span><br><span class="line">            margin-bottom: 28px;</span><br><span class="line">            opacity: 0.95;</span><br><span class="line">            color: inherit;</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-buttons, .copy-success-buttons &#123;</span><br><span class="line">            display: flex;</span><br><span class="line">            gap: 16px;</span><br><span class="line">            justify-content: center;</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-btn, .copy-success-btn &#123;</span><br><span class="line">            padding: 12px 28px;</span><br><span class="line">            border-radius: 14px;</span><br><span class="line">            border: none;</span><br><span class="line">            cursor: pointer;</span><br><span class="line">            font-size: 15px;</span><br><span class="line">            font-weight: 600;</span><br><span class="line">            transition: all 0.3s ease;</span><br><span class="line">            position: relative;</span><br><span class="line">            overflow: hidden;</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-btn.understand, .copy-success-btn.know &#123;</span><br><span class="line">            background-color: #3B82F6;</span><br><span class="line">            color: white;</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-btn.feedback &#123;</span><br><span class="line">            background-color: #242424;</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-btn::after, .copy-success-btn::after &#123;</span><br><span class="line">            content: &#x27;&#x27;;</span><br><span class="line">            position: absolute;</span><br><span class="line">            top: 0;</span><br><span class="line">            left: -100%;</span><br><span class="line">            width: 100%;</span><br><span class="line">            height: 100%;</span><br><span class="line">            background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);</span><br><span class="line">            transition: left 0.6s ease;</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-btn:hover::after, .copy-success-btn:hover::after &#123;</span><br><span class="line">            left: 100%;</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-btn:hover, .copy-success-btn:hover &#123;</span><br><span class="line">            transform: translateY(-2px);</span><br><span class="line">            box-shadow: 0 8px 20px rgba(0,0,0,0.15);</span><br><span class="line">        &#125;</span><br><span class="line">        .theme-switch &#123;</span><br><span class="line">            position: relative;</span><br><span class="line">            width: 52px;</span><br><span class="line">            height: 52px;</span><br><span class="line">            border-radius: 50%;</span><br><span class="line">            border: none;</span><br><span class="line">            cursor: pointer;</span><br><span class="line">            display: flex;</span><br><span class="line">            align-items: center;</span><br><span class="line">            justify-content: center;</span><br><span class="line">            backdrop-filter: blur(15px);</span><br><span class="line">            -webkit-backdrop-filter: blur(15px);</span><br><span class="line">            box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(255,255,255,0.1);</span><br><span class="line">            transition: all 0.3s ease;</span><br><span class="line">            margin-top: 24px;</span><br><span class="line">            z-index: 99;</span><br><span class="line">            background: rgba(26, 26, 26, 0.9);</span><br><span class="line">            color: #3B82F6;</span><br><span class="line">            border-color: rgba(40, 40, 40, 0.5);</span><br><span class="line">        &#125;</span><br><span class="line">        .theme-switch .tooltip &#123;</span><br><span class="line">            position: absolute;</span><br><span class="line">            bottom: calc(100% + 12px);</span><br><span class="line">            left: 50%;</span><br><span class="line">            transform: translateX(-50%);</span><br><span class="line">            padding: 6px 12px;</span><br><span class="line">            background: #fff;</span><br><span class="line">            color: #333;</span><br><span class="line">            font-size: 12px;</span><br><span class="line">            font-weight: 500;</span><br><span class="line">            border-radius: 8px;</span><br><span class="line">            white-space: nowrap;</span><br><span class="line">            box-shadow: 0 4px 12px rgba(0,0,0,0.15);</span><br><span class="line">            opacity: 0;</span><br><span class="line">            pointer-events: none;</span><br><span class="line">            transition: opacity 0.2s ease, transform 0.2s ease;</span><br><span class="line">            transform: translateX(-50%) translateY(5px);</span><br><span class="line">            z-index: 100;</span><br><span class="line">        &#125;</span><br><span class="line">        .theme-switch .tooltip::after &#123;</span><br><span class="line">            content: &#x27;&#x27;;</span><br><span class="line">            position: absolute;</span><br><span class="line">            top: 100%;</span><br><span class="line">            left: 50%;</span><br><span class="line">            transform: translateX(-50%);</span><br><span class="line">            border-width: 4px;</span><br><span class="line">            border-style: solid;</span><br><span class="line">            border-color: #fff transparent transparent transparent;</span><br><span class="line">        &#125;</span><br><span class="line">        .theme-switch:hover .tooltip &#123;</span><br><span class="line">            opacity: 1;</span><br><span class="line">            transform: translateX(-50%) translateY(0);</span><br><span class="line">        &#125;</span><br><span class="line">        .theme-switch svg &#123;</span><br><span class="line">            width: 26px;</span><br><span class="line">            height: 26px;</span><br><span class="line">            fill: currentColor;</span><br><span class="line">            transition: all 0.3s ease;</span><br><span class="line">        &#125;</span><br><span class="line">        .theme-switch:hover &#123;</span><br><span class="line">            transform: scale(1.08);</span><br><span class="line">            box-shadow: 0 6px 20px rgba(59, 130, 246, 0.25);</span><br><span class="line">        &#125;</span><br><span class="line">        .container &#123;</span><br><span class="line">            display: flex;</span><br><span class="line">            align-items: center;</span><br><span class="line">            justify-content: center;</span><br><span class="line">            height: 100%;</span><br><span class="line">            width: 100%;</span><br><span class="line">            margin: 0;</span><br><span class="line">            flex-direction: column;</span><br><span class="line">            padding: 20px;</span><br><span class="line">        &#125;</span><br><span class="line">        .avatar-placeholder, .avatar &#123;</span><br><span class="line">            width: 108px;</span><br><span class="line">            height: 108px;</span><br><span class="line">            border-radius: 50%;</span><br><span class="line">            margin-bottom: 18px;</span><br><span class="line">            display: block;</span><br><span class="line">            transition: all 0.5s ease;</span><br><span class="line">        &#125;</span><br><span class="line">        .avatar &#123;</span><br><span class="line">            display: none;</span><br><span class="line">            box-shadow: 0 0 30px rgba(59, 130, 246, 0.2);</span><br><span class="line">            border: 2px solid rgba(255,255,255,0.2);</span><br><span class="line">        &#125;</span><br><span class="line">        .description &#123;</span><br><span class="line">            font-size: 24px;</span><br><span class="line">            font-weight: 700;</span><br><span class="line">            margin-bottom: 8px;</span><br><span class="line">            letter-spacing: 0.8px;</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        .subtitle &#123;</span><br><span class="line">            font-size: 14px;</span><br><span class="line">            margin-bottom: 28px;</span><br><span class="line">            color: #C4C4C4;</span><br><span class="line">            opacity: 0.8;</span><br><span class="line">            letter-spacing: 0.5px;</span><br><span class="line">        &#125;</span><br><span class="line">        .loading &#123;</span><br><span class="line">            text-align: center;</span><br><span class="line">            padding: 40px;</span><br><span class="line">            border-radius: 28px;</span><br><span class="line">            animation: fadein 0.8s cubic-bezier(0.4, 0, 0.2, 1);</span><br><span class="line">            width: 100%;</span><br><span class="line">            max-width: 500px;</span><br><span class="line">            transition: all 0.4s ease-in-out;</span><br><span class="line">            backdrop-filter: blur(20px);</span><br><span class="line">            -webkit-backdrop-filter: blur(20px);</span><br><span class="line">            border: 1px solid rgba(40, 40, 40, 0.5);</span><br><span class="line">            box-shadow: 0 0 50px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(255,255,255,0.05);</span><br><span class="line">            position: relative;</span><br><span class="line">            overflow: hidden;</span><br><span class="line">            background: rgba(26, 26, 26, 0.75);</span><br><span class="line">        &#125;</span><br><span class="line">        .loading::before &#123;</span><br><span class="line">            content: &#x27;&#x27;;</span><br><span class="line">            position: absolute;</span><br><span class="line">            top: 0;</span><br><span class="line">            left: 0;</span><br><span class="line">            width: 100%;</span><br><span class="line">            height: 100%;</span><br><span class="line">            background: linear-gradient(45deg, rgba(59,130,246,0.03), rgba(14, 165, 233, 0.02));</span><br><span class="line">            pointer-events: none;</span><br><span class="line">        &#125;</span><br><span class="line">        @keyframes fadein &#123;</span><br><span class="line">            from &#123; opacity: 0; transform: translateY(20px); &#125;</span><br><span class="line">            to &#123; opacity: 1; transform: translateY(0); &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        @keyframes pageFadeIn &#123;</span><br><span class="line">            from &#123; opacity: 0; &#125;</span><br><span class="line">            to &#123; opacity: 1; &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        .content &#123;</span><br><span class="line">            margin-bottom: 28px;</span><br><span class="line">            width: 100%;</span><br><span class="line">        &#125;</span><br><span class="line">        .url-text &#123;</span><br><span class="line">            margin-bottom: 14px;</span><br><span class="line">            font-size: 16px;</span><br><span class="line">            letter-spacing: 0.8px;</span><br><span class="line">            text-align: left;</span><br><span class="line">            font-weight: 500;</span><br><span class="line">            color: #C0C0C0;</span><br><span class="line">        &#125;</span><br><span class="line">        .jump-url &#123;</span><br><span class="line">            position: relative;</span><br><span class="line">            font-size: 16px;</span><br><span class="line">            display: block;</span><br><span class="line">            margin-top: 5px;</span><br><span class="line">            margin-bottom: 32px;</span><br><span class="line">            padding: 18px 24px;</span><br><span class="line">            border-radius: 18px;</span><br><span class="line">            height: auto;</span><br><span class="line">            min-height: 56px;</span><br><span class="line">            white-space: nowrap;</span><br><span class="line">            overflow: hidden;</span><br><span class="line">            text-overflow: ellipsis;</span><br><span class="line">            display: flex;</span><br><span class="line">            align-items: center;</span><br><span class="line">            transition: all 0.3s ease;</span><br><span class="line">            border: 1px solid rgba(40, 40, 40, 0.5);</span><br><span class="line">            box-shadow: inset 0 1px 0 rgba(255,255,255,0.05);</span><br><span class="line">            background-color: rgba(26, 26, 26, 0.8);</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        .copy-btn-container &#123;</span><br><span class="line">            position: absolute;</span><br><span class="line">            display: flex;</span><br><span class="line">            align-items: center;</span><br><span class="line">            right: 12px;</span><br><span class="line">            top: 50%;</span><br><span class="line">            transform: translateY(-50%);</span><br><span class="line">            height: 80%;</span><br><span class="line">            width: 76px;</span><br><span class="line">            flex-direction: row-reverse;</span><br><span class="line">            border-radius: 14px;</span><br><span class="line">            background: linear-gradient(to left, rgba(26,26,26,0.8) 70%,transparent 100%);</span><br><span class="line">        &#125;</span><br><span class="line">        .copy-btn &#123;</span><br><span class="line">            width: 46px;</span><br><span class="line">            height: 46px;</span><br><span class="line">            border-radius: 14px;</span><br><span class="line">            border: 1px solid rgba(40, 40, 40, 0.5);</span><br><span class="line">            transition: all 0.3s ease-in-out;</span><br><span class="line">            cursor: pointer;</span><br><span class="line">            display: flex;</span><br><span class="line">            align-items: center;</span><br><span class="line">            justify-content: center;</span><br><span class="line">            backdrop-filter: blur(12px);</span><br><span class="line">            position: relative;</span><br><span class="line">            overflow: hidden;</span><br><span class="line">            background-color: rgba(26, 26, 26, 0.95);</span><br><span class="line">            color: #C0C0C0;</span><br><span class="line">        &#125;</span><br><span class="line">        .copy-btn::after &#123;</span><br><span class="line">            content: &#x27;&#x27;;</span><br><span class="line">            position: absolute;</span><br><span class="line">            top: 0;</span><br><span class="line">            left: -100%;</span><br><span class="line">            width: 100%;</span><br><span class="line">            height: 100%;</span><br><span class="line">            background: linear-gradient(90deg, transparent, rgba(255,255,255,0.15), transparent);</span><br><span class="line">            transition: left 0.5s ease;</span><br><span class="line">        &#125;</span><br><span class="line">        .copy-btn:hover::after &#123;</span><br><span class="line">            left: 100%;</span><br><span class="line">        &#125;</span><br><span class="line">        .copy-btn-container svg &#123;</span><br><span class="line">            width: 24px;</span><br><span class="line">            height: 24px;</span><br><span class="line">            fill: currentColor;</span><br><span class="line">        &#125;</span><br><span class="line">        .copy-btn:hover &#123;</span><br><span class="line">            transform: scale(1.08);</span><br><span class="line">            box-shadow: 0 4px 12px rgba(59, 130, 246, 0.2);</span><br><span class="line">        &#125;</span><br><span class="line">        .countdown-text &#123;</span><br><span class="line">            margin-top: 8px;</span><br><span class="line">            font-size: 14px;</span><br><span class="line">            line-height: 1.6;</span><br><span class="line">            opacity: 0.8;</span><br><span class="line">            letter-spacing: 0.5px;</span><br><span class="line">            color: #C0C0C0;</span><br><span class="line">        &#125;</span><br><span class="line">        .button-container &#123;</span><br><span class="line">            display: flex;</span><br><span class="line">            justify-content: center;</span><br><span class="line">            gap: 20px;</span><br><span class="line">            margin-top: 16px;</span><br><span class="line">            width: 100%;</span><br><span class="line">        &#125;</span><br><span class="line">        .button &#123;</span><br><span class="line">            padding: 0;</span><br><span class="line">            border-radius: 16px;</span><br><span class="line">            border: none;</span><br><span class="line">            cursor: pointer;</span><br><span class="line">            font-size: 16px;</span><br><span class="line">            font-weight: 600;</span><br><span class="line">            width: 100%;</span><br><span class="line">            max-width: 150px;</span><br><span class="line">            height: 50px;</span><br><span class="line">            transition: all 0.3s ease;</span><br><span class="line">            display: flex;</span><br><span class="line">            align-items: center;</span><br><span class="line">            justify-content: center;</span><br><span class="line">            letter-spacing: 0.8px;</span><br><span class="line">            position: relative;</span><br><span class="line">            overflow: hidden;</span><br><span class="line">        &#125;</span><br><span class="line">        .cancel-button &#123;</span><br><span class="line">            background-color: #242424;</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        .confirm-button &#123;</span><br><span class="line">            background-color: #3B82F6;</span><br><span class="line">            color: #FFF;</span><br><span class="line">        &#125;</span><br><span class="line">        .button::after &#123;</span><br><span class="line">            content: &#x27;&#x27;;</span><br><span class="line">            position: absolute;</span><br><span class="line">            top: 0;</span><br><span class="line">            left: -100%;</span><br><span class="line">            width: 100%;</span><br><span class="line">            height: 100%;</span><br><span class="line">            background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);</span><br><span class="line">            transition: left 0.6s ease;</span><br><span class="line">        &#125;</span><br><span class="line">        .button:hover::after &#123;</span><br><span class="line">            left: 100%;</span><br><span class="line">        &#125;</span><br><span class="line">        .button:hover &#123;</span><br><span class="line">            transform: translateY(-3px);</span><br><span class="line">            box-shadow: 0 10px 24px rgba(0, 0, 0, 0.15);</span><br><span class="line">        &#125;</span><br><span class="line">        .button:active &#123;</span><br><span class="line">            transform: translateY(-1px);</span><br><span class="line">            box-shadow: 0 6px 16px rgba(0, 0, 0, 0.15);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light &#123;</span><br><span class="line">            background: linear-gradient(135deg, #F8FAFF, #EFF6FF);</span><br><span class="line">            color: #1E293B;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .loading &#123;</span><br><span class="line">            background: rgba(255,255,255,0.75);</span><br><span class="line">            border-color: rgba(255, 255, 255, 0.2);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .loading:hover &#123;</span><br><span class="line">            box-shadow: 0 0 60px rgba(59,130,246,0.18);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .description &#123;</span><br><span class="line">            color: #1E293B;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .url-text &#123;</span><br><span class="line">            color: #2A3B4C;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .countdown-text &#123;</span><br><span class="line">            color: #64748B;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .jump-url &#123;</span><br><span class="line">            background-color: rgba(255, 255, 255, 0.9);</span><br><span class="line">            color: #1E293B;</span><br><span class="line">            border-color: rgba(255,255,255,0.15);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .copy-btn-container &#123;</span><br><span class="line">            background: linear-gradient(to left, rgba(255,255,255,0.9) 70%,transparent 100%);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .copy-btn &#123;</span><br><span class="line">            background-color: rgba(255, 255, 255, 0.95);</span><br><span class="line">            color: #475569;</span><br><span class="line">            border-color: rgba(164, 164, 164, 0.2);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .cancel-button &#123;</span><br><span class="line">            background-color: #EFF6FF;</span><br><span class="line">            color: #2563EB;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .confirm-button &#123;</span><br><span class="line">            background-color: #2563EB;</span><br><span class="line">            color: white;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .theme-switch &#123;</span><br><span class="line">            background: rgba(255,255,255,0.9);</span><br><span class="line">            color: #2563EB;</span><br><span class="line">            border: 1px solid rgba(37, 99, 235, 0.15);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .modal-content, body.light .copy-success-content &#123;</span><br><span class="line">            background: rgba(255,255,255,0.88);</span><br><span class="line">            color: #1E293B;</span><br><span class="line">            border-color: rgba(255, 255, 255, 0.25);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .modal-btn.understand, body.light .copy-success-btn.know &#123;</span><br><span class="line">            background-color: #2563EB;</span><br><span class="line">            color: white;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .modal-btn.feedback &#123;</span><br><span class="line">            background-color: #EFF6FF;</span><br><span class="line">            color: #2563EB;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark &#123;</span><br><span class="line">            background: linear-gradient(135deg, #121212, #181818);</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .loading &#123;</span><br><span class="line">            background: rgba(26, 26, 26, 0.75);</span><br><span class="line">            border-color: rgba(40, 40, 40, 0.5);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .loading:hover &#123;</span><br><span class="line">            box-shadow: 0 0 60px rgba(0, 0, 0, 0.35);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .description &#123;</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .url-text, body.dark .countdown-text &#123;</span><br><span class="line">            color: #C0C0C0;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .jump-url &#123;</span><br><span class="line">            background-color: rgba(26, 26, 26, 0.8);</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">            border-color: rgba(40, 40, 40, 0.5);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .copy-btn-container &#123;</span><br><span class="line">            background: linear-gradient(to left, rgba(26,26,26,0.8) 70%,transparent 100%);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .copy-btn &#123;</span><br><span class="line">            background-color: rgba(26, 26, 26, 0.95);</span><br><span class="line">            color: #C0C0C0;</span><br><span class="line">            border-color: rgba(40, 40, 40, 0.5);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .cancel-button &#123;</span><br><span class="line">            background-color: #242424;</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .confirm-button &#123;</span><br><span class="line">            background-color: #3B82F6;</span><br><span class="line">            color: #FFF;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .theme-switch &#123;</span><br><span class="line">            background: rgba(26, 26, 26, 0.9);</span><br><span class="line">            color: #3B82F6;</span><br><span class="line">            border-color: rgba(40, 40, 40, 0.5);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .modal-content, body.dark .copy-success-content &#123;</span><br><span class="line">            background: rgba(26, 26, 26, 0.88);</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">            border-color: rgba(40, 40, 40, 0.8);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .modal-btn.understand, body.dark .copy-success-btn.know &#123;</span><br><span class="line">            background-color: #3B82F6;</span><br><span class="line">            color: white;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .modal-btn.feedback &#123;</span><br><span class="line">            background-color: #242424;</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        @media (max-width: 480px) &#123;</span><br><span class="line">            .loading &#123;</span><br><span class="line">                padding: 32px 28px;</span><br><span class="line">            &#125;</span><br><span class="line">            .description &#123;</span><br><span class="line">                font-size: 22px;</span><br><span class="line">            &#125;</span><br><span class="line">            .jump-url &#123;</span><br><span class="line">                font-size: 14px;</span><br><span class="line">                padding: 16px 20px;</span><br><span class="line">            &#125;</span><br><span class="line">            .button &#123;</span><br><span class="line">                max-width: 130px;</span><br><span class="line">                height: 46px;</span><br><span class="line">                font-size: 15px;</span><br><span class="line">            &#125;</span><br><span class="line">            .theme-switch &#123;</span><br><span class="line">                width: 48px;</span><br><span class="line">                height: 48px;</span><br><span class="line">                margin-top: 20px;</span><br><span class="line">            &#125;</span><br><span class="line">            .theme-switch svg &#123;</span><br><span class="line">                width: 24px;</span><br><span class="line">                height: 24px;</span><br><span class="line">            &#125;</span><br><span class="line">            .modal-content, .copy-success-content &#123;</span><br><span class="line">                padding: 32px 28px;</span><br><span class="line">            &#125;</span><br><span class="line">            .modal-title, .copy-success-title &#123;</span><br><span class="line">                font-size: 20px;</span><br><span class="line">            &#125;</span><br><span class="line">            .modal-btn, .copy-success-btn &#123;</span><br><span class="line">                padding: 10px 24px;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body class=&quot;dark&quot;&gt;</span><br><span class="line">    &lt;div class=&quot;tip-modal&quot; id=&quot;tipModal&quot;&gt;</span><br><span class="line">        &lt;div class=&quot;modal-content&quot;&gt;</span><br><span class="line">            &lt;div class=&quot;modal-title&quot;&gt;内容审查提示&lt;/div&gt;</span><br><span class="line">            &lt;div class=&quot;modal-desc&quot;&gt;内容审查严格，需自行点击跳转至目标链接。如有非法、违规等问题链接，请点击下方反馈按钮提交处理。&lt;/div&gt;</span><br><span class="line">            &lt;div class=&quot;modal-buttons&quot;&gt;</span><br><span class="line">                &lt;button class=&quot;modal-btn understand&quot; id=&quot;understandBtn&quot;&gt;我知道了&lt;/button&gt;</span><br><span class="line">                &lt;button class=&quot;modal-btn feedback&quot; id=&quot;feedbackBtn&quot; onclick=&quot;window.location.href=&#x27;https://feedback.koxiuqiu.cn&#x27;&quot;&gt;问题反馈&lt;/button&gt;</span><br><span class="line">            &lt;/div&gt;</span><br><span class="line">        &lt;/div&gt;</span><br><span class="line">    &lt;/div&gt;</span><br><span class="line">    &lt;div class=&quot;copy-success-modal hidden&quot; id=&quot;copySuccessModal&quot;&gt;</span><br><span class="line">        &lt;div class=&quot;copy-success-content&quot;&gt;</span><br><span class="line">            &lt;div class=&quot;copy-success-title&quot;&gt;复制成功&lt;/div&gt;</span><br><span class="line">            &lt;div class=&quot;copy-success-desc&quot;&gt;链接已成功复制到剪贴板，可直接粘贴使用&lt;/div&gt;</span><br><span class="line">            &lt;div class=&quot;copy-success-buttons&quot;&gt;</span><br><span class="line">                &lt;button class=&quot;copy-success-btn know&quot; id=&quot;knowBtn&quot;&gt;了解&lt;/button&gt;</span><br><span class="line">            &lt;/div&gt;</span><br><span class="line">        &lt;/div&gt;</span><br><span class="line">    &lt;/div&gt;</span><br><span class="line">    &lt;div class=&quot;container&quot;&gt;</span><br><span class="line">        &lt;div class=&quot;avatar-placeholder&quot;&gt;&lt;/div&gt;</span><br><span class="line">        &lt;img src=&quot;&quot; alt=&quot;头像&quot; class=&quot;avatar&quot;&gt;</span><br><span class="line">        &lt;div class=&quot;description&quot;&gt;朽丘秋雨&lt;/div&gt;</span><br><span class="line">        &lt;div class=&quot;subtitle&quot;&gt;安全提示&lt;/div&gt;</span><br><span class="line">        &lt;div class=&quot;loading&quot;&gt;</span><br><span class="line">            &lt;div class=&quot;content&quot;&gt;</span><br><span class="line">                &lt;div class=&quot;url-text&quot;&gt;您即将离开本站，跳转到：&lt;/div&gt;</span><br><span class="line">                &lt;div class=&quot;jump-url&quot; id=&quot;jump-url&quot;&gt;</span><br><span class="line">                    &lt;span id=&quot;jump-url-text&quot;&gt;&lt;/span&gt;</span><br><span class="line">                    &lt;div class=&quot;copy-btn-container&quot;&gt;</span><br><span class="line">                        &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyToClipboard()&quot;&gt;</span><br><span class="line">                            &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;</span><br><span class="line">                                &lt;path d=&quot;M208 0L332.1 0c12.7 0 24.9 5.1 33.9 14.1l67.9 67.9c9 9 14.1 21.2 14.1 33.9L448 336c0 26.5-21.5 48-48 48l-192 0c-26.5 0-48-21.5-48-48l0-288c0-26.5 21.5-48 48-48zM48 128l80 0 0 64-64 0 0 256 192 0 0-32 64 0 0 48c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 176c0-26.5 21.5-48 48-48z&quot;/&gt;</span><br><span class="line">                            &lt;/svg&gt;</span><br><span class="line">                        &lt;/button&gt;</span><br><span class="line">                    &lt;/div&gt;</span><br><span class="line">                &lt;/div&gt;</span><br><span class="line">            &lt;/div&gt;</span><br><span class="line">            &lt;div class=&quot;countdown-text&quot;&gt;💡请自行确认链接安全性，手动点击跳转&lt;/div&gt;</span><br><span class="line">            &lt;div class=&quot;button-container&quot;&gt;</span><br><span class="line">                &lt;button class=&quot;button cancel-button&quot; onclick=&quot;closeWindow()&quot;&gt;取消跳转&lt;/button&gt;</span><br><span class="line">                &lt;button class=&quot;button confirm-button&quot; onclick=&quot;jump()&quot;&gt;立即跳转&lt;/button&gt;</span><br><span class="line">            &lt;/div&gt;</span><br><span class="line">        &lt;/div&gt;</span><br><span class="line">        &lt;button class=&quot;theme-switch&quot; id=&quot;themeSwitch&quot;&gt;</span><br><span class="line">            &lt;span class=&quot;tooltip&quot;&gt;是否切换主题&lt;/span&gt;</span><br><span class="line">            &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; id=&quot;themeIcon&quot;&gt;</span><br><span class="line">                &lt;path d=&quot;M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32V64 448 480c0 17.7 14.3 32 32 32s32-14.3 32-32V416l64.3-64.3c43.1 25.7 95.8 32.8 141.7 19.4c61.4-18.3 103.9-75.1 103.9-139.1c0-97.2-78.8-176-176-176c-64 0-120.8 42.5-139.1 103.9c-13.4 45.9-6.3 98.6 19.4 141.7L64 416V32z&quot;/&gt;</span><br><span class="line">            &lt;/svg&gt;</span><br><span class="line">        &lt;/button&gt;</span><br><span class="line">    &lt;/div&gt;</span><br><span class="line">    &lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line">        function updateThemeIcon(theme) &#123;</span><br><span class="line">            const icon = document.getElementById(&#x27;themeIcon&#x27;);</span><br><span class="line">            if (theme === &#x27;dark&#x27;) &#123;</span><br><span class="line">                icon.innerHTML = &#x27;&lt;path d=&quot;M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32V64 448 480c0 17.7 14.3 32 32 32s32-14.3 32-32V416l64.3-64.3c43.1 25.7 95.8 32.8 141.7 19.4c61.4-18.3 103.9-75.1 103.9-139.1c0-97.2-78.8-176-176-176c-64 0-120.8 42.5-139.1 103.9c-13.4 45.9-6.3 98.6 19.4 141.7L64 416V32z&quot;/&gt;&#x27;;</span><br><span class="line">            &#125; else &#123;</span><br><span class="line">                icon.innerHTML = &#x27;&lt;path d=&quot;M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9 165.7 509.2c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 1.8c4.5-3.1 10.2-3.7 15.2-1.6zM256 128a128 128 0 1 0 0 256 128 128 0 1 0 0-256z&quot;/&gt;&#x27;;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        function toggleTheme() &#123;</span><br><span class="line">            const body = document.body;</span><br><span class="line">            let newTheme = &#x27;light&#x27;;</span><br><span class="line">            if (body.classList.contains(&#x27;light&#x27;)) &#123;</span><br><span class="line">                newTheme = &#x27;dark&#x27;;</span><br><span class="line">                body.classList.remove(&#x27;light&#x27;);</span><br><span class="line">                body.classList.add(&#x27;dark&#x27;);</span><br><span class="line">            &#125; else &#123;</span><br><span class="line">                newTheme = &#x27;light&#x27;;</span><br><span class="line">                body.classList.remove(&#x27;dark&#x27;);</span><br><span class="line">                body.classList.add(&#x27;light&#x27;);</span><br><span class="line">            &#125;</span><br><span class="line">            localStorage.setItem(&#x27;theme&#x27;, newTheme);</span><br><span class="line">            updateThemeIcon(newTheme);</span><br><span class="line">            window.dispatchEvent(new StorageEvent(&#x27;storage&#x27;, &#123; key: &#x27;theme&#x27;, newValue: newTheme &#125;));</span><br><span class="line">        &#125;</span><br><span class="line">        function GetQueryString(name) &#123;</span><br><span class="line">            var reg = new RegExp(&quot;(^|&amp;)&quot; + name + &quot;=([^&amp;]*)(&amp;|$)&quot;, &quot;i&quot;);</span><br><span class="line">            var r = window.location.search.substr(1).match(reg);</span><br><span class="line">            return r ? decodeURIComponent(r[2]) : null;</span><br><span class="line">        &#125;</span><br><span class="line">        function decodeSafeUrlParam(paramStr) &#123;</span><br><span class="line">            try &#123;</span><br><span class="line">                const base64 = paramStr.replace(/-/g, &#x27;+&#x27;).replace(/_/g, &#x27;/&#x27;);</span><br><span class="line">                const paddedBase64 = base64.padEnd(base64.length + (4 - base64.length % 4) % 4, &#x27;=&#x27;);</span><br><span class="line">                const decodedBinary = atob(paddedBase64);</span><br><span class="line">                const decoded = decodeURIComponent(Array.from(decodedBinary).map(c =&gt; </span><br><span class="line">                    &#x27;%&#x27; + (&#x27;00&#x27; + c.charCodeAt(0).toString(16)).slice(-2)</span><br><span class="line">                ).join(&#x27;&#x27;));</span><br><span class="line">                return decoded;</span><br><span class="line">            &#125; catch (e) &#123;</span><br><span class="line">                console.warn(&#x27;URL解码失败，使用原始值:&#x27;, e);</span><br><span class="line">                return paramStr;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        // 👇 这里已经改成支持 ?u= 加密参数</span><br><span class="line">        let jump_url = GetQueryString(&#x27;u&#x27;) || GetQueryString(&#x27;url&#x27;);</span><br><span class="line"></span><br><span class="line">        if (jump_url) &#123;</span><br><span class="line">            jump_url = decodeSafeUrlParam(jump_url);</span><br><span class="line">        &#125;</span><br><span class="line">        const UrlReg = new RegExp(&#x27;^((http|https|thunder|qqdl|ed2k|Flashget|qbrowser|ftp|rtsp|mms)://)&#x27;, &#x27;i&#x27;);</span><br><span class="line">        if (!jump_url || !UrlReg.test(jump_url)) &#123;</span><br><span class="line">            document.title = &#x27;参数错误，正在返回首页...&#x27;;</span><br><span class="line">            jump_url = location.origin;</span><br><span class="line">        &#125;</span><br><span class="line">        function jump() &#123;</span><br><span class="line">            location.href = jump_url;</span><br><span class="line">        &#125;</span><br><span class="line">        function closeWindow() &#123;</span><br><span class="line">            function isWeChat() &#123;</span><br><span class="line">                return /MicroMessenger/i.test(navigator.userAgent);</span><br><span class="line">            &#125;</span><br><span class="line">            function isQQ() &#123;</span><br><span class="line">                return /QQ/i.test(navigator.userAgent) &amp;&amp; !/MicroMessenger/i.test(navigator.userAgent);</span><br><span class="line">            &#125;</span><br><span class="line">            if (isWeChat()) &#123;</span><br><span class="line">                if (typeof WeixinJSBridge !== &quot;undefined&quot;) &#123;</span><br><span class="line">                    WeixinJSBridge.call(&#x27;closeWindow&#x27;);</span><br><span class="line">                &#125; else &#123;</span><br><span class="line">                    document.addEventListener(&#x27;WeixinJSBridgeReady&#x27;, function () &#123;</span><br><span class="line">                        WeixinJSBridge.call(&#x27;closeWindow&#x27;);</span><br><span class="line">                    &#125;, &#123; once: true &#125;);</span><br><span class="line">                &#125;</span><br><span class="line">            &#125; else if (isQQ()) &#123;</span><br><span class="line">                try &#123;</span><br><span class="line">                    if (typeof mqq !== &quot;undefined&quot; &amp;&amp; mqq.ui &amp;&amp; mqq.ui.closeWebView) &#123;</span><br><span class="line">                        mqq.ui.closeWebView();</span><br><span class="line">                    &#125; else &#123;</span><br><span class="line">                        fallbackBack();</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125; catch (e) &#123;</span><br><span class="line">                    fallbackBack();</span><br><span class="line">                &#125;</span><br><span class="line">            &#125; else &#123;</span><br><span class="line">                window.opener = null;</span><br><span class="line">                window.open(&#x27;&#x27;, &#x27;_self&#x27;);</span><br><span class="line">                window.close();</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        function fallbackBack() &#123;</span><br><span class="line">            if (window.history.length &lt;= 1) &#123;</span><br><span class="line">                window.location.href = location.origin;</span><br><span class="line">            &#125; else &#123;</span><br><span class="line">                window.history.back();</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        function showCopySuccess() &#123;</span><br><span class="line">            const copyModal = document.getElementById(&#x27;copySuccessModal&#x27;);</span><br><span class="line">            copyModal.classList.remove(&#x27;hidden&#x27;);</span><br><span class="line">        &#125;</span><br><span class="line">        function closeCopySuccessModal() &#123;</span><br><span class="line">            const copyModal = document.getElementById(&#x27;copySuccessModal&#x27;);</span><br><span class="line">            copyModal.classList.add(&#x27;hidden&#x27;);</span><br><span class="line">        &#125;</span><br><span class="line">        function copyToClipboard() &#123;</span><br><span class="line">            const urlText = document.getElementById(&#x27;jump-url-text&#x27;).textContent;</span><br><span class="line">            navigator.clipboard.writeText(urlText).then(showCopySuccess)</span><br><span class="line">            .catch(() =&gt; &#123;</span><br><span class="line">                const tempInput = document.createElement(&#x27;input&#x27;);</span><br><span class="line">                tempInput.value = urlText;</span><br><span class="line">                document.body.appendChild(tempInput);</span><br><span class="line">                tempInput.select();</span><br><span class="line">                document.execCommand(&#x27;copy&#x27;);</span><br><span class="line">                document.body.removeChild(tempInput);</span><br><span class="line">                showCopySuccess();</span><br><span class="line">            &#125;);</span><br><span class="line">        &#125;</span><br><span class="line">        async function loadAvatar() &#123;</span><br><span class="line">            const avatarImg = document.querySelector(&#x27;.avatar&#x27;);</span><br><span class="line">            const placeholder = document.querySelector(&#x27;.avatar-placeholder&#x27;);</span><br><span class="line">            const img = new Image();</span><br><span class="line">            img.src = &#x27;【你的中间页的logo图标】&#x27;;</span><br><span class="line">            img.onload = function () &#123;</span><br><span class="line">                avatarImg.src = img.src;</span><br><span class="line">                avatarImg.style.display = &#x27;block&#x27;;</span><br><span class="line">                placeholder.style.display = &#x27;none&#x27;;</span><br><span class="line">            &#125;</span><br><span class="line">            img.onerror = function() &#123;</span><br><span class="line">                placeholder.style.display = &#x27;none&#x27;;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        function closeTipModal() &#123;</span><br><span class="line">            const modal = document.getElementById(&#x27;tipModal&#x27;);</span><br><span class="line">            modal.classList.add(&#x27;hidden&#x27;);</span><br><span class="line">        &#125;</span><br><span class="line">        function handleFeedback() &#123;</span><br><span class="line">            window.open(location.origin + &#x27;/feedback&#x27;, &#x27;_blank&#x27;);</span><br><span class="line">            closeTipModal();</span><br><span class="line">        &#125;</span><br><span class="line">        window.addEventListener(&#x27;load&#x27;, function () &#123;</span><br><span class="line">            loadAvatar();</span><br><span class="line">            const jumpUrlElement = document.getElementById(&#x27;jump-url-text&#x27;);</span><br><span class="line">            jumpUrlElement.textContent = jump_url;</span><br><span class="line">            const countdownText = document.querySelector(&#x27;.countdown-text&#x27;);</span><br><span class="line">            countdownText.textContent = &quot;💡请自行确认链接安全性，手动点击跳转&quot;;</span><br><span class="line">            document.getElementById(&#x27;themeSwitch&#x27;).addEventListener(&#x27;click&#x27;, toggleTheme);</span><br><span class="line">            document.getElementById(&#x27;understandBtn&#x27;).addEventListener(&#x27;click&#x27;, closeTipModal);</span><br><span class="line">            document.getElementById(&#x27;feedbackBtn&#x27;).addEventListener(&#x27;click&#x27;, handleFeedback);</span><br><span class="line">            document.getElementById(&#x27;knowBtn&#x27;).addEventListener(&#x27;click&#x27;, closeCopySuccessModal);</span><br><span class="line">        &#125;);</span><br><span class="line">    &lt;/script&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure></section>

<h3 id="引用js脚本"><a href="#引用js脚本" class="headerlink" title="引用js脚本"></a>引用js脚本</h3><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></pre></td><td class="code"><pre><span class="line">script:</span><br><span class="line">...</span><br><span class="line">- &lt;script src=&quot;/js/文件名.js&quot;&gt;&lt;/script&gt; #Artalk跳转中间页</span><br></pre></td></tr></table></figure>

<h2 id="四、常见问题解决"><a href="#四、常见问题解决" class="headerlink" title="四、常见问题解决"></a>四、常见问题解决</h2><h3 id="问题1："><a href="#问题1：" class="headerlink" title="问题1："></a>问题1：</h3><p><strong>修改后表情包没有变大、点击无预览</strong></p>
<ul>
<li>排查1：确认 artalk.styl 文件路径正确，是否覆盖了原文件，保存是否成功。</li>
<li>排查2：确认 custom.js 文件存在，JS代码是否完整复制（无遗漏、无多余字符）。</li>
<li>排查3：执行 <code>hexo clean</code> 清除缓存，再重启hexo（缓存会导致修改不生效）。</li>
</ul>
<h3 id="问题2："><a href="#问题2：" class="headerlink" title="问题2："></a>问题2：</h3><p><strong>预览框太大&#x2F;太小，想调整尺寸</strong></p>
<p>修改 ak.js 文件中 9、10行 部分的 <code>width</code> 和 <code>height</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></pre></td><td class="code"><pre><span class="line">// 配置项（可自定义修改）</span><br><span class="line">this.config = &#123;</span><br><span class="line">  zoomRatio: 3, // 放大倍数</span><br><span class="line">  maxSize: 220, // 最大宽高）</span><br></pre></td></tr></table></figure>

<h3 id="问题3："><a href="#问题3：" class="headerlink" title="问题3："></a>问题3：</h3><p><strong>预览框显示异常（无背景、无边框）</strong></p>
<p>原因：你的主题没有 <code>--liushen-card-secondbg</code> 等自定义变量，已做兼容处理，若仍异常，修改 <code>#owo-big</code> 部分：</p>
<figure class="highlight stylus"><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></pre></td><td class="code"><pre><span class="line"><span class="selector-id">#owo-big</span></span><br><span class="line">  <span class="attribute">background</span>: <span class="number">#fff</span>  // 改为纯色背景，如<span class="number">#fff</span>（白色）、<span class="number">#f5f5f5</span>（浅灰）</span><br><span class="line">  <span class="attribute">border</span>: <span class="number">1px</span> solid <span class="number">#eee</span>  // 改为固定边框，避免主题变量缺失导致无边框</span><br><span class="line">  ...（其他内容不变）</span><br></pre></td></tr></table></figure>

<h2 id="四、补充说明"><a href="#四、补充说明" class="headerlink" title="四、补充说明"></a>四、补充说明</h2><ul>
<li>本教程仅修改 Artalk 评论区表情包样式，不影响 Artalk 其他功能（评论发送、回复、表情选择等）。</li>
<li>若后续主题更新，可能会覆盖 <strong>artalk.styl</strong> 文件，更新后需重新执行本教程步骤（说个人话就是收藏一下）。</li>
<li>所有修改均基于原生 Artalk 和 hexo-theme-stellar 主题，其他主题（如 next、butterfly）可参考，核心是找到 artalk.styl 文件并替换源码、添加JS。</li>
</ul>
<h2 id="五、结尾"><a href="#五、结尾" class="headerlink" title="五、结尾"></a>五、结尾</h2><p>全程只需4步：备份原文件 → 替换 artalk.styl 源码 → 添加JS → 重启hexo，即可实现评论区表情包放大+点击预览功能，无需任何专业知识，新手也能轻松完成。</p>
<p>若遇到其他问题，可在评论区留言，会及时补充解决方案。</p>
<h2 id="重要更新-可在用前阅读"><a href="#重要更新-可在用前阅读" class="headerlink" title="重要更新(可在用前阅读)"></a>重要更新(可在用前阅读)</h2><section class="stellar-folders"><div class="stellar-folders__label">2026/4/15更新：修复Artalk内容无中间页,URL未使用安全加密(JS文件代码)</div>

<p>更新内容概括：</p>
<ul>
<li>修改中间页跳转功能的JS</li>
<li>修复评论区链接漏处理</li>
</ul>
<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><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><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br></pre></td><td class="code"><pre><span class="line">(function() &#123;</span><br><span class="line">    // ======================</span><br><span class="line">    // ✅ 白名单（在这里添加）</span><br><span class="line">    // ======================</span><br><span class="line">    window.DOMAIN_WHITELIST = [</span><br><span class="line">        &quot;koxiuqiu.cn&quot;,</span><br><span class="line">        &quot;blogscn.fun&quot;,</span><br><span class="line">        &quot;www.foreverblog.cn&quot;,</span><br><span class="line">    ];</span><br><span class="line"></span><br><span class="line">    var siteDomain = window.location.hostname;</span><br><span class="line">    var redirectPage = &#x27;/link.html&#x27;;</span><br><span class="line">    var DOMAIN_WHITELIST = window.DOMAIN_WHITELIST || [];</span><br><span class="line"></span><br><span class="line">    function isExternalLink(url) &#123;</span><br><span class="line">        if (!url || !/^https?:\/\//.test(url)) return false;</span><br><span class="line">        try &#123;</span><br><span class="line">            var h = new URL(url).hostname.replace(/^www\./, &#x27;&#x27;);</span><br><span class="line">            var s = siteDomain.replace(/^www\./, &#x27;&#x27;);</span><br><span class="line"></span><br><span class="line">            // 白名单匹配</span><br><span class="line">            for (var i = 0; i &lt; DOMAIN_WHITELIST.length; i++) &#123;</span><br><span class="line">                var whiteDomain = DOMAIN_WHITELIST[i].replace(/^www\./, &#x27;&#x27;);</span><br><span class="line">                if (h === whiteDomain || h.endsWith(&#x27;.&#x27; + whiteDomain)) &#123;</span><br><span class="line">                    return false;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            return h !== s;</span><br><span class="line">        &#125; catch &#123;</span><br><span class="line">            return false;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    // ======================</span><br><span class="line">    // ✅ 修复：正确的 Base64 加密（</span><br><span class="line">    // ======================</span><br><span class="line">    function encodeSafeUrl(url) &#123;</span><br><span class="line">        try &#123;</span><br><span class="line">            // 1. 先 UTF-8 编码</span><br><span class="line">            const utf8 = unescape(encodeURIComponent(url));</span><br><span class="line">            // 2. 标准 Base64</span><br><span class="line">            let base64 = btoa(utf8);</span><br><span class="line">            // 3. 转换成 URL 安全格式</span><br><span class="line">            base64 = base64.replace(/\+/g, &#x27;-&#x27;).replace(/\//g, &#x27;_&#x27;).replace(/=/g, &#x27;&#x27;);</span><br><span class="line">            return base64;</span><br><span class="line">        &#125; catch (e) &#123;</span><br><span class="line">            console.warn(&#x27;Base64 加密失败&#x27;, e);</span><br><span class="line">            return encodeURIComponent(url);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    function fixLink(link) &#123;</span><br><span class="line">        var href = link.href;</span><br><span class="line">        if (!href) return;</span><br><span class="line">        if (href.includes(redirectPage)) return;</span><br><span class="line">        if (isExternalLink(href)) &#123;</span><br><span class="line">            // ✅ 强制新标签页打开</span><br><span class="line">            link.target = &#x27;_blank&#x27;;</span><br><span class="line">            link.rel = &#x27;noopener noreferrer nofollow&#x27;;</span><br><span class="line">            // ✅ 加密后跳转</span><br><span class="line">            link.href = redirectPage + &#x27;?url=&#x27; + encodeSafeUrl(href);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    function run() &#123;</span><br><span class="line">        // 修复：覆盖所有链接，包括评论内容里的</span><br><span class="line">        document.querySelectorAll(&#x27;a&#x27;).forEach(fixLink);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    // 轮询强制覆盖，解决 Artalk 异步渲染问题</span><br><span class="line">    setTimeout(run, 300);</span><br><span class="line">    setTimeout(run, 800);</span><br><span class="line">    setInterval(run, 2000);</span><br><span class="line"></span><br><span class="line">    // ==========================================</span><br><span class="line">    // ✅ 最小修复：只加一个 if 判断，不报错</span><br><span class="line">    // ==========================================</span><br><span class="line">    var observer = new MutationObserver(run);</span><br><span class="line">    if (document.body) &#123;</span><br><span class="line">        observer.observe(document.body, &#123;</span><br><span class="line">            childList: true,</span><br><span class="line">            subtree: true</span><br><span class="line">        &#125;);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;)();</span><br></pre></td></tr></table></figure>

<p>更新内容概括：</p>
<ul>
<li>修复解码逻辑</li>
</ul>
<div class="stellar-folders__label">2026/4/15更新：修复中间页自己跳转自己，解密失败问题(也就是link.html文件代码)</div>
<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><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><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br><span class="line">473</span><br><span class="line">474</span><br><span class="line">475</span><br><span class="line">476</span><br><span class="line">477</span><br><span class="line">478</span><br><span class="line">479</span><br><span class="line">480</span><br><span class="line">481</span><br><span class="line">482</span><br><span class="line">483</span><br><span class="line">484</span><br><span class="line">485</span><br><span class="line">486</span><br><span class="line">487</span><br><span class="line">488</span><br><span class="line">489</span><br><span class="line">490</span><br><span class="line">491</span><br><span class="line">492</span><br><span class="line">493</span><br><span class="line">494</span><br><span class="line">495</span><br><span class="line">496</span><br><span class="line">497</span><br><span class="line">498</span><br><span class="line">499</span><br><span class="line">500</span><br><span class="line">501</span><br><span class="line">502</span><br><span class="line">503</span><br><span class="line">504</span><br><span class="line">505</span><br><span class="line">506</span><br><span class="line">507</span><br><span class="line">508</span><br><span class="line">509</span><br><span class="line">510</span><br><span class="line">511</span><br><span class="line">512</span><br><span class="line">513</span><br><span class="line">514</span><br><span class="line">515</span><br><span class="line">516</span><br><span class="line">517</span><br><span class="line">518</span><br><span class="line">519</span><br><span class="line">520</span><br><span class="line">521</span><br><span class="line">522</span><br><span class="line">523</span><br><span class="line">524</span><br><span class="line">525</span><br><span class="line">526</span><br><span class="line">527</span><br><span class="line">528</span><br><span class="line">529</span><br><span class="line">530</span><br><span class="line">531</span><br><span class="line">532</span><br><span class="line">533</span><br><span class="line">534</span><br><span class="line">535</span><br><span class="line">536</span><br><span class="line">537</span><br><span class="line">538</span><br><span class="line">539</span><br><span class="line">540</span><br><span class="line">541</span><br><span class="line">542</span><br><span class="line">543</span><br><span class="line">544</span><br><span class="line">545</span><br><span class="line">546</span><br><span class="line">547</span><br><span class="line">548</span><br><span class="line">549</span><br><span class="line">550</span><br><span class="line">551</span><br><span class="line">552</span><br><span class="line">553</span><br><span class="line">554</span><br><span class="line">555</span><br><span class="line">556</span><br><span class="line">557</span><br><span class="line">558</span><br><span class="line">559</span><br><span class="line">560</span><br><span class="line">561</span><br><span class="line">562</span><br><span class="line">563</span><br><span class="line">564</span><br><span class="line">565</span><br><span class="line">566</span><br><span class="line">567</span><br><span class="line">568</span><br><span class="line">569</span><br><span class="line">570</span><br><span class="line">571</span><br><span class="line">572</span><br><span class="line">573</span><br><span class="line">574</span><br><span class="line">575</span><br><span class="line">576</span><br><span class="line">577</span><br><span class="line">578</span><br><span class="line">579</span><br><span class="line">580</span><br><span class="line">581</span><br><span class="line">582</span><br><span class="line">583</span><br><span class="line">584</span><br><span class="line">585</span><br><span class="line">586</span><br><span class="line">587</span><br><span class="line">588</span><br><span class="line">589</span><br><span class="line">590</span><br><span class="line">591</span><br><span class="line">592</span><br><span class="line">593</span><br><span class="line">594</span><br><span class="line">595</span><br><span class="line">596</span><br><span class="line">597</span><br><span class="line">598</span><br><span class="line">599</span><br><span class="line">600</span><br><span class="line">601</span><br><span class="line">602</span><br><span class="line">603</span><br><span class="line">604</span><br><span class="line">605</span><br><span class="line">606</span><br><span class="line">607</span><br><span class="line">608</span><br><span class="line">609</span><br><span class="line">610</span><br><span class="line">611</span><br><span class="line">612</span><br><span class="line">613</span><br><span class="line">614</span><br><span class="line">615</span><br><span class="line">616</span><br><span class="line">617</span><br><span class="line">618</span><br><span class="line">619</span><br><span class="line">620</span><br><span class="line">621</span><br><span class="line">622</span><br><span class="line">623</span><br><span class="line">624</span><br><span class="line">625</span><br><span class="line">626</span><br><span class="line">627</span><br><span class="line">628</span><br><span class="line">629</span><br><span class="line">630</span><br><span class="line">631</span><br><span class="line">632</span><br><span class="line">633</span><br><span class="line">634</span><br><span class="line">635</span><br><span class="line">636</span><br><span class="line">637</span><br><span class="line">638</span><br><span class="line">639</span><br><span class="line">640</span><br><span class="line">641</span><br><span class="line">642</span><br><span class="line">643</span><br><span class="line">644</span><br><span class="line">645</span><br><span class="line">646</span><br><span class="line">647</span><br><span class="line">648</span><br><span class="line">649</span><br><span class="line">650</span><br><span class="line">651</span><br><span class="line">652</span><br><span class="line">653</span><br><span class="line">654</span><br><span class="line">655</span><br><span class="line">656</span><br><span class="line">657</span><br><span class="line">658</span><br><span class="line">659</span><br><span class="line">660</span><br><span class="line">661</span><br><span class="line">662</span><br><span class="line">663</span><br><span class="line">664</span><br><span class="line">665</span><br><span class="line">666</span><br><span class="line">667</span><br><span class="line">668</span><br><span class="line">669</span><br><span class="line">670</span><br><span class="line">671</span><br><span class="line">672</span><br><span class="line">673</span><br><span class="line">674</span><br><span class="line">675</span><br><span class="line">676</span><br><span class="line">677</span><br><span class="line">678</span><br><span class="line">679</span><br><span class="line">680</span><br><span class="line">681</span><br><span class="line">682</span><br><span class="line">683</span><br><span class="line">684</span><br><span class="line">685</span><br><span class="line">686</span><br><span class="line">687</span><br><span class="line">688</span><br><span class="line">689</span><br><span class="line">690</span><br><span class="line">691</span><br><span class="line">692</span><br><span class="line">693</span><br><span class="line">694</span><br><span class="line">695</span><br><span class="line">696</span><br><span class="line">697</span><br><span class="line">698</span><br><span class="line">699</span><br><span class="line">700</span><br><span class="line">701</span><br><span class="line">702</span><br><span class="line">703</span><br><span class="line">704</span><br><span class="line">705</span><br><span class="line">706</span><br><span class="line">707</span><br><span class="line">708</span><br><span class="line">709</span><br><span class="line">710</span><br><span class="line">711</span><br><span class="line">712</span><br><span class="line">713</span><br><span class="line">714</span><br><span class="line">715</span><br><span class="line">716</span><br><span class="line">717</span><br><span class="line">718</span><br><span class="line">719</span><br><span class="line">720</span><br><span class="line">721</span><br><span class="line">722</span><br><span class="line">723</span><br><span class="line">724</span><br><span class="line">725</span><br><span class="line">726</span><br><span class="line">727</span><br><span class="line">728</span><br><span class="line">729</span><br><span class="line">730</span><br><span class="line">731</span><br><span class="line">732</span><br><span class="line">733</span><br><span class="line">734</span><br><span class="line">735</span><br><span class="line">736</span><br><span class="line">737</span><br><span class="line">738</span><br><span class="line">739</span><br><span class="line">740</span><br><span class="line">741</span><br><span class="line">742</span><br><span class="line">743</span><br><span class="line">744</span><br><span class="line">745</span><br><span class="line">746</span><br><span class="line">747</span><br><span class="line">748</span><br><span class="line">749</span><br><span class="line">750</span><br><span class="line">751</span><br><span class="line">752</span><br><span class="line">753</span><br><span class="line">754</span><br><span class="line">755</span><br><span class="line">756</span><br><span class="line">757</span><br><span class="line">758</span><br><span class="line">759</span><br><span class="line">760</span><br><span class="line">761</span><br><span class="line">762</span><br><span class="line">763</span><br><span class="line">764</span><br><span class="line">765</span><br><span class="line">766</span><br><span class="line">767</span><br><span class="line">768</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html lang=&quot;zh&quot;&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;</span><br><span class="line">    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,initial-scale=1,user-scalable=no&quot;&gt;</span><br><span class="line">    &lt;link rel=&quot;icon&quot; href=&quot;【你的中间页的logo图标】&quot; type=&quot;image/x-icon&quot;&gt;</span><br><span class="line">    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;</span><br><span class="line">    &lt;meta name=&quot;robots&quot; content=&quot;noindex, nofollow&quot;/&gt;</span><br><span class="line">    &lt;title&gt;😃页面加载中，请稍候...&lt;/title&gt;</span><br><span class="line">    &lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line">        /* 原所有样式代码保持不变，此处省略 */</span><br><span class="line">        * &#123;</span><br><span class="line">            margin: 0;</span><br><span class="line">            padding: 0;</span><br><span class="line">            box-sizing: border-box;</span><br><span class="line">            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;Helvetica Neue&quot;, Arial, sans-serif;</span><br><span class="line">        &#125;</span><br><span class="line">        body &#123;</span><br><span class="line">            overflow: hidden;</span><br><span class="line">            height: 100vh;</span><br><span class="line">            width: 100vw;</span><br><span class="line">            margin: 0;</span><br><span class="line">            padding: 0;</span><br><span class="line">            transition: background 0.5s ease-in-out, color 0.3s ease;</span><br><span class="line">            animation: pageFadeIn 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards;</span><br><span class="line">            opacity: 0;</span><br><span class="line">            background: linear-gradient(135deg, #121212, #181818);</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        .tip-modal, .copy-success-modal &#123;</span><br><span class="line">            position: fixed;</span><br><span class="line">            top: 0;</span><br><span class="line">            left: 0;</span><br><span class="line">            width: 100vw;</span><br><span class="line">            height: 100vh;</span><br><span class="line">            display: flex;</span><br><span class="line">            align-items: center;</span><br><span class="line">            justify-content: center;</span><br><span class="line">            background: rgba(0, 0, 0, 0.6);</span><br><span class="line">            z-index: 1000;</span><br><span class="line">            transition: all 0.6s cubic-bezier(0.4, 0, 0.2, 1);</span><br><span class="line">        &#125;</span><br><span class="line">        .tip-modal.hidden, .copy-success-modal.hidden &#123;</span><br><span class="line">            opacity: 0;</span><br><span class="line">            pointer-events: none;</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-content, .copy-success-content &#123;</span><br><span class="line">            width: 90%;</span><br><span class="line">            max-width: 420px;</span><br><span class="line">            padding: 36px;</span><br><span class="line">            border-radius: 24px;</span><br><span class="line">            backdrop-filter: blur(20px);</span><br><span class="line">            -webkit-backdrop-filter: blur(20px);</span><br><span class="line">            border: 1px solid rgba(40, 40, 40, 0.8);</span><br><span class="line">            box-shadow: 0 0 40px rgba(0, 0, 0, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.1);</span><br><span class="line">            text-align: center;</span><br><span class="line">            transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);</span><br><span class="line">            position: relative;</span><br><span class="line">            background: rgba(26, 26, 26, 0.88);</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        .tip-modal.hidden .modal-content, .copy-success-modal.hidden .copy-success-content &#123;</span><br><span class="line">            transform: translateY(30px) scale(0.95);</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-title, .copy-success-title &#123;</span><br><span class="line">            font-size: 22px;</span><br><span class="line">            font-weight: 700;</span><br><span class="line">            margin-bottom: 16px;</span><br><span class="line">            letter-spacing: 0.8px;</span><br><span class="line">            color: inherit;</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-desc, .copy-success-desc &#123;</span><br><span class="line">            font-size: 15px;</span><br><span class="line">            line-height: 1.7;</span><br><span class="line">            margin-bottom: 28px;</span><br><span class="line">            opacity: 0.95;</span><br><span class="line">            color: inherit;</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-buttons, .copy-success-buttons &#123;</span><br><span class="line">            display: flex;</span><br><span class="line">            gap: 16px;</span><br><span class="line">            justify-content: center;</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-btn, .copy-success-btn &#123;</span><br><span class="line">            padding: 12px 28px;</span><br><span class="line">            border-radius: 14px;</span><br><span class="line">            border: none;</span><br><span class="line">            cursor: pointer;</span><br><span class="line">            font-size: 15px;</span><br><span class="line">            font-weight: 600;</span><br><span class="line">            transition: all 0.3s ease;</span><br><span class="line">            position: relative;</span><br><span class="line">            overflow: hidden;</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-btn.understand, .copy-success-btn.know &#123;</span><br><span class="line">            background-color: #3B82F6;</span><br><span class="line">            color: white;</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-btn.feedback &#123;</span><br><span class="line">            background-color: #242424;</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-btn::after, .copy-success-btn::after &#123;</span><br><span class="line">            content: &#x27;&#x27;;</span><br><span class="line">            position: absolute;</span><br><span class="line">            top: 0;</span><br><span class="line">            left: -100%;</span><br><span class="line">            width: 100%;</span><br><span class="line">            height: 100%;</span><br><span class="line">            background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);</span><br><span class="line">            transition: left 0.6s ease;</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-btn:hover::after, .copy-success-btn:hover::after &#123;</span><br><span class="line">            left: 100%;</span><br><span class="line">        &#125;</span><br><span class="line">        .modal-btn:hover, .copy-success-btn:hover &#123;</span><br><span class="line">            transform: translateY(-2px);</span><br><span class="line">            box-shadow: 0 8px 20px rgba(0,0,0,0.15);</span><br><span class="line">        &#125;</span><br><span class="line">        .theme-switch &#123;</span><br><span class="line">            position: relative;</span><br><span class="line">            width: 52px;</span><br><span class="line">            height: 52px;</span><br><span class="line">            border-radius: 50%;</span><br><span class="line">            border: none;</span><br><span class="line">            cursor: pointer;</span><br><span class="line">            display: flex;</span><br><span class="line">            align-items: center;</span><br><span class="line">            justify-content: center;</span><br><span class="line">            backdrop-filter: blur(15px);</span><br><span class="line">            -webkit-backdrop-filter: blur(15px);</span><br><span class="line">            box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(255,255,255,0.1);</span><br><span class="line">            transition: all 0.3s ease;</span><br><span class="line">            margin-top: 24px;</span><br><span class="line">            z-index: 99;</span><br><span class="line">            background: rgba(26, 26, 26, 0.9);</span><br><span class="line">            color: #3B82F6;</span><br><span class="line">            border-color: rgba(40, 40, 40, 0.5);</span><br><span class="line">        &#125;</span><br><span class="line">        .theme-switch .tooltip &#123;</span><br><span class="line">            position: absolute;</span><br><span class="line">            bottom: calc(100% + 12px);</span><br><span class="line">            left: 50%;</span><br><span class="line">            transform: translateX(-50%);</span><br><span class="line">            padding: 6px 12px;</span><br><span class="line">            background: #fff;</span><br><span class="line">            color: #333;</span><br><span class="line">            font-size: 12px;</span><br><span class="line">            font-weight: 500;</span><br><span class="line">            border-radius: 8px;</span><br><span class="line">            white-space: nowrap;</span><br><span class="line">            box-shadow: 0 4px 12px rgba(0,0,0,0.15);</span><br><span class="line">            opacity: 0;</span><br><span class="line">            pointer-events: none;</span><br><span class="line">            transition: opacity 0.2s ease, transform 0.2s ease;</span><br><span class="line">            transform: translateX(-50%) translateY(5px);</span><br><span class="line">            z-index: 100;</span><br><span class="line">        &#125;</span><br><span class="line">        .theme-switch .tooltip::after &#123;</span><br><span class="line">            content: &#x27;&#x27;;</span><br><span class="line">            position: absolute;</span><br><span class="line">            top: 100%;</span><br><span class="line">            left: 50%;</span><br><span class="line">            transform: translateX(-50%);</span><br><span class="line">            border-width: 4px;</span><br><span class="line">            border-style: solid;</span><br><span class="line">            border-color: #fff transparent transparent transparent;</span><br><span class="line">        &#125;</span><br><span class="line">        .theme-switch:hover .tooltip &#123;</span><br><span class="line">            opacity: 1;</span><br><span class="line">            transform: translateX(-50%) translateY(0);</span><br><span class="line">        &#125;</span><br><span class="line">        .theme-switch svg &#123;</span><br><span class="line">            width: 26px;</span><br><span class="line">            height: 26px;</span><br><span class="line">            fill: currentColor;</span><br><span class="line">            transition: all 0.3s ease;</span><br><span class="line">        &#125;</span><br><span class="line">        .theme-switch:hover &#123;</span><br><span class="line">            transform: scale(1.08);</span><br><span class="line">            box-shadow: 0 6px 20px rgba(59, 130, 246, 0.25);</span><br><span class="line">        &#125;</span><br><span class="line">        .container &#123;</span><br><span class="line">            display: flex;</span><br><span class="line">            align-items: center;</span><br><span class="line">            justify-content: center;</span><br><span class="line">            height: 100%;</span><br><span class="line">            width: 100%;</span><br><span class="line">            margin: 0;</span><br><span class="line">            flex-direction: column;</span><br><span class="line">            padding: 20px;</span><br><span class="line">        &#125;</span><br><span class="line">        .avatar-placeholder, .avatar &#123;</span><br><span class="line">            width: 108px;</span><br><span class="line">            height: 108px;</span><br><span class="line">            border-radius: 50%;</span><br><span class="line">            margin-bottom: 18px;</span><br><span class="line">            display: block;</span><br><span class="line">            transition: all 0.5s ease;</span><br><span class="line">        &#125;</span><br><span class="line">        .avatar &#123;</span><br><span class="line">            display: none;</span><br><span class="line">            box-shadow: 0 0 30px rgba(59, 130, 246, 0.2);</span><br><span class="line">            border: 2px solid rgba(255,255,255,0.2);</span><br><span class="line">        &#125;</span><br><span class="line">        .description &#123;</span><br><span class="line">            font-size: 24px;</span><br><span class="line">            font-weight: 700;</span><br><span class="line">            margin-bottom: 8px;</span><br><span class="line">            letter-spacing: 0.8px;</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        .subtitle &#123;</span><br><span class="line">            font-size: 14px;</span><br><span class="line">            margin-bottom: 28px;</span><br><span class="line">            color: #C4C4C4;</span><br><span class="line">            opacity: 0.8;</span><br><span class="line">            letter-spacing: 0.5px;</span><br><span class="line">        &#125;</span><br><span class="line">        .loading &#123;</span><br><span class="line">            text-align: center;</span><br><span class="line">            padding: 40px;</span><br><span class="line">            border-radius: 28px;</span><br><span class="line">            animation: fadein 0.8s cubic-bezier(0.4, 0, 0.2, 1);</span><br><span class="line">            width: 100%;</span><br><span class="line">            max-width: 500px;</span><br><span class="line">            transition: all 0.4s ease-in-out;</span><br><span class="line">            backdrop-filter: blur(20px);</span><br><span class="line">            -webkit-backdrop-filter: blur(20px);</span><br><span class="line">            border: 1px solid rgba(40, 40, 40, 0.5);</span><br><span class="line">            box-shadow: 0 0 50px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(255,255,255,0.05);</span><br><span class="line">            position: relative;</span><br><span class="line">            overflow: hidden;</span><br><span class="line">            background: rgba(26, 26, 26, 0.75);</span><br><span class="line">        &#125;</span><br><span class="line">        .loading::before &#123;</span><br><span class="line">            content: &#x27;&#x27;;</span><br><span class="line">            position: absolute;</span><br><span class="line">            top: 0;</span><br><span class="line">            left: 0;</span><br><span class="line">            width: 100%;</span><br><span class="line">            height: 100%;</span><br><span class="line">            background: linear-gradient(45deg, rgba(59,130,246,0.03), rgba(14, 165, 233, 0.02));</span><br><span class="line">            pointer-events: none;</span><br><span class="line">        &#125;</span><br><span class="line">        @keyframes fadein &#123;</span><br><span class="line">            from &#123; opacity: 0; transform: translateY(20px); &#125;</span><br><span class="line">            to &#123; opacity: 1; transform: translateY(0); &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        @keyframes pageFadeIn &#123;</span><br><span class="line">            from &#123; opacity: 0; &#125;</span><br><span class="line">            to &#123; opacity: 1; &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        .content &#123;</span><br><span class="line">            margin-bottom: 28px;</span><br><span class="line">            width: 100%;</span><br><span class="line">        &#125;</span><br><span class="line">        .url-text &#123;</span><br><span class="line">            margin-bottom: 14px;</span><br><span class="line">            font-size: 16px;</span><br><span class="line">            letter-spacing: 0.8px;</span><br><span class="line">            text-align: left;</span><br><span class="line">            font-weight: 500;</span><br><span class="line">            color: #C0C0C0;</span><br><span class="line">        &#125;</span><br><span class="line">        .jump-url &#123;</span><br><span class="line">            position: relative;</span><br><span class="line">            font-size: 16px;</span><br><span class="line">            display: block;</span><br><span class="line">            margin-top: 5px;</span><br><span class="line">            margin-bottom: 32px;</span><br><span class="line">            padding: 18px 24px;</span><br><span class="line">            border-radius: 18px;</span><br><span class="line">            height: auto;</span><br><span class="line">            min-height: 56px;</span><br><span class="line">            white-space: nowrap;</span><br><span class="line">            overflow: hidden;</span><br><span class="line">            text-overflow: ellipsis;</span><br><span class="line">            display: flex;</span><br><span class="line">            align-items: center;</span><br><span class="line">            transition: all 0.3s ease;</span><br><span class="line">            border: 1px solid rgba(40, 40, 40, 0.5);</span><br><span class="line">            box-shadow: inset 0 1px 0 rgba(255,255,255,0.05);</span><br><span class="line">            background-color: rgba(26, 26, 26, 0.8);</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        .copy-btn-container &#123;</span><br><span class="line">            position: absolute;</span><br><span class="line">            display: flex;</span><br><span class="line">            align-items: center;</span><br><span class="line">            right: 12px;</span><br><span class="line">            top: 50%;</span><br><span class="line">            transform: translateY(-50%);</span><br><span class="line">            height: 80%;</span><br><span class="line">            width: 76px;</span><br><span class="line">            flex-direction: row-reverse;</span><br><span class="line">            border-radius: 14px;</span><br><span class="line">            background: linear-gradient(to left, rgba(26,26,26,0.8) 70%,transparent 100%);</span><br><span class="line">        &#125;</span><br><span class="line">        .copy-btn &#123;</span><br><span class="line">            width: 46px;</span><br><span class="line">            height: 46px;</span><br><span class="line">            border-radius: 14px;</span><br><span class="line">            border: 1px solid rgba(40, 40, 40, 0.5);</span><br><span class="line">            transition: all 0.3s ease-in-out;</span><br><span class="line">            cursor: pointer;</span><br><span class="line">            display: flex;</span><br><span class="line">            align-items: center;</span><br><span class="line">            justify-content: center;</span><br><span class="line">            backdrop-filter: blur(12px);</span><br><span class="line">            position: relative;</span><br><span class="line">            overflow: hidden;</span><br><span class="line">            background-color: rgba(26, 26, 26, 0.95);</span><br><span class="line">            color: #C0C0C0;</span><br><span class="line">        &#125;</span><br><span class="line">        .copy-btn::after &#123;</span><br><span class="line">            content: &#x27;&#x27;;</span><br><span class="line">            position: absolute;</span><br><span class="line">            top: 0;</span><br><span class="line">            left: -100%;</span><br><span class="line">            width: 100%;</span><br><span class="line">            height: 100%;</span><br><span class="line">            background: linear-gradient(90deg, transparent, rgba(255,255,255,0.15), transparent);</span><br><span class="line">            transition: left 0.5s ease;</span><br><span class="line">        &#125;</span><br><span class="line">        .copy-btn:hover::after &#123;</span><br><span class="line">            left: 100%;</span><br><span class="line">        &#125;</span><br><span class="line">        .copy-btn-container svg &#123;</span><br><span class="line">            width: 24px;</span><br><span class="line">            height: 24px;</span><br><span class="line">            fill: currentColor;</span><br><span class="line">        &#125;</span><br><span class="line">        .copy-btn:hover &#123;</span><br><span class="line">            transform: scale(1.08);</span><br><span class="line">            box-shadow: 0 4px 12px rgba(59, 130, 246, 0.2);</span><br><span class="line">        &#125;</span><br><span class="line">        .countdown-text &#123;</span><br><span class="line">            margin-top: 8px;</span><br><span class="line">            font-size: 14px;</span><br><span class="line">            line-height: 1.6;</span><br><span class="line">            opacity: 0.8;</span><br><span class="line">            letter-spacing: 0.5px;</span><br><span class="line">            color: #C0C0C0;</span><br><span class="line">        &#125;</span><br><span class="line">        .button-container &#123;</span><br><span class="line">            display: flex;</span><br><span class="line">            justify-content: center;</span><br><span class="line">            gap: 20px;</span><br><span class="line">            margin-top: 16px;</span><br><span class="line">            width: 100%;</span><br><span class="line">        &#125;</span><br><span class="line">        .button &#123;</span><br><span class="line">            padding: 0;</span><br><span class="line">            border-radius: 16px;</span><br><span class="line">            border: none;</span><br><span class="line">            cursor: pointer;</span><br><span class="line">            font-size: 16px;</span><br><span class="line">            font-weight: 600;</span><br><span class="line">            width: 100%;</span><br><span class="line">            max-width: 150px;</span><br><span class="line">            height: 50px;</span><br><span class="line">            transition: all 0.3s ease;</span><br><span class="line">            display: flex;</span><br><span class="line">            align-items: center;</span><br><span class="line">            justify-content: center;</span><br><span class="line">            letter-spacing: 0.8px;</span><br><span class="line">            position: relative;</span><br><span class="line">            overflow: hidden;</span><br><span class="line">        &#125;</span><br><span class="line">        .cancel-button &#123;</span><br><span class="line">            background-color: #242424;</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        .confirm-button &#123;</span><br><span class="line">            background-color: #3B82F6;</span><br><span class="line">            color: #FFF;</span><br><span class="line">        &#125;</span><br><span class="line">        .button::after &#123;</span><br><span class="line">            content: &#x27;&#x27;;</span><br><span class="line">            position: absolute;</span><br><span class="line">            top: 0;</span><br><span class="line">            left: -100%;</span><br><span class="line">            width: 100%;</span><br><span class="line">            height: 100%;</span><br><span class="line">            background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);</span><br><span class="line">            transition: left 0.6s ease;</span><br><span class="line">        &#125;</span><br><span class="line">        .button:hover::after &#123;</span><br><span class="line">            left: 100%;</span><br><span class="line">        &#125;</span><br><span class="line">        .button:hover &#123;</span><br><span class="line">            transform: translateY(-3px);</span><br><span class="line">            box-shadow: 0 10px 24px rgba(0, 0, 0, 0.15);</span><br><span class="line">        &#125;</span><br><span class="line">        .button:active &#123;</span><br><span class="line">            transform: translateY(-1px);</span><br><span class="line">            box-shadow: 0 6px 16px rgba(0, 0, 0, 0.15);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light &#123;</span><br><span class="line">            background: linear-gradient(135deg, #F8FAFF, #EFF6FF);</span><br><span class="line">            color: #1E293B;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .loading &#123;</span><br><span class="line">            background: rgba(255,255,255,0.75);</span><br><span class="line">            border-color: rgba(255, 255, 255, 0.2);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .loading:hover &#123;</span><br><span class="line">            box-shadow: 0 0 60px rgba(59,130,246,0.18);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .description &#123;</span><br><span class="line">            color: #1E293B;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .url-text &#123;</span><br><span class="line">            color: #2A3B4C;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .countdown-text &#123;</span><br><span class="line">            color: #64748B;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .jump-url &#123;</span><br><span class="line">            background-color: rgba(255, 255, 255, 0.9);</span><br><span class="line">            color: #1E293B;</span><br><span class="line">            border-color: rgba(255,255,255,0.15);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .copy-btn-container &#123;</span><br><span class="line">            background: linear-gradient(to left, rgba(255,255,255,0.9) 70%,transparent 100%);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .copy-btn &#123;</span><br><span class="line">            background-color: rgba(255, 255, 255, 0.95);</span><br><span class="line">            color: #475569;</span><br><span class="line">            border-color: rgba(164, 164, 164, 0.2);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .cancel-button &#123;</span><br><span class="line">            background-color: #EFF6FF;</span><br><span class="line">            color: #2563EB;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .confirm-button &#123;</span><br><span class="line">            background-color: #2563EB;</span><br><span class="line">            color: white;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .theme-switch &#123;</span><br><span class="line">            background: rgba(255,255,255,0.9);</span><br><span class="line">            color: #2563EB;</span><br><span class="line">            border: 1px solid rgba(37, 99, 235, 0.15);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .modal-content, body.light .copy-success-content &#123;</span><br><span class="line">            background: rgba(255,255,255,0.88);</span><br><span class="line">            color: #1E293B;</span><br><span class="line">            border-color: rgba(255, 255, 255, 0.25);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .modal-btn.understand, body.light .copy-success-btn.know &#123;</span><br><span class="line">            background-color: #2563EB;</span><br><span class="line">            color: white;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .modal-btn.feedback &#123;</span><br><span class="line">            background-color: #EFF6FF;</span><br><span class="line">            color: #2563EB;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark &#123;</span><br><span class="line">            background: linear-gradient(135deg, #121212, #181818);</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .loading &#123;</span><br><span class="line">            background: rgba(26, 26, 26, 0.75);</span><br><span class="line">            border-color: rgba(40, 40, 40, 0.5);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .loading:hover &#123;</span><br><span class="line">            box-shadow: 0 0 60px rgba(0, 0, 0, 0.35);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .description &#123;</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .url-text, body.dark .countdown-text &#123;</span><br><span class="line">            color: #C0C0C0;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .jump-url &#123;</span><br><span class="line">            background-color: rgba(26, 26, 26, 0.8);</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">            border-color: rgba(40, 40, 40, 0.5);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .copy-btn-container &#123;</span><br><span class="line">            background: linear-gradient(to left, rgba(26,26,26,0.8) 70%,transparent 100%);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .copy-btn &#123;</span><br><span class="line">            background-color: rgba(26, 26, 26, 0.95);</span><br><span class="line">            color: #C0C0C0;</span><br><span class="line">            border-color: rgba(40, 40, 40, 0.5);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .cancel-button &#123;</span><br><span class="line">            background-color: #242424;</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .confirm-button &#123;</span><br><span class="line">            background-color: #3B82F6;</span><br><span class="line">            color: #FFF;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .theme-switch &#123;</span><br><span class="line">            background: rgba(26, 26, 26, 0.9);</span><br><span class="line">            color: #3B82F6;</span><br><span class="line">            border-color: rgba(40, 40, 40, 0.5);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .modal-content, body.dark .copy-success-content &#123;</span><br><span class="line">            background: rgba(26, 26, 26, 0.88);</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">            border-color: rgba(40, 40, 40, 0.8);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .modal-btn.understand, body.dark .copy-success-btn.know &#123;</span><br><span class="line">            background-color: #3B82F6;</span><br><span class="line">            color: white;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .modal-btn.feedback &#123;</span><br><span class="line">            background-color: #242424;</span><br><span class="line">            color: #E0E0E0;</span><br><span class="line">        &#125;</span><br><span class="line">        @media (max-width: 480px) &#123;</span><br><span class="line">            .loading &#123;</span><br><span class="line">                padding: 32px 28px;</span><br><span class="line">            &#125;</span><br><span class="line">            .description &#123;</span><br><span class="line">                font-size: 22px;</span><br><span class="line">            &#125;</span><br><span class="line">            .jump-url &#123;</span><br><span class="line">                font-size: 14px;</span><br><span class="line">                padding: 16px 20px;</span><br><span class="line">            &#125;</span><br><span class="line">            .button &#123;</span><br><span class="line">                max-width: 130px;</span><br><span class="line">                height: 46px;</span><br><span class="line">                font-size: 15px;</span><br><span class="line">            &#125;</span><br><span class="line">            .theme-switch &#123;</span><br><span class="line">                width: 48px;</span><br><span class="line">                height: 48px;</span><br><span class="line">                margin-top: 20px;</span><br><span class="line">            &#125;</span><br><span class="line">            .theme-switch svg &#123;</span><br><span class="line">                width: 24px;</span><br><span class="line">                height: 24px;</span><br><span class="line">            &#125;</span><br><span class="line">            .modal-content, .copy-success-content &#123;</span><br><span class="line">                padding: 32px 28px;</span><br><span class="line">            &#125;</span><br><span class="line">            .modal-title, .copy-success-title &#123;</span><br><span class="line">                font-size: 20px;</span><br><span class="line">            &#125;</span><br><span class="line">            .modal-btn, .copy-success-btn &#123;</span><br><span class="line">                padding: 10px 24px;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body class=&quot;dark&quot;&gt;</span><br><span class="line">    &lt;div class=&quot;tip-modal&quot; id=&quot;tipModal&quot;&gt;</span><br><span class="line">        &lt;div class=&quot;modal-content&quot;&gt;</span><br><span class="line">            &lt;div class=&quot;modal-title&quot;&gt;内容审查提示&lt;/div&gt;</span><br><span class="line">            &lt;div class=&quot;modal-desc&quot;&gt;内容审查严格，需自行点击跳转至目标链接。如有非法、违规等问题链接，请点击下方反馈按钮提交处理。&lt;/div&gt;</span><br><span class="line">            &lt;div class=&quot;modal-buttons&quot;&gt;</span><br><span class="line">                &lt;button class=&quot;modal-btn understand&quot; id=&quot;understandBtn&quot;&gt;我知道了&lt;/button&gt;</span><br><span class="line">                &lt;button class=&quot;modal-btn feedback&quot; id=&quot;feedbackBtn&quot; onclick=&quot;window.location.href=&#x27;https://feedback.koxiuqiu.cn&#x27;&quot;&gt;问题反馈&lt;/button&gt;</span><br><span class="line">            &lt;/div&gt;</span><br><span class="line">        &lt;/div&gt;</span><br><span class="line">    &lt;/div&gt;</span><br><span class="line">    &lt;div class=&quot;copy-success-modal hidden&quot; id=&quot;copySuccessModal&quot;&gt;</span><br><span class="line">        &lt;div class=&quot;copy-success-content&quot;&gt;</span><br><span class="line">            &lt;div class=&quot;copy-success-title&quot;&gt;复制成功&lt;/div&gt;</span><br><span class="line">            &lt;div class=&quot;copy-success-desc&quot;&gt;链接已成功复制到剪贴板，可直接粘贴使用&lt;/div&gt;</span><br><span class="line">            &lt;div class=&quot;copy-success-buttons&quot;&gt;</span><br><span class="line">                &lt;button class=&quot;copy-success-btn know&quot; id=&quot;knowBtn&quot;&gt;了解&lt;/button&gt;</span><br><span class="line">            &lt;/div&gt;</span><br><span class="line">        &lt;/div&gt;</span><br><span class="line">    &lt;/div&gt;</span><br><span class="line">    &lt;div class=&quot;container&quot;&gt;</span><br><span class="line">        &lt;div class=&quot;avatar-placeholder&quot;&gt;&lt;/div&gt;</span><br><span class="line">        &lt;img src=&quot;&quot; alt=&quot;头像&quot; class=&quot;avatar&quot;&gt;</span><br><span class="line">        &lt;div class=&quot;description&quot;&gt;朽丘秋雨&lt;/div&gt;</span><br><span class="line">        &lt;div class=&quot;subtitle&quot;&gt;安全提示&lt;/div&gt;</span><br><span class="line">        &lt;div class=&quot;loading&quot;&gt;</span><br><span class="line">            &lt;div class=&quot;content&quot;&gt;</span><br><span class="line">                &lt;div class=&quot;url-text&quot;&gt;您即将离开本站，跳转到：&lt;/div&gt;</span><br><span class="line">                &lt;div class=&quot;jump-url&quot; id=&quot;jump-url&quot;&gt;</span><br><span class="line">                    &lt;span id=&quot;jump-url-text&quot;&gt;&lt;/span&gt;</span><br><span class="line">                    &lt;div class=&quot;copy-btn-container&quot;&gt;</span><br><span class="line">                        &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyToClipboard()&quot;&gt;</span><br><span class="line">                            &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;</span><br><span class="line">                                &lt;path d=&quot;M208 0L332.1 0c12.7 0 24.9 5.1 33.9 14.1l67.9 67.9c9 9 14.1 21.2 14.1 33.9L448 336c0 26.5-21.5 48-48 48l-192 0c-26.5 0-48-21.5-48-48l0-288c0-26.5 21.5-48 48-48zM48 128l80 0 0 64-64 0 0 256 192 0 0-32 64 0 0 48c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 176c0-26.5 21.5-48 48-48z&quot;/&gt;</span><br><span class="line">                            &lt;/svg&gt;</span><br><span class="line">                        &lt;/button&gt;</span><br><span class="line">                    &lt;/div&gt;</span><br><span class="line">                &lt;/div&gt;</span><br><span class="line">            &lt;/div&gt;</span><br><span class="line">            &lt;div class=&quot;countdown-text&quot;&gt;💡请自行确认链接安全性，手动点击跳转&lt;/div&gt;</span><br><span class="line">            &lt;div class=&quot;button-container&quot;&gt;</span><br><span class="line">                &lt;button class=&quot;button cancel-button&quot; onclick=&quot;closeWindow()&quot;&gt;取消跳转&lt;/button&gt;</span><br><span class="line">                &lt;button class=&quot;button confirm-button&quot; onclick=&quot;jump()&quot;&gt;立即跳转&lt;/button&gt;</span><br><span class="line">            &lt;/div&gt;</span><br><span class="line">        &lt;/div&gt;</span><br><span class="line">        &lt;button class=&quot;theme-switch&quot; id=&quot;themeSwitch&quot;&gt;</span><br><span class="line">            &lt;span class=&quot;tooltip&quot;&gt;是否切换主题&lt;/span&gt;</span><br><span class="line">            &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; id=&quot;themeIcon&quot;&gt;</span><br><span class="line">                &lt;path d=&quot;M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32V64 448 480c0 17.7 14.3 32 32 32s32-14.3 32-32V416l64.3-64.3c43.1 25.7 95.8 32.8 141.7 19.4c61.4-18.3 103.9-75.1 103.9-139.1c0-97.2-78.8-176-176-176c-64 0-120.8 42.5-139.1 103.9c-13.4 45.9-6.3 98.6 19.4 141.7L64 416V32z&quot;/&gt;</span><br><span class="line">            &lt;/svg&gt;</span><br><span class="line">        &lt;/button&gt;</span><br><span class="line">    &lt;/div&gt;</span><br><span class="line">    &lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line">        function updateThemeIcon(theme) &#123;</span><br><span class="line">            const icon = document.getElementById(&#x27;themeIcon&#x27;);</span><br><span class="line">            if (theme === &#x27;dark&#x27;) &#123;</span><br><span class="line">                icon.innerHTML = &#x27;&lt;path d=&quot;M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32V64 448 480c0 17.7 14.3 32 32 32s32-14.3 32-32V416l64.3-64.3c43.1 25.7 95.8 32.8 141.7 19.4c61.4-18.3 103.9-75.1 103.9-139.1c0-97.2-78.8-176-176-176c-64 0-120.8 42.5-139.1 103.9c-13.4 45.9-6.3 98.6 19.4 141.7L64 416V32z&quot;/&gt;&#x27;;</span><br><span class="line">            &#125; else &#123;</span><br><span class="line">                icon.innerHTML = &#x27;&lt;path d=&quot;M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9 165.7 509.2c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 1.8c4.5-3.1 10.2-3.7 15.2-1.6zM256 128a128 128 0 1 0 0 256 128 128 0 1 0 0-256z&quot;/&gt;&#x27;;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        function toggleTheme() &#123;</span><br><span class="line">            const body = document.body;</span><br><span class="line">            let newTheme = &#x27;light&#x27;;</span><br><span class="line">            if (body.classList.contains(&#x27;light&#x27;)) &#123;</span><br><span class="line">                newTheme = &#x27;dark&#x27;;</span><br><span class="line">                body.classList.remove(&#x27;light&#x27;);</span><br><span class="line">                body.classList.add(&#x27;dark&#x27;);</span><br><span class="line">            &#125; else &#123;</span><br><span class="line">                newTheme = &#x27;light&#x27;;</span><br><span class="line">                body.classList.remove(&#x27;dark&#x27;);</span><br><span class="line">                body.classList.add(&#x27;light&#x27;);</span><br><span class="line">            &#125;</span><br><span class="line">            localStorage.setItem(&#x27;theme&#x27;, newTheme);</span><br><span class="line">            updateThemeIcon(newTheme);</span><br><span class="line">            window.dispatchEvent(new StorageEvent(&#x27;storage&#x27;, &#123; key: &#x27;theme&#x27;, newValue: newTheme &#125;));</span><br><span class="line">        &#125;</span><br><span class="line">        function GetQueryString(name) &#123;</span><br><span class="line">            var reg = new RegExp(&quot;(^|&amp;)&quot; + name + &quot;=([^&amp;]*)(&amp;|$)&quot;, &quot;i&quot;);</span><br><span class="line">            var r = window.location.search.substr(1).match(reg);</span><br><span class="line">            return r ? decodeURIComponent(r[2]) : null;</span><br><span class="line">        &#125;</span><br><span class="line">        // ======================</span><br><span class="line">        // ✅ 修复解码逻辑，匹配JS加密规则</span><br><span class="line">        // ======================</span><br><span class="line">        function decodeSafeUrlParam(paramStr) &#123;</span><br><span class="line">            try &#123;</span><br><span class="line">                // 1. 还原URL安全字符</span><br><span class="line">                const base64 = paramStr.replace(/-/g, &#x27;+&#x27;).replace(/_/g, &#x27;/&#x27;);</span><br><span class="line">                // 2. 补全Base64等号</span><br><span class="line">                const paddedBase64 = base64.padEnd(base64.length + (4 - base64.length % 4) % 4, &#x27;=&#x27;);</span><br><span class="line">                // 3. Base64解码</span><br><span class="line">                const decoded = atob(paddedBase64);</span><br><span class="line">                // 4. URI解码还原原始URL</span><br><span class="line">                return decodeURIComponent(decoded);</span><br><span class="line">            &#125; catch (e) &#123;</span><br><span class="line">                console.warn(&#x27;URL解码失败，使用原始值:&#x27;, e);</span><br><span class="line">                return paramStr;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        let jump_url = GetQueryString(&#x27;url&#x27;);</span><br><span class="line">        if (jump_url) &#123;</span><br><span class="line">            jump_url = decodeSafeUrlParam(jump_url);</span><br><span class="line">        &#125;</span><br><span class="line">        const UrlReg = new RegExp(&#x27;^((http|https|thunder|qqdl|ed2k|Flashget|qbrowser|ftp|rtsp|mms)://)&#x27;, &#x27;i&#x27;);</span><br><span class="line">        if (!jump_url || !UrlReg.test(jump_url)) &#123;</span><br><span class="line">            document.title = &#x27;参数错误，正在返回首页...&#x27;;</span><br><span class="line">            jump_url = location.origin;</span><br><span class="line">        &#125;</span><br><span class="line">        function jump() &#123;</span><br><span class="line">            location.href = jump_url;</span><br><span class="line">        &#125;</span><br><span class="line">        // ========== 核心修改：重写closeWindow函数 ==========</span><br><span class="line">        function closeWindow() &#123;</span><br><span class="line">            // 检测微信浏览器</span><br><span class="line">            function isWeChat() &#123;</span><br><span class="line">                return /MicroMessenger/i.test(navigator.userAgent);</span><br><span class="line">            &#125;</span><br><span class="line">            // 检测QQ浏览器（排除微信内置QQ浏览器）</span><br><span class="line">            function isQQ() &#123;</span><br><span class="line">                return /QQ/i.test(navigator.userAgent) &amp;&amp; !/MicroMessenger/i.test(navigator.userAgent);</span><br><span class="line">            &#125;</span><br><span class="line">            // 微信环境：调用微信JS桥关闭窗口（微信专属API）</span><br><span class="line">            if (isWeChat()) &#123;</span><br><span class="line">                if (typeof WeixinJSBridge !== &quot;undefined&quot;) &#123;</span><br><span class="line">                    WeixinJSBridge.call(&#x27;closeWindow&#x27;);</span><br><span class="line">                &#125; else &#123;</span><br><span class="line">                    // 微信JS桥未初始化时，监听就绪事件再执行</span><br><span class="line">                    document.addEventListener(&#x27;WeixinJSBridgeReady&#x27;, function () &#123;</span><br><span class="line">                        WeixinJSBridge.call(&#x27;closeWindow&#x27;);</span><br><span class="line">                    &#125;, &#123; once: true &#125;);</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">            // QQ环境：调用QQ浏览器专属API关闭窗口</span><br><span class="line">            else if (isQQ()) &#123;</span><br><span class="line">                try &#123;</span><br><span class="line">                    if (typeof mqq !== &quot;undefined&quot; &amp;&amp; mqq.ui &amp;&amp; mqq.ui.closeWebView) &#123;</span><br><span class="line">                        mqq.ui.closeWebView();</span><br><span class="line">                    &#125; else &#123;</span><br><span class="line">                        fallbackBack();</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125; catch (e) &#123;</span><br><span class="line">                    fallbackBack();</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">            // 普通浏览器：强制关闭当前窗口（独立窗口）/返回上一页（标签页）</span><br><span class="line">            else &#123;</span><br><span class="line">                window.opener = null; // 解除与父窗口关联，避免关闭权限问题</span><br><span class="line">                window.open(&#x27;&#x27;, &#x27;_self&#x27;); // 清空当前窗口地址</span><br><span class="line">                window.close(); // 关闭当前窗口</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        // ========== 优化fallbackBack兜底函数 ==========</span><br><span class="line">        function fallbackBack() &#123;</span><br><span class="line">            if (window.history.length &lt;= 1) &#123;</span><br><span class="line">                window.location.href = location.origin; // 无历史记录则返回首页</span><br><span class="line">            &#125; else &#123;</span><br><span class="line">                window.history.back(); // 有历史记录则返回上一页</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        function showCopySuccess() &#123;</span><br><span class="line">            const copyModal = document.getElementById(&#x27;copySuccessModal&#x27;);</span><br><span class="line">            copyModal.classList.remove(&#x27;hidden&#x27;);</span><br><span class="line">        &#125;</span><br><span class="line">        function closeCopySuccessModal() &#123;</span><br><span class="line">            const copyModal = document.getElementById(&#x27;copySuccessModal&#x27;);</span><br><span class="line">            copyModal.classList.add(&#x27;hidden&#x27;);</span><br><span class="line">        &#125;</span><br><span class="line">        function copyToClipboard() &#123;</span><br><span class="line">            const urlText = document.getElementById(&#x27;jump-url-text&#x27;).textContent;</span><br><span class="line">            navigator.clipboard.writeText(urlText).then(showCopySuccess)</span><br><span class="line">            .catch(() =&gt; &#123;</span><br><span class="line">                const tempInput = document.createElement(&#x27;input&#x27;);</span><br><span class="line">                tempInput.value = urlText;</span><br><span class="line">                document.body.appendChild(tempInput);</span><br><span class="line">                tempInput.select();</span><br><span class="line">                document.execCommand(&#x27;copy&#x27;);</span><br><span class="line">                document.body.removeChild(tempInput);</span><br><span class="line">                showCopySuccess();</span><br><span class="line">            &#125;);</span><br><span class="line">        &#125;</span><br><span class="line">        async function loadAvatar() &#123;</span><br><span class="line">            const avatarImg = document.querySelector(&#x27;.avatar&#x27;);</span><br><span class="line">            const placeholder = document.querySelector(&#x27;.avatar-placeholder&#x27;);</span><br><span class="line">            const img = new Image();</span><br><span class="line">            img.src = &#x27;【你的中间页的logo图标】&#x27;;</span><br><span class="line">            img.onload = function () &#123;</span><br><span class="line">                avatarImg.src = img.src;</span><br><span class="line">                avatarImg.style.display = &#x27;block&#x27;;</span><br><span class="line">                placeholder.style.display = &#x27;none&#x27;;</span><br><span class="line">            &#125;</span><br><span class="line">            img.onerror = function() &#123;</span><br><span class="line">                placeholder.style.display = &#x27;none&#x27;;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        function closeTipModal() &#123;</span><br><span class="line">            const modal = document.getElementById(&#x27;tipModal&#x27;);</span><br><span class="line">            modal.classList.add(&#x27;hidden&#x27;);</span><br><span class="line">        &#125;</span><br><span class="line">        function handleFeedback() &#123;</span><br><span class="line">            window.open(location.origin + &#x27;/feedback&#x27;, &#x27;_blank&#x27;);</span><br><span class="line">            closeTipModal();</span><br><span class="line">        &#125;</span><br><span class="line">        window.addEventListener(&#x27;load&#x27;, function () &#123;</span><br><span class="line">            loadAvatar();</span><br><span class="line">            const jumpUrlElement = document.getElementById(&#x27;jump-url-text&#x27;);</span><br><span class="line">            jumpUrlElement.textContent = jump_url;</span><br><span class="line">            const countdownText = document.querySelector(&#x27;.countdown-text&#x27;);</span><br><span class="line">            countdownText.textContent = &quot;💡请自行确认链接安全性，手动点击跳转&quot;;</span><br><span class="line">            document.getElementById(&#x27;themeSwitch&#x27;).addEventListener(&#x27;click&#x27;, toggleTheme);</span><br><span class="line">            document.getElementById(&#x27;understandBtn&#x27;).addEventListener(&#x27;click&#x27;, closeTipModal);</span><br><span class="line">            document.getElementById(&#x27;feedbackBtn&#x27;).addEventListener(&#x27;click&#x27;, handleFeedback);</span><br><span class="line">            document.getElementById(&#x27;knowBtn&#x27;).addEventListener(&#x27;click&#x27;, closeCopySuccessModal);</span><br><span class="line">        &#125;);</span><br><span class="line">    &lt;/script&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure></section>


<section class="stellar-folders"><div class="stellar-folders__label">2026/4/17更新：修复Artalk内容无中间页,URL未使用安全加密(JS文件代码)</div>

<p>更新内容概括：</p>
<ul>
<li>修复留言后，评论区的预览底下是“图片窗预览”而不是表情包名</li>
</ul>
<p>BUG反馈者：</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260417230828179.png" alt="" loading="lazy" decoding="async"></figure>

<p>直接改 这一行代码 就行，其他都不动，找到ak.js文件，把这行：</p>
<p><code>popupAlt.textContent = img.alt || &#39;图片窗预览&#39;;</code></p>
<p>替换成 这一行：</p>
<p><code>popupAlt.textContent = img.getAttribute(&#39;atk-emoticon&#39;) || img.alt || &#39;图片预览&#39;;</code></p>
<p>应该就没毛病了。其实原理很简单，也就是选择器多加一个artalk表情包的，’img.alt’之前是因为我用的twikoo，如果你之前没用这个或者是只用ak，也可以去掉应该是问题不大，或者如果你不想全部图片都放大，也可以去ak.js的第12行代码去除’img.alt’，改为’atk-emoticon’就没问题了。</p>
</section>
]]></content>
  </entry>
  <entry>
    <title>最近的改动和生活</title>
    <link href="https://koxiuqiu.cn/posts/31p263261/" rel="alternate" type="text/html" />
    <link href="https://cn-nb1.rains3.com/kxqimage/img/20260418020011189.webp" rel="enclosure" type="image/webp" />
    <id>https://koxiuqiu.cn/posts/31p263261/</id>
    <published>2026-03-26T15:38:00.000Z</published>
    <updated>2026-03-28T01:35:00.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="生活日志" scheme="https://koxiuqiu.cn/categories/%E7%94%9F%E6%B4%BB%E6%97%A5%E5%BF%97/" label="分类" />
    <category term="数码" scheme="https://koxiuqiu.cn/tags/%E6%95%B0%E7%A0%81/" label="标签" />
    <category term="博客优化" scheme="https://koxiuqiu.cn/tags/%E5%8D%9A%E5%AE%A2%E4%BC%98%E5%8C%96/" label="标签" />
    <category term="程序更替" scheme="https://koxiuqiu.cn/tags/%E7%A8%8B%E5%BA%8F%E6%9B%B4%E6%9B%BF/" label="标签" />
    <summary type="text">别来无恙；来首歌听听？ 网易云音乐 打开歌曲 博客修改 其实改动算是很少的，相对于上一次发表，也就是去年十二月，不过一个季度有超3小时修改装修一般都会发表记录，然则不发表凑紧。 不过这个月更新相对来说比较懒，实际上最新两篇也只是一则通知和一个凑合跟风头的小活动给大家，要说上更新还真算不上！ （小巧思，有人发现我把上篇文笔封面重新设计了么） 小优化的 因为和博友交流的时候，突然发觉自己发的东西普遍分辨率都存在低的问题，又或者是锐化严重啊乱七八糟的。所以后边的更新也会注重一下这方面，会特意用设备修一下的；录屏的话可能是我设置忘记了，图片的话那就是可能我没注意...</summary>
    <content type="html"><![CDATA[<p>别来无恙；来首歌听听？</p>
<figure class="stellar-music stellar-music--netease" data-music-service="netease"><div class="stellar-music__player"></div><figcaption class="stellar-music__meta"><span>网易云音乐</span><a href="https://music.163.com/#/song?id=3334666441" target="_blank" rel="noopener noreferrer">打开歌曲</a></figcaption></figure>

<hr>
<h1 id="博客修改"><a href="#博客修改" class="headerlink" title="博客修改"></a>博客修改</h1><p>其实改动算是很少的，相对于上一次发表，也就是去年十二月，不过一个季度有超3小时修改装修一般都会发表记录，然则不发表凑紧。</p>
<p>不过这个月更新相对来说比较懒，实际上最新两篇也只是一则通知和一个凑合跟风头的小活动给大家，要说上更新还真算不上！<span class="stellar-blur">（小巧思，有人发现我把上篇文笔封面重新设计了么）</span></p>
<h2 id="小优化的"><a href="#小优化的" class="headerlink" title="小优化的"></a>小优化的</h2><p>因为和博友交流的时候，突然发觉自己发的东西普遍分辨率都存在低的问题，又或者是锐化严重啊乱七八糟的。所以后边的更新也会注重一下这方面，会特意用设备修一下的；录屏的话可能是我设置忘记了，图片的话那就是可能我没注意了，我平时喜欢超低分辨率来办公和进行娱乐活动，分辨不出了属于是！</p>
<blockquote>
<p>有些绷不住，我有智能压缩不知道了，总之修复后原图一般都是6-10MB往上的大小，好在不缺加载速度。<img src="https://cn-nb1.rains3.com/kxqimage/img/20260326223307187.png"></p>
</blockquote>
<p>对了，因为小柯对自己的小破站还是挺严格的，希望以后大家不要使用任何<code>真实信息</code>交流，亦或者<code>地名</code>噢，谢谢~即便不小心我也会改掉的其实，之前的文我对于些地名都比较谨慎，都是某某市，某省，敏感、敏感哈哈，虽然没必要，但是<strong>每一个离谱的规定都有一个更离谱的事例</strong>。。</p>
<h2 id="日志系统"><a href="#日志系统" class="headerlink" title="日志系统"></a>日志系统</h2><p>很不错，我摒弃了曾经使用的系统，改为了<a href="https://www.ech0.app/zh/">Ech0</a>，也并不是说曾经使用的系统不好，只是API的变化和我的习惯让我难以接受罢了。Ech0目前用起来对我而言也是十分顺手，优美的UI，智能的设定，良好的兼容…</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260326220342139.png" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260326224526499.png" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260326224613045.png" alt="" loading="lazy" decoding="async"></figure>

<p>如果你也想快捷使用？！容器一键合成~</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><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">docker run -d \</span><br><span class="line">  --name ech0 \</span><br><span class="line">  -p 6277:6277 \</span><br><span class="line">  -v /opt/ech0/data:/app/data \</span><br><span class="line">  -v /opt/ech0/backup:/app/backup \</span><br><span class="line">  -e JWT_SECRET=&quot;Hello Echos&quot; \</span><br><span class="line">  sn0wl1n/ech0:latest</span><br></pre></td></tr></table></figure>

<h2 id="优化页面"><a href="#优化页面" class="headerlink" title="优化页面"></a>优化页面</h2><p>首先首页，在醒目的地方直接标注说明了按钮；</p>
<blockquote>
<p>应该没有人不知道按钮该干什么了吧..</p>
</blockquote>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260326224754687.png" alt="" loading="lazy" decoding="async"></figure>

<p>其次是说说碎碎念的页面，这里是使用<a href="https://blog.liushen.fun/posts/e0b4d5a/">从Moments迁移到Ech0 | LiuShen’s Blog</a>的魔改方案的，具体可以去观摩一下柳哥，我用的是<a href="https://www.xscnet.cn/">-Mete0r’s Blog | 壹人小站-</a>二改后的代码，然后我自己简单的修改和新增了一些内容，折叠代码如下（记得修改其中的【】符号内容噢）~</p>
<section class="stellar-folders"><div class="stellar-folders__label">shuoshuo.js</div>

<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><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><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br><span class="line">473</span><br><span class="line">474</span><br><span class="line">475</span><br><span class="line">476</span><br><span class="line">477</span><br><span class="line">478</span><br><span class="line">479</span><br><span class="line">480</span><br><span class="line">481</span><br><span class="line">482</span><br><span class="line">483</span><br><span class="line">484</span><br><span class="line">485</span><br><span class="line">486</span><br><span class="line">487</span><br><span class="line">488</span><br><span class="line">489</span><br><span class="line">490</span><br><span class="line">491</span><br><span class="line">492</span><br><span class="line">493</span><br><span class="line">494</span><br><span class="line">495</span><br><span class="line">496</span><br><span class="line">497</span><br><span class="line">498</span><br><span class="line">499</span><br><span class="line">500</span><br><span class="line">501</span><br><span class="line">502</span><br><span class="line">503</span><br><span class="line">504</span><br><span class="line">505</span><br><span class="line">506</span><br><span class="line">507</span><br><span class="line">508</span><br><span class="line">509</span><br><span class="line">510</span><br><span class="line">511</span><br><span class="line">512</span><br><span class="line">513</span><br><span class="line">514</span><br><span class="line">515</span><br><span class="line">516</span><br><span class="line">517</span><br><span class="line">518</span><br><span class="line">519</span><br><span class="line">520</span><br><span class="line">521</span><br><span class="line">522</span><br><span class="line">523</span><br><span class="line">524</span><br><span class="line">525</span><br><span class="line">526</span><br><span class="line">527</span><br><span class="line">528</span><br><span class="line">529</span><br><span class="line">530</span><br><span class="line">531</span><br><span class="line">532</span><br><span class="line">533</span><br><span class="line">534</span><br><span class="line">535</span><br><span class="line">536</span><br><span class="line">537</span><br><span class="line">538</span><br><span class="line">539</span><br><span class="line">540</span><br><span class="line">541</span><br><span class="line">542</span><br><span class="line">543</span><br><span class="line">544</span><br><span class="line">545</span><br><span class="line">546</span><br><span class="line">547</span><br><span class="line">548</span><br><span class="line">549</span><br><span class="line">550</span><br><span class="line">551</span><br><span class="line">552</span><br><span class="line">553</span><br><span class="line">554</span><br><span class="line">555</span><br><span class="line">556</span><br><span class="line">557</span><br><span class="line">558</span><br><span class="line">559</span><br><span class="line">560</span><br><span class="line">561</span><br><span class="line">562</span><br><span class="line">563</span><br><span class="line">564</span><br><span class="line">565</span><br><span class="line">566</span><br><span class="line">567</span><br><span class="line">568</span><br><span class="line">569</span><br><span class="line">570</span><br><span class="line">571</span><br><span class="line">572</span><br><span class="line">573</span><br><span class="line">574</span><br><span class="line">575</span><br><span class="line">576</span><br><span class="line">577</span><br><span class="line">578</span><br><span class="line">579</span><br><span class="line">580</span><br><span class="line">581</span><br><span class="line">582</span><br><span class="line">583</span><br><span class="line">584</span><br><span class="line">585</span><br><span class="line">586</span><br><span class="line">587</span><br><span class="line">588</span><br><span class="line">589</span><br><span class="line">590</span><br><span class="line">591</span><br><span class="line">592</span><br><span class="line">593</span><br><span class="line">594</span><br><span class="line">595</span><br><span class="line">596</span><br><span class="line">597</span><br><span class="line">598</span><br><span class="line">599</span><br><span class="line">600</span><br><span class="line">601</span><br><span class="line">602</span><br><span class="line">603</span><br><span class="line">604</span><br><span class="line">605</span><br><span class="line">606</span><br><span class="line">607</span><br><span class="line">608</span><br><span class="line">609</span><br><span class="line">610</span><br><span class="line">611</span><br><span class="line">612</span><br><span class="line">613</span><br><span class="line">614</span><br><span class="line">615</span><br><span class="line">616</span><br><span class="line">617</span><br><span class="line">618</span><br><span class="line">619</span><br><span class="line">620</span><br><span class="line">621</span><br><span class="line">622</span><br><span class="line">623</span><br><span class="line">624</span><br><span class="line">625</span><br><span class="line">626</span><br><span class="line">627</span><br><span class="line">628</span><br><span class="line">629</span><br><span class="line">630</span><br><span class="line">631</span><br><span class="line">632</span><br><span class="line">633</span><br><span class="line">634</span><br><span class="line">635</span><br><span class="line">636</span><br><span class="line">637</span><br><span class="line">638</span><br><span class="line">639</span><br><span class="line">640</span><br><span class="line">641</span><br><span class="line">642</span><br><span class="line">643</span><br><span class="line">644</span><br><span class="line">645</span><br><span class="line">646</span><br><span class="line">647</span><br><span class="line">648</span><br><span class="line">649</span><br><span class="line">650</span><br><span class="line">651</span><br><span class="line">652</span><br><span class="line">653</span><br><span class="line">654</span><br><span class="line">655</span><br><span class="line">656</span><br><span class="line">657</span><br><span class="line">658</span><br><span class="line">659</span><br><span class="line">660</span><br><span class="line">661</span><br><span class="line">662</span><br><span class="line">663</span><br><span class="line">664</span><br></pre></td><td class="code"><pre><span class="line">/* 引入Markdown解析库 - 新增代码开始 */</span><br><span class="line">!function()&#123;</span><br><span class="line">    // 动态加载marked库（选用的大厂的CDN）</span><br><span class="line">    if (!window.marked) &#123;</span><br><span class="line">        const script = document.createElement(&#x27;script&#x27;);</span><br><span class="line">        script.src = &#x27;https://cdn.jsdmirror.com/npm/marked@12.0.2/marked.min.js&#x27;;</span><br><span class="line">        script.async = true;</span><br><span class="line">        document.head.appendChild(script);</span><br><span class="line">        </span><br><span class="line">        // 可选：添加代码高亮支持（如果需要解析代码块）</span><br><span class="line">        const highlightScript = document.createElement(&#x27;script&#x27;);</span><br><span class="line">        highlightScript.src = &#x27;https://cdn.jsdmirror.com/npm/highlight.js@11.9.0/lib/highlight.min.js&#x27;;</span><br><span class="line">        highlightScript.async = true;</span><br><span class="line">        document.head.appendChild(highlightScript);</span><br><span class="line">        </span><br><span class="line">        const highlightCss = document.createElement(&#x27;link&#x27;);</span><br><span class="line">        highlightCss.rel = &#x27;stylesheet&#x27;;</span><br><span class="line">        highlightCss.href = &#x27;https://cdn.jsdmirror.com/npm/highlight.js@11.9.0/styles/github.min.css&#x27;;</span><br><span class="line">        document.head.appendChild(highlightCss);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;();</span><br><span class="line">/* 引入Markdown解析库 - 新增代码结束 */</span><br><span class="line"></span><br><span class="line">/* LiuShen Echo System - XSCNET Adapted Version */</span><br><span class="line">/* 原作者Liushen : https://blog.liushen.fun/posts/e0b4d5a/ */</span><br><span class="line">// 定义一个自执行的匿名函数，创建独立作用域</span><br><span class="line">!function () &#123;</span><br><span class="line">    // 初始化全局状态对象，用于管理定时器和事件监听器</span><br><span class="line">    const n = window.__mete0rShuoshuoState || (window.__mete0rShuoshuoState = &#123;</span><br><span class="line">        resizeHandler: null,      // 窗口大小改变事件处理器</span><br><span class="line">        afterRenderTimer: null,   // 渲染后延迟执行的定时器</span><br><span class="line">        listenersBound: !1        // 是否已绑定事件监听器标记</span><br><span class="line">    &#125;);</span><br><span class="line"></span><br><span class="line">    // --- 核心配置区 ---</span><br><span class="line">    const xscConfig = &#123;</span><br><span class="line">        apiUrl: &#x27;【】&#x27;, // API地址，获取说说数据的接口</span><br><span class="line">        avatar: &#x27;【】&#x27;, // 默认头像URL</span><br><span class="line">        nickname: &#x27;【】&#x27; // 默认昵称</span><br><span class="line">    &#125;;</span><br><span class="line"></span><br><span class="line">    // 清理函数：清除定时器和移除窗口大小改变事件监听器</span><br><span class="line">    function a() &#123;</span><br><span class="line">        n.afterRenderTimer &amp;&amp; (window.clearTimeout(n.afterRenderTimer), n.afterRenderTimer = null),</span><br><span class="line">            n.resizeHandler &amp;&amp; (window.removeEventListener(&quot;resize&quot;, n.resizeHandler), n.resizeHandler = null)</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    // 主要功能函数：初始化和渲染说说列表</span><br><span class="line">    function r() &#123;</span><br><span class="line">        a(); // 清理之前的定时器和事件监听器</span><br><span class="line">        const r = document.querySelector(&quot;#talk&quot;); // 获取说说容器元素</span><br><span class="line">        if (!r) return; // 如果找不到容器则直接返回</span><br><span class="line">        r.innerHTML = &quot;&quot;; // 清空容器内容</span><br><span class="line"></span><br><span class="line">        // 瀑布流布局函数：实现图片/卡片的瀑布流排列</span><br><span class="line">        const o = e =&gt; &#123;</span><br><span class="line">            // 获取元素指定方向的外边距值</span><br><span class="line">            function t(e, t) &#123;</span><br><span class="line">                const n = window.getComputedStyle(t);</span><br><span class="line">                return parseFloat(n[`margin$&#123;e&#125;`]) || 0</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            // 将数值转换为带像素单位的字符串</span><br><span class="line">            function r(e) &#123; return `$&#123;e&#125;px` &#125;</span><br><span class="line"></span><br><span class="line">            // 获取元素的左边距位置</span><br><span class="line">            function i(e) &#123; return parseFloat(e.style.left) &#125;</span><br><span class="line"></span><br><span class="line">            // 获取元素的宽度</span><br><span class="line">            function l(e) &#123; return e.clientWidth &#125;</span><br><span class="line"></span><br><span class="line">            // 计算元素底部位置（顶部位置+高度+下边距）</span><br><span class="line">            function s(e) &#123;</span><br><span class="line">                return function (e) &#123; return parseFloat(e.style.top) &#125;(e) +</span><br><span class="line">                    function (e) &#123; return e.clientHeight &#125;(e) +</span><br><span class="line">                    t(&quot;Bottom&quot;, e)</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            // 计算元素右边位置（左边位置+宽度+右边距）</span><br><span class="line">            function c(e) &#123; return i(e) + l(e) + t(&quot;Right&quot;, e) &#125;</span><br><span class="line"></span><br><span class="line">            // 对元素数组按从下到上的顺序进行排序</span><br><span class="line">            function d(e) &#123;</span><br><span class="line">                e.sort(((e, t) =&gt; s(e) === s(t) ? i(t) - i(e) : s(t) - s(e)))</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            // 如果传入的是字符串选择器，则获取对应DOM元素</span><br><span class="line">            if (&quot;string&quot; == typeof e &amp;&amp; (e = document.querySelector(e)), !e) return;</span><br><span class="line"></span><br><span class="line">            // 设置子元素绝对定位，并收集到数组中</span><br><span class="line">            const u = Array.from(e.children).map((e =&gt; (e.style.position = &quot;absolute&quot;, e)));</span><br><span class="line">            e.style.position = &quot;relative&quot;; // 设置父容器相对定位</span><br><span class="line"></span><br><span class="line">            const p = []; // 存储当前每列底部位置的元素</span><br><span class="line"></span><br><span class="line">            // 处理第一行元素：设置第一个元素的位置</span><br><span class="line">            u.length &amp;&amp; (u[0].style.top = &quot;0px&quot;, u[0].style.left = r(t(&quot;Left&quot;, u[0])), p.push(u[0]));</span><br><span class="line">            let m = 1; // 从第二个元素开始循环</span><br><span class="line"></span><br><span class="line">            // 将能放在第一行的元素水平排列</span><br><span class="line">            for (; m &lt; u.length; m += 1) &#123;</span><br><span class="line">                const n = u[m - 1], a = u[m]; // 当前元素和前一个元素</span><br><span class="line">                if (!(c(n) + l(a) &lt;= l(e))) break; // 如果超出容器宽度则跳出循环</span><br><span class="line">                a.style.top = n.style.top, a.style.left = r(c(n) + t(&quot;Left&quot;, a)), p.push(a) // 设置元素位置</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            // 处理剩余元素：依次放置到最短列的下方</span><br><span class="line">            for (; m &lt; u.length; m += 1) &#123;</span><br><span class="line">                d(p); // 排序找到最短列</span><br><span class="line">                const e = u[m], n = p.pop(); // 取出当前最短列的底部元素</span><br><span class="line">                e.style.top = r(s(n) + t(&quot;Top&quot;, e)), e.style.left = r(i(n)), p.push(e) // 放置元素</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            d(p); // 最终排序</span><br><span class="line">            const h = p[0]; // 找到最高列的底部元素</span><br><span class="line">            e.style.height = h ? r(s(h) + t(&quot;Bottom&quot;, h)) : &quot;0px&quot;; // 设置容器高度</span><br><span class="line"></span><br><span class="line">            const f = l(e); // 记录初始容器宽度</span><br><span class="line">            // 设置窗口大小改变时的处理函数</span><br><span class="line">            n.resizeHandler = () =&gt; &#123;</span><br><span class="line">                const e = document.querySelector(&quot;#talk&quot;);</span><br><span class="line">                e &amp;&amp; document.body.contains(e) ? l(e) !== f &amp;&amp; o(e) : a() // 如果容器存在且尺寸改变，则重新计算布局</span><br><span class="line">            &#125;,</span><br><span class="line">                window.addEventListener(&quot;resize&quot;, n.resizeHandler) // 添加窗口大小改变事件监听器</span><br><span class="line">        &#125;,</span><br><span class="line"></span><br><span class="line">            // 提取扩展信息函数：从数据对象中提取extension字段</span><br><span class="line">            i = e =&gt; &#123;</span><br><span class="line">                const t = e?.extension;</span><br><span class="line">                return t &amp;&amp; &quot;object&quot; == typeof t ? t : null</span><br><span class="line">            &#125;,</span><br><span class="line"></span><br><span class="line">            // 获取标签数组函数：从数据对象中提取标签，如果没有则默认返回&quot;碎碎念&quot;</span><br><span class="line">            l = e =&gt; Array.isArray(e?.tags) &amp;&amp; e.tags.length ?</span><br><span class="line">                e.tags.map((e =&gt; e?.name || e)).filter(Boolean) :</span><br><span class="line">                [&quot;💬 碎碎念&quot;],</span><br><span class="line"></span><br><span class="line">            // 格式化日期函数：将日期字符串格式化为年月日时分格式</span><br><span class="line">            s = e =&gt; &#123;</span><br><span class="line">                const t = new Date(e); // 创建日期对象</span><br><span class="line">                if (isNaN(t.getTime())) return &quot;刚刚&quot;; // 如果日期无效则返回&quot;刚刚&quot;</span><br><span class="line">                const n = e =&gt; String(e).padStart(2, &quot;0&quot;); // 补零函数</span><br><span class="line">                // 返回格式化的日期时间字符串</span><br><span class="line">                return `$&#123;t.getFullYear()&#125;-$&#123;n(t.getMonth() + 1)&#125;-$&#123;n(t.getDate())&#125; $&#123;n(t.getHours())&#125;:$&#123;n(t.getMinutes())&#125;`</span><br><span class="line">            &#125;,</span><br><span class="line"></span><br><span class="line">            // 生成外部链接HTML函数：根据类型生成网站或GitHub项目链接</span><br><span class="line">            c = (e, t) =&gt; &#123;</span><br><span class="line">                if (!t) return &quot;&quot;; // 如果没有数据则返回空字符串</span><br><span class="line">                let n = &quot;&quot;, a = &quot;&quot;, r = &quot;【404图】&quot;;</span><br><span class="line"></span><br><span class="line">                // 处理网站链接</span><br><span class="line">                if (&quot;WEBSITE&quot; === e) &#123;</span><br><span class="line">                    n = t.site || t.url || &quot;&quot;, a = t.title || n</span><br><span class="line">                &#125;</span><br><span class="line"></span><br><span class="line">                // 处理GitHub项目链接</span><br><span class="line">                if (&quot;GITHUBPROJ&quot; === e) &#123;</span><br><span class="line">                    n = t.repoUrl || t.url || &quot;&quot;,</span><br><span class="line">                        a = t.title || (e =&gt; &#123;</span><br><span class="line">                            if (!e) return &quot;&quot;;</span><br><span class="line">                            // 提取GitHub仓库名称</span><br><span class="line">                            const t = e.match(/^https?:\/\/github\.com\/[^/]+\/([^/?#]+)/i);</span><br><span class="line">                            if (t) return t[1];</span><br><span class="line">                            return e</span><br><span class="line">                        &#125;)(n);</span><br><span class="line">                    r = &quot;【】&quot; // GitHub图标</span><br><span class="line">                &#125;</span><br><span class="line"></span><br><span class="line">                // 返回格式化的外部链接HTML结构</span><br><span class="line">                return n ? `\n&lt;div class=&quot;shuoshuo-external-link&quot;&gt;&lt;a class=&quot;external-link&quot; href=&quot;$&#123;n&#125;&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;&lt;div class=&quot;external-link-left&quot; style=&quot;background-image:url($&#123;r&#125;)&quot;&gt;&lt;/div&gt;&lt;div class=&quot;external-link-right&quot;&gt;&lt;div class=&quot;external-link-title&quot;&gt;$&#123;a&#125;&lt;/div&gt;&lt;div&gt;点击跳转&lt;i class=&quot;fa-solid fa-angle-right&quot;&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;` : &quot;&quot;</span><br><span class="line">            &#125;,</span><br><span class="line"></span><br><span class="line">            // 生成B站视频嵌入函数：根据BVID生成B站视频iframe</span><br><span class="line">            d = e =&gt; &#123;</span><br><span class="line">                const t = e?.videoId || e?.url || &quot;&quot;; if (!t) return &quot;&quot;; // 获取视频ID或URL</span><br><span class="line">                let n = &quot;&quot;;</span><br><span class="line">                if (/^BV[0-9A-Za-z]+$/i.test(t)) // 验证是否为有效的BVID</span><br><span class="line">                    n = `https://www.bilibili.com/blackboard/html5mobileplayer.html?bvid=$&#123;t&#125;&amp;as_wide=1&amp;high_quality=1&amp;danmaku=0`;</span><br><span class="line">                // 返回视频iframe HTML</span><br><span class="line">                return n ? `&lt;div style=&quot;position: relative; padding: 30% 45%; margin-top: 10px;&quot;&gt;&lt;iframe style=&quot;position:absolute;width:100%;height:100%;left:0;top:0;border-radius:12px;&quot; src=&quot;$&#123;n&#125;&quot; frameborder=&quot;0&quot; allowfullscreen loading=&quot;lazy&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;` : &quot;&quot;</span><br><span class="line">            &#125;,</span><br><span class="line"></span><br><span class="line">            // 生成轮播图HTML函数：将图片数组转换为轮播图结构（已升级支持LivePhoto）</span><br><span class="line">            carouselHtml = (images, liveVideos = []) =&gt; &#123;</span><br><span class="line">                if (!images || images.length === 0) return &#x27;&#x27;;</span><br><span class="line"></span><br><span class="line">                // 内部函数：生成单个幻灯片的HTML，包含Live视频和图标</span><br><span class="line">                const generateSlideHtml = (img, index, isActive) =&gt; &#123;</span><br><span class="line">                    const videoUrl = liveVideos[index];</span><br><span class="line">                    const hasLive = !!videoUrl;</span><br><span class="line">                    return `&lt;div class=&quot;carousel-slide$&#123;isActive ? &#x27; active&#x27; : &#x27;&#x27;&#125;$&#123;hasLive ? &#x27; has-live&#x27; : &#x27;&#x27;&#125;&quot;&gt;</span><br><span class="line">                        &lt;a href=&quot;$&#123;img&#125;&quot; class=&quot;carousel-image-link no-direct-link&quot; data-fancybox=&quot;gallery&quot; data-src=&quot;$&#123;img&#125;&quot;&gt;</span><br><span class="line">                            &lt;img src=&quot;$&#123;img&#125;&quot; loading=&quot;lazy&quot; alt=&quot;图片&quot;&gt;</span><br><span class="line">                            $&#123;hasLive ? `</span><br><span class="line">                                &lt;div class=&quot;live-badge&quot;&gt;</span><br><span class="line">                                    &lt;svg class=&quot;live-icon&quot; viewBox=&quot;0 0 512 512&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;path d=&quot;M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-352a96 96 0 1 1 0 192 96 96 0 1 1 0-192z&quot; fill=&quot;currentColor&quot;/&gt;&lt;/svg&gt;</span><br><span class="line">                                    &lt;span&gt;LIVE&lt;/span&gt;</span><br><span class="line">                                &lt;/div&gt;</span><br><span class="line">                                &lt;video class=&quot;live-video&quot; src=&quot;$&#123;videoUrl&#125;&quot; loop muted playsinline preload=&quot;metadata&quot;&gt;&lt;/video&gt;</span><br><span class="line">                            ` : &#x27;&#x27;&#125;</span><br><span class="line">                        &lt;/a&gt;</span><br><span class="line">                    &lt;/div&gt;`;</span><br><span class="line">                &#125;;</span><br><span class="line"></span><br><span class="line">                if (images.length === 1) &#123;</span><br><span class="line">                    // 只有一张图片时</span><br><span class="line">                    return `&lt;div class=&quot;image-carousel&quot;&gt;</span><br><span class="line">                        &lt;div class=&quot;carousel-container single-image&quot;&gt;</span><br><span class="line">                            $&#123;generateSlideHtml(images[0], 0, true)&#125;</span><br><span class="line">                        &lt;/div&gt;</span><br><span class="line">                    &lt;/div&gt;`;</span><br><span class="line">                &#125; else &#123;</span><br><span class="line">                    // 多张图片时，显示轮播图</span><br><span class="line">                    let slides = images.map((img, index) =&gt; generateSlideHtml(img, index, index === 0)).join(&#x27;&#x27;);</span><br><span class="line"></span><br><span class="line">                    return `&lt;div class=&quot;image-carousel&quot;&gt;</span><br><span class="line">                        &lt;div class=&quot;carousel-container multi-images&quot;&gt;</span><br><span class="line">                            $&#123;slides&#125;</span><br><span class="line">                            &lt;button class=&quot;carousel-btn prev-btn&quot; type=&quot;button&quot; aria-label=&quot;上一张&quot;&gt;&amp;#10094;&lt;/button&gt;</span><br><span class="line">                            &lt;button class=&quot;carousel-btn next-btn&quot; type=&quot;button&quot; aria-label=&quot;下一张&quot;&gt;&amp;#10095;&lt;/button&gt;</span><br><span class="line">                            &lt;div class=&quot;carousel-indicators&quot;&gt;</span><br><span class="line">                                $&#123;images.map((_, index) =&gt; `&lt;span class=&quot;indicator$&#123;index === 0 ? &#x27; active&#x27; : &#x27;&#x27;&#125;&quot; data-index=&quot;$&#123;index&#125;&quot;&gt;&lt;/span&gt;`).join(&#x27;&#x27;)&#125;</span><br><span class="line">                            &lt;/div&gt;</span><br><span class="line">                        &lt;/div&gt;</span><br><span class="line">                    &lt;/div&gt;`;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;,</span><br><span class="line"></span><br><span class="line">            // 阻止链接默认行为直到插件加载完成</span><br><span class="line">            preventImageLinkDefault = () =&gt; &#123;</span><br><span class="line">                // 添加事件委托，阻止图片链接的默认行为直到 fancybox 加载完成</span><br><span class="line">                document.addEventListener(&#x27;click&#x27;, function (e) &#123;</span><br><span class="line">                    // 检查是否点击的是图片链接且属于我们的图片链接类</span><br><span class="line">                    const imageLink = e.target.closest(&#x27;.carousel-image-link.no-direct-link&#x27;);</span><br><span class="line">                    if (imageLink) &#123;</span><br><span class="line">                        e.preventDefault();</span><br><span class="line">                        e.stopPropagation();</span><br><span class="line"></span><br><span class="line">                        // 检查是否已加载 fancybox</span><br><span class="line">                        if (typeof Fancybox !== &#x27;undefined&#x27; &amp;&amp; typeof Fancybox.bind !== &#x27;undefined&#x27;) &#123;</span><br><span class="line">                            // 如果已加载，直接打开 fancybox</span><br><span class="line">                            const galleryImages = [];</span><br><span class="line">                            const container = imageLink.closest(&#x27;.carousel-container&#x27;);</span><br><span class="line"></span><br><span class="line">                            // 如果是轮播图，收集所有图片；如果是单张图片，就只有一张</span><br><span class="line">                            if (container) &#123;</span><br><span class="line">                                const links = container.querySelectorAll(&#x27;.carousel-image-link&#x27;);</span><br><span class="line">                                links.forEach((link, index) =&gt; &#123;</span><br><span class="line">                                    galleryImages.push(&#123;</span><br><span class="line">                                        src: link.getAttribute(&#x27;href&#x27;),</span><br><span class="line">                                        thumb: link.querySelector(&#x27;img&#x27;).src</span><br><span class="line">                                    &#125;);</span><br><span class="line"></span><br><span class="line">                                    // 如果点击的就是当前这张图片，记录索引</span><br><span class="line">                                    if (link === imageLink) &#123;</span><br><span class="line">                                        Fancybox.show(galleryImages, &#123; startIndex: index &#125;);</span><br><span class="line">                                    &#125;</span><br><span class="line">                                &#125;);</span><br><span class="line">                            &#125; else &#123;</span><br><span class="line">                                // 单个图片的情况</span><br><span class="line">                                Fancybox.show([&#123;</span><br><span class="line">                                    src: imageLink.getAttribute(&#x27;href&#x27;),</span><br><span class="line">                                    thumb: imageLink.querySelector(&#x27;img&#x27;).src</span><br><span class="line">                                &#125;]);</span><br><span class="line">                            &#125;</span><br><span class="line">                        &#125; else &#123;</span><br><span class="line">                            // 如果未加载，显示提示信息或等待</span><br><span class="line">                            console.log(&quot;正在加载图片查看器...&quot;);</span><br><span class="line"></span><br><span class="line">                            // 尝试多次检查 fancybox 是否加载完成</span><br><span class="line">                            const checkFancyboxAndShow = () =&gt; &#123;</span><br><span class="line">                                if (typeof Fancybox !== &#x27;undefined&#x27; &amp;&amp; typeof Fancybox.bind !== &#x27;undefined&#x27;) &#123;</span><br><span class="line">                                    const galleryImages = [];</span><br><span class="line">                                    const container = imageLink.closest(&#x27;.carousel-container&#x27;);</span><br><span class="line"></span><br><span class="line">                                    if (container) &#123;</span><br><span class="line">                                        const links = container.querySelectorAll(&#x27;.carousel-image-link&#x27;);</span><br><span class="line">                                        links.forEach((link, index) =&gt; &#123;</span><br><span class="line">                                            galleryImages.push(&#123;</span><br><span class="line">                                                src: link.getAttribute(&#x27;href&#x27;),</span><br><span class="line">                                                thumb: link.querySelector(&#x27;img&#x27;).src</span><br><span class="line">                                            &#125;);</span><br><span class="line"></span><br><span class="line">                                            // 如果点击的就是当前这张图片，记录索引</span><br><span class="line">                                            if (link === imageLink) &#123;</span><br><span class="line">                                                Fancybox.show(galleryImages, &#123; startIndex: index &#125;);</span><br><span class="line">                                            &#125;</span><br><span class="line">                                        &#125;);</span><br><span class="line">                                    &#125; else &#123;</span><br><span class="line">                                        // 单个图片的情况</span><br><span class="line">                                        Fancybox.show([&#123;</span><br><span class="line">                                            src: imageLink.getAttribute(&#x27;href&#x27;),</span><br><span class="line">                                            thumb: imageLink.querySelector(&#x27;img&#x27;).src</span><br><span class="line">                                        &#125;]);</span><br><span class="line">                                    &#125;</span><br><span class="line">                                &#125; else &#123;</span><br><span class="line">                                    setTimeout(checkFancyboxAndShow, 100); // 100ms 后再检查</span><br><span class="line">                                &#125;</span><br><span class="line">                            &#125;;</span><br><span class="line"></span><br><span class="line">                            checkFancyboxAndShow();</span><br><span class="line">                        &#125;</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125;, true); // 使用捕获阶段确保在其他事件处理程序之前执行</span><br><span class="line">            &#125;,</span><br><span class="line"></span><br><span class="line">            /* Markdown渲染函数 - 新增代码开始 */</span><br><span class="line">            // 解析Markdown为HTML</span><br><span class="line">            renderMarkdown = (text) =&gt; &#123;</span><br><span class="line">                if (!text || typeof text !== &#x27;string&#x27;) return &#x27;&#x27;;</span><br><span class="line">                // 等待marked加载完成</span><br><span class="line">                if (!window.marked) &#123;</span><br><span class="line">                    // 如果marked未加载，先返回原始文本，延迟后重新渲染</span><br><span class="line">                    setTimeout(() =&gt; &#123;</span><br><span class="line">                        document.querySelectorAll(&#x27;.talk_content_text&#x27;).forEach(el =&gt; &#123;</span><br><span class="line">                            el.innerHTML = renderMarkdown(el.textContent);</span><br><span class="line">                        &#125;);</span><br><span class="line">                        m(); // 重新计算布局</span><br><span class="line">                    &#125;, 500);</span><br><span class="line">                    return text.replace(/\n/g, &#x27;&lt;br&gt;&#x27;);</span><br><span class="line">                &#125;</span><br><span class="line">                </span><br><span class="line">                // 配置marked</span><br><span class="line">                marked.setOptions(&#123;</span><br><span class="line">                    breaks: true, // 换行符转换为&lt;br&gt;</span><br><span class="line">                    gfm: true, // 启用GitHub风格的Markdown</span><br><span class="line">                    highlight: function(code, lang) &#123;</span><br><span class="line">                        // 如果有highlight.js且指定了语言，进行代码高亮</span><br><span class="line">                        if (window.hljs &amp;&amp; lang) &#123;</span><br><span class="line">                            try &#123;</span><br><span class="line">                                return hljs.highlight(code, &#123; language: lang &#125;).value;</span><br><span class="line">                            &#125; catch (err) &#123;</span><br><span class="line">                                return hljs.highlightAuto(code).value;</span><br><span class="line">                            &#125;</span><br><span class="line">                        &#125;</span><br><span class="line">                        return code;</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125;);</span><br><span class="line">                </span><br><span class="line">                // 解析Markdown</span><br><span class="line">                return marked.parse(text);</span><br><span class="line">            &#125;,</span><br><span class="line">            /* Markdown渲染函数 - 新增代码结束 */</span><br><span class="line"></span><br><span class="line">            // 格式化单条说说内容函数：处理文本、图片、视频、外部链接等</span><br><span class="line">            u = e =&gt; &#123;</span><br><span class="line">                // 解析扩展信息</span><br><span class="line">                const t = (e =&gt; i(e)?.type || &quot;&quot;)(e),</span><br><span class="line">                    n = (e =&gt; i(e)?.payload || null)(e),</span><br><span class="line">                    a = e?.content || &quot;&quot;; // 获取说说内容</span><br><span class="line"></span><br><span class="line">                // --- LivePhoto 视频提取逻辑 ---</span><br><span class="line">                const liveRegex = /\[live\](https?:\/\/[^\s&lt;]+)/g;</span><br><span class="line">                let liveVideos = [];</span><br><span class="line">                let match;</span><br><span class="line">                while ((match = liveRegex.exec(a)) !== null) &#123;</span><br><span class="line">                    liveVideos.push(match[1]); // 提取带前缀的视频URL</span><br><span class="line">                &#125;</span><br><span class="line">                // 从正文中剔除 [live] 链接，确保文字不显示干扰</span><br><span class="line">                const cleanText = a.replace(liveRegex, &#x27;&#x27;).trim();</span><br><span class="line"></span><br><span class="line">                // --- 强制视频链接解析逻辑 ---</span><br><span class="line">                let videoHtml = &quot;&quot;;</span><br><span class="line">                // YouTube和B站视频链接正则表达式</span><br><span class="line">                const youtubeRegex = /(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/watch\?v=|youtu\.be\/)([a-zA-Z0-9_-]&#123;11&#125;)/;</span><br><span class="line">                const bilibiliRegex = /(?:https?:\/\/)?(?:www\.)?bilibili\.com\/video\/(BV[0-9A-Za-z]+)/;</span><br><span class="line"></span><br><span class="line">                const ytMatch = cleanText.match(youtubeRegex); // 在清洗后的文本中匹配YouTube链接</span><br><span class="line">                const bMatch = cleanText.match(bilibiliRegex); // 在清洗后的文本中匹配B站链接</span><br><span class="line"></span><br><span class="line">                // 如果匹配到YouTube或B站链接，则生成对应的iframe</span><br><span class="line">                if (ytMatch) &#123;</span><br><span class="line">                    videoHtml = `&lt;div class=&quot;video-wrapper&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/$&#123;ytMatch[1]&#125;&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;`;</span><br><span class="line">                &#125; else if (bMatch) &#123;</span><br><span class="line">                    videoHtml = `&lt;div class=&quot;video-wrapper&quot;&gt;&lt;iframe src=&quot;https://www.bilibili.com/blackboard/html5mobileplayer.html?bvid=$&#123;bMatch[1]&#125;&amp;as_wide=1&amp;high_quality=1&amp;danmaku=0&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;`;</span><br><span class="line">                &#125;</span><br><span class="line"></span><br><span class="line">                // 处理文本内容：替换复选框标记并使用Markdown渲染 - 修改这一行</span><br><span class="line">                let o = `&lt;div class=&quot;talk_content_text&quot;&gt;$&#123;(e =&gt; renderMarkdown((e || &quot;&quot;).replace(/- \[ \]/g, &quot;[]&quot;).replace(/- \[x\]/gi, &quot;[x]&quot;)))(cleanText)&#125;&lt;/div&gt;`;</span><br><span class="line"></span><br><span class="line">                // 渲染视频</span><br><span class="line">                o += videoHtml;</span><br><span class="line"></span><br><span class="line">                // 渲染图片 - 现在使用轮播图功能</span><br><span class="line">                const r = (e =&gt; Array.isArray(e?.echo_files) ?</span><br><span class="line">                    e.echo_files.map((e =&gt; e?.file || e))</span><br><span class="line">                        .filter(e =&gt; String(e?.category || &quot;&quot;).toLowerCase() === &quot;image&quot;)</span><br><span class="line">                        .map(e =&gt; e?.url).filter(Boolean) : [])(e);</span><br><span class="line"></span><br><span class="line">                // 生成轮播图HTML (传入提取的liveVideos数组)</span><br><span class="line">                if (r.length &gt; 0) &#123;</span><br><span class="line">                    o += carouselHtml(r, liveVideos);</span><br><span class="line">                &#125;</span><br><span class="line"></span><br><span class="line">                // 检查扩展类型并添加外部链接或音乐</span><br><span class="line">                if (t === &quot;WEBSITE&quot; || t === &quot;GITHUBPROJ&quot;) o += c(t, n);</span><br><span class="line">                if (t === &quot;MUSIC&quot;) o += ((e) =&gt; &#123;</span><br><span class="line">                    // 解析音乐链接，识别网易云或QQ音乐</span><br><span class="line">                    const t = ((e) =&gt; &#123;</span><br><span class="line">                        const t = e?.url;</span><br><span class="line">                        if (!t) return null;</span><br><span class="line">                        // 根据URL判断音乐平台</span><br><span class="line">                        let n = t.includes(&quot;music.163.com&quot;) ? &quot;netease&quot; : t.includes(&quot;y.qq.com&quot;) ? &quot;tencent&quot; : &quot;&quot;;</span><br><span class="line">                        const a = t.match(/id=(\d+)/); // 提取音乐ID</span><br><span class="line">                        return n &amp;&amp; a ? &#123; server: n, id: a[1] &#125; : null</span><br><span class="line">                    &#125;)(e);</span><br><span class="line">                    // 返回MetingJS音乐播放器HTML</span><br><span class="line">                    return t ? `&lt;meting-js server=&quot;$&#123;t.server&#125;&quot; type=&quot;song&quot; id=&quot;$&#123;t.id&#125;&quot; mini=&quot;false&quot;&gt;&lt;/meting-js&gt;` : &quot;&quot;</span><br><span class="line">                &#125;)(n);</span><br><span class="line">                if (t === &quot;VIDEO&quot;) o += d(n);</span><br><span class="line"></span><br><span class="line">                // 返回格式化后的说说对象</span><br><span class="line">                return &#123;</span><br><span class="line">                    content: o,</span><br><span class="line">                    user: xscConfig.nickname, // 用户名</span><br><span class="line">                    avatar: xscConfig.avatar, // 头像</span><br><span class="line">                    date: s(e?.created_at),   // 格式化后的日期</span><br><span class="line">                    tags: l(e),               // 标签数组</span><br><span class="line">                    quoteText: cleanText      // 原始文本内容（引用回复使用清洗后的文字）</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;;</span><br><span class="line"></span><br><span class="line">        // 引用回复函数：在评论框中填入引用文本并滚动到评论区</span><br><span class="line">        p = e =&gt; &#123;</span><br><span class="line">            // 查找评论框元素（支持Element UI和Artalk）</span><br><span class="line">            const t = document.querySelector(&quot;.el-textarea__inner&quot;) || document.querySelector(&quot;.atk-textarea&quot;);</span><br><span class="line">            if (t) &#123;</span><br><span class="line">                t.value = `&gt; $&#123;e || &quot;&quot;&#125;\n\n`; // 在评论框中填入引用格式</span><br><span class="line">                t.focus(); // 聚焦到评论框</span><br><span class="line">                t.dispatchEvent(new Event(&#x27;input&#x27;, &#123; bubbles: true &#125;)); // 触发输入事件</span><br><span class="line">                // 查找评论区并平滑滚动到该区域</span><br><span class="line">                const tw = document.querySelector(&#x27;#twikoo&#x27;) || document.querySelector(&#x27;#artalk&#x27;);</span><br><span class="line">                tw &amp;&amp; tw.scrollIntoView(&#123; behavior: &#x27;smooth&#x27; &#125;)</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;,</span><br><span class="line"></span><br><span class="line">            // 布局更新函数：重新计算瀑布流布局并更新懒加载和灯箱效果</span><br><span class="line">            m = () =&gt; &#123;</span><br><span class="line">                o(&quot;#talk&quot;), // 重新计算瀑布流布局</span><br><span class="line">                    window.btf?.loadLightbox &amp;&amp; btf.loadLightbox(document.querySelectorAll(&quot;#talk img:not(.no-lightbox)&quot;)), // 加载灯箱效果</span><br><span class="line">                    window.lazyLoadInstance?.update &amp;&amp; lazyLoadInstance.update(); // 更新懒加载实例</span><br><span class="line"></span><br><span class="line">                // 初始化轮播图功能</span><br><span class="line">                initCarousel();</span><br><span class="line">            &#125;,</span><br><span class="line"></span><br><span class="line">            // 初始化轮播图功能</span><br><span class="line">            initCarousel = () =&gt; &#123;</span><br><span class="line">                const carousels = document.querySelectorAll(&#x27;.image-carousel&#x27;);</span><br><span class="line"></span><br><span class="line">                carousels.forEach(carousel =&gt; &#123;</span><br><span class="line">                    const container = carousel.querySelector(&#x27;.carousel-container&#x27;);</span><br><span class="line"></span><br><span class="line">                    // --- LivePhoto 交互逻辑开始 ---</span><br><span class="line">                    const slidesWithLive = carousel.querySelectorAll(&#x27;.carousel-slide.has-live&#x27;);</span><br><span class="line">                    slidesWithLive.forEach(slide =&gt; &#123;</span><br><span class="line">                        const video = slide.querySelector(&#x27;.live-video&#x27;);</span><br><span class="line">                        const img = slide.querySelector(&#x27;img&#x27;);</span><br><span class="line"></span><br><span class="line">                        // 添加一个标志来跟踪视频是否已完成播放</span><br><span class="line">                        let hasVideoPlayed = false;</span><br><span class="line"></span><br><span class="line">                        // 鼠标进入：播放视频，隐藏图片</span><br><span class="line">                        slide.addEventListener(&#x27;mouseenter&#x27;, () =&gt; &#123;</span><br><span class="line">                            // 如果视频尚未播放过，或者已经播放完成但鼠标离开了再回来，则重新播放</span><br><span class="line">                            if (!hasVideoPlayed) &#123;</span><br><span class="line">                                video.currentTime = 0; // 确保每次从头播放</span><br><span class="line">                                video.play().catch(e =&gt; console.warn(&quot;LivePhoto播放被阻挡&quot;));</span><br><span class="line">                                video.style.opacity = &quot;1&quot;;</span><br><span class="line">                                img.style.opacity = &quot;0&quot;;</span><br><span class="line">                                hasVideoPlayed = true;</span><br><span class="line">                            &#125;</span><br><span class="line">                        &#125;);</span><br><span class="line"></span><br><span class="line">                        // 鼠标离开：停止视频，恢复图片显示，并重置播放状态</span><br><span class="line">                        slide.addEventListener(&#x27;mouseleave&#x27;, () =&gt; &#123;</span><br><span class="line">                            video.pause();</span><br><span class="line">                            video.currentTime = 0; // 重置进度</span><br><span class="line">                            video.style.opacity = &quot;0&quot;;</span><br><span class="line">                            img.style.opacity = &quot;1&quot;;</span><br><span class="line">                            hasVideoPlayed = false; // 重置播放状态</span><br><span class="line">                        &#125;);</span><br><span class="line"></span><br><span class="line">                        // 视频播放结束：恢复图片显示，但不重置播放状态</span><br><span class="line">                        video.addEventListener(&#x27;ended&#x27;, () =&gt; &#123;</span><br><span class="line">                            video.style.opacity = &quot;0&quot;;</span><br><span class="line">                            img.style.opacity = &quot;1&quot;;</span><br><span class="line">                            // 不重置hasVideoPlayed，保持为true表示视频已经播放完成</span><br><span class="line">                        &#125;);</span><br><span class="line">                    &#125;);</span><br><span class="line">                    // --- LivePhoto 交互逻辑结束 ---</span><br><span class="line"></span><br><span class="line">                    if (container.classList.contains(&#x27;single-image&#x27;)) return; // 单张图片无需翻页处理</span><br><span class="line"></span><br><span class="line">                    const slides = carousel.querySelectorAll(&#x27;.carousel-slide&#x27;);</span><br><span class="line">                    const prevBtn = carousel.querySelector(&#x27;.prev-btn&#x27;);</span><br><span class="line">                    const nextBtn = carousel.querySelector(&#x27;.next-btn&#x27;);</span><br><span class="line">                    const indicators = carousel.querySelectorAll(&#x27;.indicator&#x27;);</span><br><span class="line">                    let currentIndex = 0;</span><br><span class="line"></span><br><span class="line">                    // 显示当前幻灯片</span><br><span class="line">                    const showSlide = (index) =&gt; &#123;</span><br><span class="line">                        slides.forEach((slide, i) =&gt; &#123;</span><br><span class="line">                            slide.classList.toggle(&#x27;active&#x27;, i === index);</span><br><span class="line">                        &#125;);</span><br><span class="line"></span><br><span class="line">                        indicators.forEach((indicator, i) =&gt; &#123;</span><br><span class="line">                            indicator.classList.toggle(&#x27;active&#x27;, i === index);</span><br><span class="line">                        &#125;);</span><br><span class="line"></span><br><span class="line">                        currentIndex = index;</span><br><span class="line">                    &#125;;</span><br><span class="line"></span><br><span class="line">                    // 下一张</span><br><span class="line">                    const nextSlide = () =&gt; &#123;</span><br><span class="line">                        const nextIndex = (currentIndex + 1) % slides.length;</span><br><span class="line">                        showSlide(nextIndex);</span><br><span class="line">                    &#125;;</span><br><span class="line"></span><br><span class="line">                    // 上一张</span><br><span class="line">                    const prevSlide = () =&gt; &#123;</span><br><span class="line">                        const prevIndex = (currentIndex - 1 + slides.length) % slides.length;</span><br><span class="line">                        showSlide(prevIndex);</span><br><span class="line">                    &#125;;</span><br><span class="line"></span><br><span class="line">                    // 绑定按钮事件</span><br><span class="line">                    if (prevBtn) prevBtn.addEventListener(&#x27;click&#x27;, (e) =&gt; &#123; e.preventDefault(); e.stopPropagation(); prevSlide(); &#125;);</span><br><span class="line">                    if (nextBtn) nextBtn.addEventListener(&#x27;click&#x27;, (e) =&gt; &#123; e.preventDefault(); e.stopPropagation(); nextSlide(); &#125;);</span><br><span class="line"></span><br><span class="line">                    // 绑定指示器事件</span><br><span class="line">                    indicators.forEach((indicator, index) =&gt; &#123;</span><br><span class="line">                        indicator.addEventListener(&#x27;click&#x27;, (e) =&gt; &#123;</span><br><span class="line">                            e.preventDefault();</span><br><span class="line">                            e.stopPropagation();</span><br><span class="line">                            showSlide(index);</span><br><span class="line">                        &#125;);</span><br><span class="line">                    &#125;);</span><br><span class="line"></span><br><span class="line">                    // 键盘支持</span><br><span class="line">                    container.addEventListener(&#x27;keydown&#x27;, (e) =&gt; &#123;</span><br><span class="line">                        if (e.key === &#x27;ArrowLeft&#x27;) prevSlide();</span><br><span class="line">                        if (e.key === &#x27;ArrowRight&#x27;) nextSlide();</span><br><span class="line">                    &#125;);</span><br><span class="line">                &#125;);</span><br><span class="line">            &#125;,</span><br><span class="line"></span><br><span class="line">            // 渲染说说列表函数：将数据转换为DOM元素并添加到页面</span><br><span class="line">            h = e =&gt; &#123;</span><br><span class="line">                // 将数据映射为DOM元素并添加到容器中</span><br><span class="line">                e.map(u).forEach((e =&gt; r.appendChild((e =&gt; &#123;</span><br><span class="line">                    // 创建说说项容器</span><br><span class="line">                    const t = document.createElement(&quot;div&quot;); t.className = &quot;talk_item card-shadow&quot;;</span><br><span class="line"></span><br><span class="line">                    // 创建元信息区域（头像和用户名）</span><br><span class="line">                    const n = document.createElement(&quot;div&quot;); n.className = &quot;talk_meta&quot;;</span><br><span class="line"></span><br><span class="line">                    // 创建头像图片元素</span><br><span class="line">                    const a = document.createElement(&quot;img&quot;); a.className = &quot;no-lightbox avatar&quot;; a.src = e.avatar;</span><br><span class="line"></span><br><span class="line">                    // 创建用户信息容器</span><br><span class="line">                    const r = document.createElement(&quot;div&quot;); r.className = &quot;info&quot;;</span><br><span class="line"></span><br><span class="line">                    // 创建用户名标签，包含认证标识</span><br><span class="line">                    const o = document.createElement(&quot;span&quot;); o.className = &quot;talk_nick&quot;;</span><br><span class="line">                    o.innerHTML = `$&#123;e.user&#125; &lt;svg viewBox=&quot;0 0 512 512&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; class=&quot;is-badge icon&quot; style=&quot;width:14px;margin-left:4px;vertical-align:middle;&quot;&gt;&lt;path d=&quot;m512 268c0 17.9-4.3 34.5-12.9 49.7s-20.1 27.1-34.6 35.4c.4 2.7.6 6.9.6 12.6 0 27.1-9.1 50.1-27.1 69.1-18.1 19.1-39.9 28.6-65.4 28.6-11.4 0-22.3-2.1-32.6-6.3-8 16.4-19.5 29.6-34.6 39.7-15 10.2-31.5 15.2-49.4 15.2-18.3 0-34.9-4.9-49.7-14.9-14.9-9.9-26.3-23.2-34.3-40-10.3 4.2-21.1 6.3-32.6 6.3-25.5 0-47.4-9.5-65.7-28.6-18.3-19-27.4-42.1-27.4-69.1 0-3 .4-7.2 1.1-12.6-14.5-8.4-26-20.2-34.6-35.4-8.5-15.2-12.8-31.8-12.8-49.7 0-19 4.8-36.5 14.3-52.3s22.3-27.5 38.3-35.1c-4.2-11.4-6.3-22.9-6.3-34.3 0-27 9.1-50.1 27.4-69.1s40.2-28.6 65.7-28.6c11.4 0 22.3 2.1 32.6 6.3 8-16.4 19.5-29.6 34.6-39.7 15-10.1 31.5-15.2 49.4-15.2s34.4 5.1 49.4 15.1c15 10.1 26.6 23.3 34.6 39.7 10.3-4.2 21.1-6.3 32.6-6.3 25.5 0 47.3 9.5 65.4 28.6s27.1 42.1 27.1 69.1c0 12.6-1.9 24-5.7 34.3 16 7.6 28.8 19.3 38.3 35.1 9.5 15.9 14.3 33.4 14.3 52.4zm-266.9 77.1 105.7-158.3c2.7-4.2 3.5-8.8 2.6-13.7-1-4.9-3.5-8.8-7.7-11.4-4.2-2.7-8.8-3.6-13.7-2.9-5 .8-9 3.2-12 7.4l-93.1 140-42.9-42.8c-3.8-3.8-8.2-5.6-13.1-5.4-5 .2-9.3 2-13.1 5.4-3.4 3.4-5.1 7.7-5.1 12.9 0 5.1 1.7 9.4 5.1 12.9l58.9 58.9 2.9 2.3c3.4 2.3 6.9 3.4 10.3 3.4 6.7-.1 11.8-2.9 15.2-8.7z&quot; fill=&quot;#1da1f2&quot;&gt;&lt;/path&gt;&lt;/svg&gt;`;</span><br><span class="line"></span><br><span class="line">                    // 创建日期标签</span><br><span class="line">                    const i = document.createElement(&quot;span&quot;); i.className = &quot;talk_date&quot;; i.textContent = e.date;</span><br><span class="line"></span><br><span class="line">                    // 组装元信息区域</span><br><span class="line">                    r.appendChild(o); r.appendChild(i); n.appendChild(a); n.appendChild(r);</span><br><span class="line"></span><br><span class="line">                    // 创建内容区域</span><br><span class="line">                    const l = document.createElement(&quot;div&quot;); l.className = &quot;talk_content&quot;; l.innerHTML = e.content;</span><br><span class="line"></span><br><span class="line">                    // 创建底部区域</span><br><span class="line">                    const s = document.createElement(&quot;div&quot;); s.className = &quot;talk_bottom&quot;;</span><br><span class="line"></span><br><span class="line">                    // 创建标签容器</span><br><span class="line">                    const c = document.createElement(&quot;div&quot;), d = document.createElement(&quot;span&quot;);</span><br><span class="line">                    d.className = &quot;talk_tag&quot;; d.textContent = `🏷️ $&#123;e.tags.join(&quot; / &quot;)&#125;`;</span><br><span class="line">                    c.appendChild(d);</span><br><span class="line"></span><br><span class="line">                    // 创建评论按钮</span><br><span class="line">                    const u = document.createElement(&quot;a&quot;);</span><br><span class="line">                    u.className = &quot;comment_btn&quot;;</span><br><span class="line">                    u.href = &quot;javascript:;&quot;;</span><br><span class="line">                    u.addEventListener(&quot;click&quot;, (() =&gt; p(e.quoteText))); // 点击时触发引用回复</span><br><span class="line">                    u.innerHTML = &#x27;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; style=&quot;width:16px;fill:currentColor;&quot;&gt;&lt;path d=&quot;M256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&#x27;;</span><br><span class="line"></span><br><span class="line">                    // 组装底部区域</span><br><span class="line">                    return s.appendChild(c), s.appendChild(u), t.appendChild(n), t.appendChild(l), t.appendChild(s), t</span><br><span class="line">                &#125;)(e)))),</span><br><span class="line">                    m(); // 执行布局更新</span><br><span class="line"></span><br><span class="line">                // 为视频和图片添加加载事件监听器</span><br><span class="line">                setTimeout(() =&gt; &#123;</span><br><span class="line">                    m(); // 初次渲染后再次调用瀑布流布局</span><br><span class="line"></span><br><span class="line">                    // 为所有媒体元素添加加载完成事件监听</span><br><span class="line">                    r.querySelectorAll(&quot;img, iframe, meting-js&quot;).forEach((e =&gt; &#123;</span><br><span class="line">                        e.addEventListener(&quot;load&quot;, m, &#123; once: !0 &#125;);</span><br><span class="line"></span><br><span class="line">                        if (e.complete &amp;&amp; (e.tagName === &#x27;IMG&#x27; || e.tagName === &#x27;IFRAME&#x27;)) &#123;</span><br><span class="line">                            m();</span><br><span class="line">                        &#125;</span><br><span class="line">                    &#125;));</span><br><span class="line"></span><br><span class="line">                    // 监听 MetingJS 初始化完成事件</span><br><span class="line">                    const initMetingObserver = () =&gt; &#123;</span><br><span class="line">                        const metingElements = r.querySelectorAll(&#x27;meting-js&#x27;);</span><br><span class="line">                        if (metingElements.length &gt; 0) &#123;</span><br><span class="line">                            const observer = new MutationObserver((mutationsList) =&gt; &#123;</span><br><span class="line">                                let shouldRefresh = false;</span><br><span class="line">                                for (let mutation of mutationsList) &#123;</span><br><span class="line">                                    if (mutation.type === &#x27;childList&#x27;) &#123;</span><br><span class="line">                                        mutation.addedNodes.forEach(node =&gt; &#123;</span><br><span class="line">                                            if (node.nodeType === 1 &amp;&amp; (node.classList.contains(&#x27;aplayer&#x27;) || node.querySelector(&#x27;.aplayer&#x27;))) &#123;</span><br><span class="line">                                                shouldRefresh = true;</span><br><span class="line">                                            &#125;</span><br><span class="line">                                        &#125;);</span><br><span class="line">                                        if (shouldRefresh) &#123;</span><br><span class="line">                                            setTimeout(() =&gt; &#123; m(); &#125;, 100);</span><br><span class="line">                                            break;</span><br><span class="line">                                        &#125;</span><br><span class="line">                                    &#125;</span><br><span class="line">                                &#125;</span><br><span class="line">                            &#125;);</span><br><span class="line">                            metingElements.forEach(metingEl =&gt; &#123;</span><br><span class="line">                                observer.observe(metingEl, &#123; childList: true, subtree: true &#125;);</span><br><span class="line">                            &#125;);</span><br><span class="line">                            setTimeout(() =&gt; &#123; observer.disconnect(); &#125;, 5000);</span><br><span class="line">                        &#125;</span><br><span class="line">                    &#125;;</span><br><span class="line"></span><br><span class="line">                    setTimeout(initMetingObserver, 100);</span><br><span class="line"></span><br><span class="line">                &#125;, 100);</span><br><span class="line"></span><br><span class="line">                n.afterRenderTimer = window.setTimeout(m, 300)</span><br><span class="line">            &#125;;</span><br><span class="line"></span><br><span class="line">        // 防止图片链接默认行为</span><br><span class="line">        preventImageLinkDefault();</span><br><span class="line"></span><br><span class="line">        // 获取数据并渲染的立即执行函数</span><br><span class="line">        (() =&gt; &#123;</span><br><span class="line">            fetch(xscConfig.apiUrl, &#123;</span><br><span class="line">                method: &quot;POST&quot;,</span><br><span class="line">                headers: &#123; &quot;Content-Type&quot;: &quot;application/json&quot; &#125;,</span><br><span class="line">                body: JSON.stringify(&#123; page: 1, pageSize: 50 &#125;)</span><br><span class="line">            &#125;)</span><br><span class="line">                .then(e =&gt; e.json()).then(n =&gt; &#123;</span><br><span class="line">                    if (1 !== n?.code) return;</span><br><span class="line">                    h(n.data.items)</span><br><span class="line">                &#125;)</span><br><span class="line">        &#125;)()</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    window.initShuoshuoPage = r,</span><br><span class="line">        n.listenersBound || (document.addEventListener(&quot;pjax:complete&quot;, r), n.listenersBound = !0),</span><br><span class="line">        r()</span><br><span class="line">&#125;();</span><br></pre></td></tr></table></figure>

<div class="stellar-folders__label">我的说说md页面</div>

<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><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><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: 说说日志</span><br><span class="line">date: 2024-01-01 00:00:00</span><br><span class="line">h1: &#x27;&#x27;</span><br><span class="line">comments: true</span><br><span class="line">indexing: false</span><br><span class="line">---</span><br><span class="line"></span><br><span class="line">&lt;script src=&quot;https://cdn.apple-livephotoskit.com/lpk/1/livephotoskit.js&quot;&gt;&lt;/script&gt;</span><br><span class="line">&lt;link rel=&quot;stylesheet&quot; href=&quot;https://fastly.jsdelivr.net/npm/aplayer@1.10.1/dist/APlayer.min.css&quot; media=&quot;all&quot; onload=&quot;this.media=&amp;quot;all&amp;quot;&quot;&gt;</span><br><span class="line">&lt;script src=&quot;https://fastly.jsdelivr.net/npm/aplayer@1.10.1/dist/APlayer.min.js&quot;&gt;&lt;/script&gt;</span><br><span class="line">&lt;script src=&quot;https://fastly.jsdelivr.net/npm/meting@2.0.1/dist/Meting.min.js&quot;&gt;&lt;/script&gt;</span><br><span class="line"></span><br><span class="line">&lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.css&quot; /&gt;</span><br><span class="line">&lt;script src=&quot;https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.umd.js&quot;&gt;&lt;/script&gt;</span><br><span class="line">/* --- 你可以选择把资源都下载下来，我就不做处理了，或者是镜像，这些可能是都比较慢的 --- */</span><br><span class="line">&lt;div id=&quot;talk&quot;&gt;🌌 宇宙信号同步中🌀...&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;style&gt;</span><br><span class="line">/* --- 瀑布流容器适配 --- */</span><br><span class="line">#talk &#123;</span><br><span class="line">    margin: 20px auto;</span><br><span class="line">    width: 100%;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.talk_item &#123;</span><br><span class="line">    width: calc(57% - 120px); /* 瀑布-稳定的两列布局 */</span><br><span class="line">    margin-left: 10px;  </span><br><span class="line">    margin-right: 10px;</span><br><span class="line">    background: var(--block);</span><br><span class="line">    border: 1px solid var(--block-border);</span><br><span class="line">    border-radius: 12px;</span><br><span class="line">    padding: 16px;</span><br><span class="line">    margin-bottom: 20px;</span><br><span class="line">    box-sizing: border-box;</span><br><span class="line">    transition: 0.3s;</span><br><span class="line">    min-width: 300px; /* 添加最小宽度确保移动端体验 */</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">@media screen and (max-width: 1024px) &#123;</span><br><span class="line">    .talk_item &#123;</span><br><span class="line">        width: calc(50% - 120px); /* 在较小屏幕上仍保持两列 */</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">@media screen and (max-width: 768px) &#123;</span><br><span class="line">    .talk_item &#123; </span><br><span class="line">        width: calc(100% - 40px); /* 移动端单列，留出边距 */</span><br><span class="line">        margin-left: 10px;</span><br><span class="line">        margin-right: 10px;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/* --- 用户信息区 --- */</span><br><span class="line">.talk_meta &#123;</span><br><span class="line">    display: flex;</span><br><span class="line">    align-items: center;</span><br><span class="line">    margin-bottom: 12px;</span><br><span class="line">&#125;</span><br><span class="line">.talk_meta .avatar &#123;</span><br><span class="line">    width: 40px !important;</span><br><span class="line">    height: 40px !important;</span><br><span class="line">    border-radius: 50% !important;</span><br><span class="line">    margin-right: 12px !important;</span><br><span class="line">&#125;</span><br><span class="line">.talk_meta .info &#123; display: flex; flex-direction: column; &#125;</span><br><span class="line">.talk_nick &#123; font-weight: bold; font-size: 14px; display: flex; align-items: center; &#125;</span><br><span class="line">.talk_date &#123; font-size: 11px; color: var(--text-p3); margin-top: 2px; &#125;</span><br><span class="line"></span><br><span class="line">/* --- 内容解析区 --- */</span><br><span class="line">.talk_content_text &#123; </span><br><span class="line">    line-height: 1.6; </span><br><span class="line">    color: var(--text-p1); </span><br><span class="line">    font-size: 14px; </span><br><span class="line">    word-wrap: break-word; /* 确保长内容正确换行 */</span><br><span class="line">&#125;</span><br><span class="line">.talk_content_text a &#123; color: var(--theme-link); font-weight: 500; &#125;</span><br><span class="line"></span><br><span class="line">.zone_imgbox &#123; </span><br><span class="line">    display: grid; </span><br><span class="line">    grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); /* 更灵活的网格 */</span><br><span class="line">    gap: 4px; </span><br><span class="line">    margin-top: 10px; </span><br><span class="line">&#125;</span><br><span class="line">.zone_imgbox img &#123; </span><br><span class="line">    width: 100%; </span><br><span class="line">    aspect-ratio: 1; </span><br><span class="line">    object-fit: cover; </span><br><span class="line">    border-radius: 6px; </span><br><span class="line">    cursor: pointer; /* 添加光标提示可点击 */</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/* --- LiuShen 特色：外链卡片 --- */</span><br><span class="line">.shuoshuo-external-link &#123; </span><br><span class="line">    margin-top: 10px; </span><br><span class="line">    border-radius: 10px; </span><br><span class="line">    overflow: hidden; </span><br><span class="line">    background: var(--block-hover); </span><br><span class="line">    border: 1px solid var(--block-border); </span><br><span class="line">&#125;</span><br><span class="line">.external-link &#123; </span><br><span class="line">    display: flex; </span><br><span class="line">    text-decoration: none !important; </span><br><span class="line">&#125;</span><br><span class="line">.external-link-left &#123; </span><br><span class="line">    width: 60px; </span><br><span class="line">    height: 60px; </span><br><span class="line">    background-size: cover; </span><br><span class="line">    background-position: center; </span><br><span class="line">    flex-shrink: 0; </span><br><span class="line">&#125;</span><br><span class="line">.external-link-right &#123; </span><br><span class="line">    padding: 8px 12px; </span><br><span class="line">    flex-grow: 1; </span><br><span class="line">    display: flex; </span><br><span class="line">    flex-direction: column; </span><br><span class="line">    justify-content: center; </span><br><span class="line">    overflow: hidden; </span><br><span class="line">&#125;</span><br><span class="line">.external-link-title &#123; </span><br><span class="line">    font-size: 13px; </span><br><span class="line">    font-weight: bold; </span><br><span class="line">    color: var(--text-p1); </span><br><span class="line">    white-space: nowrap; </span><br><span class="line">    overflow: hidden; </span><br><span class="line">    text-overflow: ellipsis; </span><br><span class="line">&#125;</span><br><span class="line">.external-link-right div:last-child &#123; </span><br><span class="line">    font-size: 11px; </span><br><span class="line">    color: var(--text-p3); </span><br><span class="line">    margin-top: 4px; </span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/* --- 底部状态栏 --- */</span><br><span class="line">.talk_bottom &#123;</span><br><span class="line">    display: flex;</span><br><span class="line">    justify-content: space-between;</span><br><span class="line">    align-items: center;</span><br><span class="line">    margin-top: 15px;</span><br><span class="line">    padding-top: 10px;</span><br><span class="line">    border-top: 1px dashed var(--block-border);</span><br><span class="line">&#125;</span><br><span class="line">.talk_tag &#123; </span><br><span class="line">    font-size: 11px; </span><br><span class="line">    color: var(--text-p3); </span><br><span class="line">    background: var(--block-hover); </span><br><span class="line">    padding: 2px 8px; </span><br><span class="line">    border-radius: 4px; </span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.comment_btn &#123; </span><br><span class="line">    color: var(--text-p3) !important; </span><br><span class="line">    padding: 4px 8px; </span><br><span class="line">    border-radius: 6px; </span><br><span class="line">    transition: 0.2s; </span><br><span class="line">    display: flex; </span><br><span class="line">    align-items: center; </span><br><span class="line">    font-size: 16px; </span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.comment_btn:hover &#123; </span><br><span class="line">    background: var(--block-hover); </span><br><span class="line">    color: var(--theme-link) !important; </span><br><span class="line">    transform: scale(1.1); </span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/* 视频容器样式优化 */</span><br><span class="line">.video-wrapper &#123;</span><br><span class="line">    position: relative;</span><br><span class="line">    width: 100%;</span><br><span class="line">    padding-bottom: 56.25%; /* 16:9 比例 */</span><br><span class="line">    height: 0;</span><br><span class="line">    margin: 15px 0;</span><br><span class="line">    overflow: hidden;</span><br><span class="line">    border-radius: 12px;</span><br><span class="line">    background: #000;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.video-wrapper iframe &#123;</span><br><span class="line">    position: absolute;</span><br><span class="line">    top: 0;</span><br><span class="line">    left: 0;</span><br><span class="line">    width: 100%;</span><br><span class="line">    height: 100%;</span><br><span class="line">    border: none;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/* 针对视频元素的特殊处理 - 防止破坏瀑布流 */</span><br><span class="line">.talk_content iframe &#123;</span><br><span class="line">    max-width: 100% !important;</span><br><span class="line">    height: auto !important;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/* 轮播图样式 */</span><br><span class="line">.image-carousel &#123;</span><br><span class="line">  margin-top: 15px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.carousel-container &#123;</span><br><span class="line">  position: relative;</span><br><span class="line">  max-width: 100%;</span><br><span class="line">  overflow: hidden;</span><br><span class="line">  border-radius: 8px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.carousel-container.single-image &#123;</span><br><span class="line">  width: fit-content;</span><br><span class="line">  margin: 0 auto;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.carousel-container.multi-images &#123;</span><br><span class="line">  height: 300px; /* 固定高度，可根据需要调整 */</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.carousel-slide &#123;</span><br><span class="line">  display: none;</span><br><span class="line">  width: 100%;</span><br><span class="line">  height: 100%;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.carousel-slide.active &#123;</span><br><span class="line">  display: block;</span><br><span class="line">  animation: fadeIn 0.5s ease-in-out;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">@keyframes fadeIn &#123;</span><br><span class="line">  from &#123; opacity: 0; &#125;</span><br><span class="line">  to &#123; opacity: 1; &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.carousel-slide img &#123;</span><br><span class="line">  width: 100%;</span><br><span class="line">  height: 100%;</span><br><span class="line">  object-fit: cover;</span><br><span class="line">  display: block;</span><br><span class="line">  border-radius: 8px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.carousel-btn &#123;</span><br><span class="line">  position: absolute;</span><br><span class="line">  top: 50%;</span><br><span class="line">  transform: translateY(-50%);</span><br><span class="line">  background-color: rgba(0, 0, 0, 0.5);</span><br><span class="line">  color: white;</span><br><span class="line">  border: none;</span><br><span class="line">  padding: 12px 16px;</span><br><span class="line">  font-size: 18px;</span><br><span class="line">  cursor: pointer;</span><br><span class="line">  border-radius: 50%;  /* 修改：将边框半径改为50%以形成圆形 */</span><br><span class="line">  z-index: 10;</span><br><span class="line">  transition: background-color 0.3s;</span><br><span class="line">  width: 40px;         /* 新增：设定固定宽度 */</span><br><span class="line">  height: 40px;        /* 新增：设定固定高度 */</span><br><span class="line">  display: flex;       /* 新增：使用flex布局居中内容 */</span><br><span class="line">  align-items: center; /* 新增：垂直居中内容 */</span><br><span class="line">  justify-content: center; /* 新增：水平居中内容 */</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.carousel-btn:hover &#123;</span><br><span class="line">  background-color: rgba(0, 0, 0, 0.8);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.prev-btn &#123;</span><br><span class="line">  left: 10px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.next-btn &#123;</span><br><span class="line">  right: 10px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.carousel-indicators &#123;</span><br><span class="line">  position: absolute;</span><br><span class="line">  bottom: 10px;</span><br><span class="line">  left: 0;</span><br><span class="line">  right: 0;</span><br><span class="line">  display: flex;</span><br><span class="line">  justify-content: center;</span><br><span class="line">  gap: 8px;</span><br><span class="line">  z-index: 10;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.indicator &#123;</span><br><span class="line">  width: 10px;</span><br><span class="line">  height: 10px;</span><br><span class="line">  border-radius: 50%;</span><br><span class="line">  background-color: rgba(255, 255, 255, 0.5);</span><br><span class="line">  cursor: pointer;</span><br><span class="line">  transition: background-color 0.3s;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.indicator.active &#123;</span><br><span class="line">  background-color: white;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/* 响应式调整 */</span><br><span class="line">@media (max-width: 768px) &#123;</span><br><span class="line">  .carousel-container.multi-images &#123;</span><br><span class="line">    height: 200px;</span><br><span class="line">  &#125;</span><br><span class="line">  </span><br><span class="line">  .carousel-btn &#123;</span><br><span class="line">    padding: 8px 12px;</span><br><span class="line">    font-size: 16px;</span><br><span class="line">  &#125;</span><br><span class="line">  </span><br><span class="line">  .prev-btn &#123;</span><br><span class="line">    left: 5px;</span><br><span class="line">  &#125;</span><br><span class="line">  </span><br><span class="line">  .next-btn &#123;</span><br><span class="line">    right: 5px;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/* --- LivePhoto 样式 --- */</span><br><span class="line">.carousel-slide &#123;</span><br><span class="line">    position: relative;</span><br><span class="line">    overflow: hidden;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/* Live 标识 */</span><br><span class="line">.live-badge &#123;</span><br><span class="line">    position: absolute;</span><br><span class="line">    top: 10px;</span><br><span class="line">    left: 10px;</span><br><span class="line">    display: flex;</span><br><span class="line">    align-items: center;</span><br><span class="line">    gap: 4px;</span><br><span class="line">    padding: 4px 8px;</span><br><span class="line">    background: rgba(60, 60, 60, 0.25); /* 25%透明灰色 */</span><br><span class="line">    backdrop-filter: blur(4px);</span><br><span class="line">    color: #fff;</span><br><span class="line">    border-radius: 6px;</span><br><span class="line">    font-size: 11px;</span><br><span class="line">    font-weight: bold;</span><br><span class="line">    z-index: 5;</span><br><span class="line">    pointer-events: none; /* 不干扰点击 */</span><br><span class="line">    transition: opacity 0.3s;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.live-icon &#123;</span><br><span class="line">    width: 14px;</span><br><span class="line">    height: 14px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/* 视频层 */</span><br><span class="line">.live-video &#123;</span><br><span class="line">    position: absolute;</span><br><span class="line">    top: 0;</span><br><span class="line">    left: 0;</span><br><span class="line">    width: 100%;</span><br><span class="line">    height: 100%;</span><br><span class="line">    object-fit: cover;</span><br><span class="line">    opacity: 0; /* 默认隐藏 */</span><br><span class="line">    transition: opacity 0.3s ease;</span><br><span class="line">    z-index: 2;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/* 图片层 */</span><br><span class="line">.carousel-slide img &#123;</span><br><span class="line">    position: relative;</span><br><span class="line">    z-index: 1;</span><br><span class="line">    transition: opacity 0.3s ease;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/* 鼠标悬停时微调标识透明度 */</span><br><span class="line">.carousel-slide.has-live:hover .live-badge &#123;</span><br><span class="line">    opacity: 0.8;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.apple-live-photo-wrapper &#123;</span><br><span class="line">    width: 100%;</span><br><span class="line">    height: 100%;</span><br><span class="line">    min-height: 300px; /* 建议设定一个最小高度 */</span><br><span class="line">    display: flex;</span><br><span class="line">    align-items: center;</span><br><span class="line">    justify-content: center;</span><br><span class="line">    background: #000;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.live-photo-player &#123;</span><br><span class="line">    width: 100%;</span><br><span class="line">    height: 100%;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line"></span><br><span class="line">&lt;script src=&quot;/js/shuoshuo.js&quot;&gt;&lt;/script&gt;</span><br><span class="line">&lt;footer class=&quot;talk-footer&quot; style=&quot;text-align: center; margin: 30px auto; padding: 20px 0; color: var(--text-p3);&quot;&gt;</span><br><span class="line">    &lt;p style=&quot;margin: 0 0 8px 0;&quot;&gt;🌌 宇宙信号持续同步中🌀...&lt;/p&gt;</span><br><span class="line">    &lt;p style=&quot;font-size: 12px; margin: 0 0 8px 0;&quot;&gt;-- 仅显示最近50条说说 --&lt;/p&gt;</span><br><span class="line">    &lt;p style=&quot;font-size: 12px; margin: 0;&quot;&gt;</span><br><span class="line">        那些年小柯的唠叨 —— </span><br><span class="line">        &lt;a href=&quot;https://ech0.koxiuqiu.cn&quot; target=&quot;_blank&quot; style=&quot;</span><br><span class="line">            display: inline-block;</span><br><span class="line">            padding: 3px 10px;</span><br><span class="line">            margin: 0 0 0 4px;</span><br><span class="line">            background-color: #f0f4f9; /* 浅灰蓝背景，可自行修改 */</span><br><span class="line">            color: #2d7ff9; /* 蓝色文字，可自行修改 */</span><br><span class="line">            text-decoration: none;</span><br><span class="line">            border-radius: 4px; /* 圆角，可选 */</span><br><span class="line">            border: 1px solid #e1e8ed; /* 边框，可选 */</span><br><span class="line">        &quot;&gt;查阅历史全部&lt;/a&gt;</span><br><span class="line">    &lt;/p&gt;</span><br><span class="line">&lt;/footer&gt;</span><br></pre></td></tr></table></figure></section>

<h2 id="更换机器"><a href="#更换机器" class="headerlink" title="更换机器"></a>更换机器</h2><p>源服务器目前是不在用自己的某港机器了，转去了<a href="https://laozhang.org/">老张</a>推荐的一个小厂商，我也不推不引流恰饭，就不放什么推广链接了！【<a href="https://www.kooya.hk/">酷鸭数据 - 专业云服务器管理平台</a>】加载可能稍慢或使用上网“加速”工具。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260326231258538.png" alt="" loading="lazy" decoding="async"></figure>

<p>老板也很好说话，由于某港的机器普遍高品质的带宽都很贵也很小，要迁移数据很麻烦，老板特意麻烦了给了临时带宽让我迁移，当然这是带宽有余情况下，不要太打扰或者特殊和恶意占用！毕竟给是情分，不给是本分，不要让大家以为是理所当然！</p>
<h2 id="优化加速"><a href="#优化加速" class="headerlink" title="优化加速"></a>优化加速</h2><p>由于最近一个月我的探针不停的发出警告，貌似十八号左右还掉线了一整天？</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260326231623648.png" alt="" loading="lazy" decoding="async"></figure>

<p>我具体没查到但是加速系统是这样显示的，于是就特别计划了今天去优化这个方面的问题，优化处理之后情况也许会好了很多，这些时日或者周末会腾时间看一下，打算切换一个探针系统来监控。目前还在挑选和学习中~</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260326231739873.png" alt="" loading="lazy" decoding="async"></figure>

<h1 id="最近时日"><a href="#最近时日" class="headerlink" title="最近时日"></a>最近时日</h1><p>最近半年以来，由于被我用烧掉了两张显卡，我一直用的都是某牌子不知道几十年年前的一款九块九包邮无风扇的亮机卡，主要是能完成基本的办公就好了，不过实际上办公也是有些问题的，比如我互访一些博友们只要站点有一点渲染画面就会卡到飞起。所以今年过年，一方面是为了放松能玩一些游戏一方面又是能更好的办公，斥“巨资”花了百来块钱买了张也是十几年前的卡，他就是GTX660。（话说我说这些会侵权么，我很注重这些所以我发表的发言从来很注意用词）</p>
<hr>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260326232006288.png" alt="" loading="lazy" decoding="async"></figure>

<hr>
<p>660 在 2012 年 9 月 6 日推出，属于 600 系列显卡，是 500 系列的升级款、700 系列的前代产品。它用的是台积电 28 纳米工艺，搭配开普勒架构的 GK106 核心，核心基础频率 980MHz，还能自动超频到 1032MHz，核心里的晶体管数量有 25.4 亿个，整体核心面积 221 平方毫米。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260326234441442.png" alt="" loading="lazy" decoding="async"></figure>

<p>在核心运算配置上，它有 960 个流处理器、80 个纹理单元和 24 个光栅单元，还有对应的缓存配置，理论上的像素、纹理处理能力和浮点运算性能，能满足当年主流的游戏和使用需求。显存方面标配 2GB 的 GDDR5 规格，显存等效频率 6Gbps，192 位的显存位宽，能实现 144.2GB&#x2F;s 的显存带宽，数据读写速度在当时属于同级别主流水平。</p>
<p>硬件规格上，它采用 PCIe 3.0 x16 的主板接口，公版的显卡长度 241 毫米，会占用机箱 2 个 PCIe 挡板位，设计功耗 140W，建议搭配 300W 及以上的电源，供电只需要一个 6pin 接口就行。视频输出接口有 2 个 DVI、1 个 HDMI 1.4a 和 1 个 DisplayPort 1.2，能满足不同显示器的连接需求。</p>
<p>图形功能支持上，它兼容 DirectX 12（实际为 11.0 级别）、OpenGL 4.6 等主流图形标准，还有 CUDA 3.0 加速功能，能适配当年的 DX11 游戏和各类图形处理、日常使用场景。（不过我记得好像是不支持DX12的吧，可能是我查询的资料有误）</p>
<hr>
<p>我这款卡用的是双 6Pin 供电，还好我的电源支持三种不然就pass了，虽然忘记了不过应该是500或者550瓦的电源，设计功耗 140 瓦，不过烤完估计只是110瓦左右，开一整天六毛钱的样子。和市面上常见的 2G 显存版不一样，这张商家说的是独立3G，不过我也不知道为什么看是2G显存8G共享，核心频率也比普通版稍高一些，理论性能自然也强了一点点。我原本以为750ti更强没想到是660更强，功耗更高。</p>
<blockquote>
<p>某牛我看了一下额定貌似只有额定300瓦我感觉这才是主要害我烧掉两张显卡的原因，以前一直没有去注意，所以写文期间又准备去买一下新的电源。</p>
</blockquote>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260326234532451.png" alt="" loading="lazy" decoding="async"></figure>

<p>我的整机功耗分析：</p>
<p>CPU：至强 E5-2650 v2（TDP 95W，满载可到110W+）</p>
<p>显卡：GTX 660（TDP 140W，满载可到160W）</p>
<p>其他硬件（主板、内存、硬盘、风扇等）：</p>
<p>约 50W~70W 整机满载功耗 ≈ 95 + 140 + 60 &#x3D; 295W 已经几乎吃满了这颗电源的额定300W极限，而且这还是理想值，没有算上电源老化、转换效率损耗。 </p>
<hr>
<p>下面咱们直接进入游戏实测。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260326232755907.png" alt="" loading="lazy" decoding="async"></figure>

<p>这块 GTX660 毕竟是老卡，驱动早就不再更新，还是用的总裁按的驱动，也不支持新的 DX12，想流畅跑现在最新的大型 3A 游戏肯定不太现实。我个人游戏玩的也不多，网线没拉+下载缓慢，用的杂牌无线网卡，时间问题和硬盘问题也没办法测试太多。</p>
<p>首当其首的就是最近很火的洲。（下载下了十年了用流量半夜才下到70%左右）</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260326232610485.png" alt="" loading="lazy" decoding="async"></figure>

<p><strong>调整分辨率和比例，改成习惯的。设置啊。嗯。取消垂直同步，大概能跑70~80帧</strong></p>
<hr>
<p>然后是近几个月突然间火的腐蚀，中文名就是这个，最近应该是被大陆某大厂代理了就出了国服就火起来了，当然也多了很多素质极差的小孩子，哎。</p>
<p>以前想玩又没电脑，有电脑又没钱买，现在想起来了就宴请一下小时候的自己了。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260326232514442.png" alt="" loading="lazy" decoding="async"></figure>

<blockquote>
<p>腐蚀表现效果</p>
</blockquote>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260326232204095.png" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260326232451814.png" alt="" loading="lazy" decoding="async"></figure>

<p><strong>看得出来。如果画质拉低，分辨率也拉低一些其实还是能玩，大概50-60帧数左右，算是能玩水平，而且对于帧数要求这款类型的游戏一般不需要太高，更讲究人的智慧。</strong></p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260326232847139.png" alt="" loading="lazy" decoding="async"></figure>

<p>即便是某樱花国的H游优化极差的也可以跑一下平均水平（中端显卡跑起来也差不多五六十帧数而已）</p>
<hr>
<p>好了，28号特意来补档~这是众所周知的二游潮，总体体验下来是：不追求极致画质，非常能接受</p>
<p>直接看综合（底下也有）：</p>
<blockquote>
<p>综合来说，分辨率和全屏窗口看自己然后基于“均衡”作为基础，开启FSR（均很貌似默认开），调整帧数上限为60，画面细节和特效中等，阴影调至低，应该是差不多了，一般场景可以<strong>稳定在60帧数</strong>左右了！不行可以调低，至于大世界只能吃着了。毕竟价格和性能成正比，大世界对于操作速度的要求相对也少一些不那么苛刻。</p>
</blockquote>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260328084705909.png" alt="" loading="lazy" decoding="async"></figure>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260328085003447.png" alt="" loading="lazy" decoding="async"></figure>

<p>在追求最好的画质情况下，一般场景能维持到45帧左右的样子，当然，复杂等战斗场景一般都会以这个数额往下10帧。大概35帧。（不过日常没多少人最高画质过吧，毕竟这个条件了不要追求太多，拍照和过剧情的时候24电影级帧数也是能接受范围。）</p>
<p>当然，其实肉眼上看感觉还是画质有些糊的，这时候就得关闭掉一个设置：“FSR”，当然如果你有的话。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260328085114888.png" alt="" loading="lazy" decoding="async"></figure>

<p>关掉之后就可以很明显的感受到画质的提升了，但是代价是有的，需要你把画质相对的调低下一些，我这里习惯都是1600x900，我习惯窗口化，可以改成1920x1200的分辨率再窗口化。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260328085312210.png" alt="" loading="lazy" decoding="async"></figure>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260328085333097.png" alt="" loading="lazy" decoding="async"></figure>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260328085923031.png" alt="" loading="lazy" decoding="async"></figure>

<p>多说无益，直接开始一个视频的简单测验吧（如果觉得糊或者怪异多半是我的录屏软件没有调试好，知道数据和配置就好。</p>
<blockquote>
<p>配置如下全屏1920x1080：基于“均衡”作为基础，并加以修改了；关闭FSR，调整帧数上限为60，画面细节和特效高|，阴影调至低</p>
</blockquote>
<figure class="stellar-video"></figure>

<p>一般场景效果图：</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260328090957559.png" alt="" loading="lazy" decoding="async"></figure>

<p>一般场景，刷日常什么的肯定是足够，不过至于大世界嘛可能是不太友好，需要开低画质运行，不然真就是电影级别帧数。。</p>
<blockquote>
<p>综合来说，分辨率和全屏窗口看自己然后基于“均衡”作为基础，开启FSR（均很貌似默认开），调整帧数上限为60，画面细节和特效中等，阴影调至低，应该是差不多了，一般场景可以<strong>稳定在60帧数</strong>左右了！不行可以调低，至于大世界只能吃着了。毕竟价格和性能成正比，大世界对于操作速度的要求相对也少一些不那么苛刻。</p>
</blockquote>
<hr>
<p>好了，</p>
<p>话接了一茬；又水了。</p>
<blockquote>
<p>兜兜转转，2026已经过去了四分之一了，时间越来越快，我们却期盼着步伐再慢一点，再慢一点…</p>
</blockquote>
]]></content>
  </entry>
  <entry>
    <title>小柯庆生这件事</title>
    <link href="https://koxiuqiu.cn/posts/30p263231/" rel="alternate" type="text/html" />
    <link href="https://cn-nb1.rains3.com/kxqimage/img/20260326223949219.png" rel="enclosure" type="image/png" />
    <id>https://koxiuqiu.cn/posts/30p263231/</id>
    <published>2026-03-23T04:37:00.000Z</published>
    <updated>2026-03-23T09:37:00.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="生活日志" scheme="https://koxiuqiu.cn/categories/%E7%94%9F%E6%B4%BB%E6%97%A5%E5%BF%97/" label="分类" />
    <category term="庆生" scheme="https://koxiuqiu.cn/tags/%E5%BA%86%E7%94%9F/" label="标签" />
    <category term="趣味活动" scheme="https://koxiuqiu.cn/tags/%E8%B6%A3%E5%91%B3%E6%B4%BB%E5%8A%A8/" label="标签" />
    <summary type="text">安然无恙，各位； 有人问开场白的词是不是使用错误了。我还是清楚的，无非是安然无恙和别来无恙，可以查一下。 网易云音乐 打开歌曲 前言 如果说，不算是前两天的特别要申明的域名事件发表的文笔的话，大概有一个月没动态了，突然间时间就过的挺快的，也许是到了人生“中点”吧！ 说实话，其实现在眼皮子还挺累的，还是得注意休息的，昨天没能好好休息睡眠时间不太足够。 庆生 首先，感谢一直陪伴我的朋友们！第一次觉得自己过个生日能这么热闹，同时至今为止也是较为开心的一次。因为往年来说我是比较反感自己过生日的，再加上我会不自觉地在生日那天扫大家的兴致，也不知道是出于什么心理……...</summary>
    <content type="html"><![CDATA[<p>安然无恙，各位；</p>
<p>有人问开场白的词是不是使用错误了。我还是清楚的，无非是安然无恙和别来无恙，可以查一下。</p>
<figure class="stellar-music stellar-music--netease" data-music-service="netease"><div class="stellar-music__player"></div><figcaption class="stellar-music__meta"><span>网易云音乐</span><a href="https://music.163.com/#/song?id=5279993" target="_blank" rel="noopener noreferrer">打开歌曲</a></figcaption></figure>

<hr>
<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>如果说，不算是前两天的特别要申明的域名事件发表的文笔的话，大概有一个月没动态了，突然间时间就过的挺快的，也许是到了人生“中点”吧！</p>
<p>说实话，其实现在眼皮子还挺累的，还是得注意休息的，昨天没能好好休息睡眠时间不太足够。</p>
<h1 id="庆生"><a href="#庆生" class="headerlink" title="庆生"></a>庆生</h1><p>首先，感谢一直陪伴我的朋友们！第一次觉得自己过个生日能这么热闹，同时至今为止也是较为开心的一次。因为往年来说我是比较反感自己过生日的，再加上我会不自觉地在生日那天扫大家的兴致，也不知道是出于什么心理……</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260323122400784.png" alt="" loading="lazy" decoding="async"></figure>

<h2 id="小巧思"><a href="#小巧思" class="headerlink" title="小巧思"></a>小巧思</h2><p>之前看<a href="https://oba.by/">obaby</a>姐过新年给大家发红包的文的时候，觉得很有趣，就把这个小巧思记在心里，当然，我肯定是没那么财大气粗的，求求放过寿星的红包噢~</p>
<p>不过，直接发出来未免也太没趣了，所以我又想到了某个组织圈的谜语环境，就想着哎我要不都借鉴一下，于是…</p>
<blockquote>
<p>🎂 小柯的生日小福利・ZFB口令红包专场</p>
</blockquote>
<ol>
<li>在博客文章里，我会留下<strong>解谜</strong></li>
<li>猜出完整口令后，去ZFB搜「口令红包」输入</li>
<li>先到先得，领完即止，图个开心同乐</li>
</ol>
<h2 id="文雅词"><a href="#文雅词" class="headerlink" title="文雅词"></a>文雅词</h2><section class="stellar-poetry"><header><strong>贺十八初成</strong><span>klcdm</span></header><div class="stellar-poetry__body"><p>小立风华正少年<br>柯心向阳向青天<br>生逢嘉日启新篇</p>
</div></section>

<section class="stellar-poetry"><header><strong>生辰寄意</strong><span>klcdm</span></header><div class="stellar-poetry__body"><p>岁岁今朝逢吉日<br>心怀所愿皆欢快<br>此后年年多喜乐</p>
</div></section>

<h2 id="数学家"><a href="#数学家" class="headerlink" title="数学家"></a>数学家</h2><p>设年龄函数为 f(t)，t 为时间。</p>
<p>若对任意时刻 t，都满足：</p>
<p>limt→∞f(t)&#x3D;18</p>
<blockquote>
<p>请问这段数学表达的浪漫含义是什么？取最有可能的四个字🎂~</p>
</blockquote>
<p><strong>一共是11个字，且没有数字，数字都是汉字，我觉得还是很简单的，难了没办法理解，我也不知道怎么出合适点不然答案不能唯一性，绝对答案，具体时间</strong>：<code>2026年3月23日正午13点00分</code></p>
<blockquote>
<p>我数量设置的比较少，要是这也没领完我算是没救了┭┮﹏┭┮我过气博主了</p>
</blockquote>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260323122256835.png" alt="" loading="lazy" decoding="async"></figure>

<h1 id="杂语"><a href="#杂语" class="headerlink" title="杂语"></a>杂语</h1><p>这段时日，除了庆生喝高了这一块，博客也做了一些改变，我终于！抛弃了之前使用的说说系统，并新增<a href="https://ech0.koxiuqiu.cn/">Home | 那些年小柯的念叨</a>，替代了之前的程序方案，并修改了博客的说说页面噢<a href="https://koxiuqiu.cn/memos/">说说日志 - 朽丘秋雨</a>~感谢<a href="https://koxiuqiu.cn/go.html?u=aHR0cHM6Ly93d3cueHNjbmV0LmNuLw">-Mete0r’s Blog | 壹人小站-</a>提供的二改代码！</p>
<p>目前暂时还没发现还有什么需求要改了，虽然很久折腾一次但是还是不太想过于臃肿，尽量的功能齐全点就行，不然就是之前的下场了数据原地飞升去往灵界。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260323122129005.png" alt="" loading="lazy" decoding="async"></figure>

<blockquote>
<p>这算是一个小小插曲，一些奇思妙想，不算是一次正经的更新~</p>
</blockquote>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260323122231698.png" alt="" loading="lazy" decoding="async"></figure>
]]></content>
  </entry>
  <entry>
    <title>一则域名通知申明</title>
    <link href="https://koxiuqiu.cn/posts/29p263201/" rel="alternate" type="text/html" />
    <link href="https://cn-nb1.rains3.com/kxqimage/img/20260320223655654.png" rel="enclosure" type="image/png" />
    <id>https://koxiuqiu.cn/posts/29p263201/</id>
    <published>2026-03-20T09:15:00.000Z</published>
    <updated>2026-03-20T09:15:00.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="博客开发" scheme="https://koxiuqiu.cn/categories/%E5%8D%9A%E5%AE%A2%E5%BC%80%E5%8F%91/" label="分类" />
    <category term="通知" scheme="https://koxiuqiu.cn/tags/%E9%80%9A%E7%9F%A5/" label="标签" />
    <summary type="text">安然无恙，各位； 大伙别来无恙，这是一则通知申明~ 郑重告知 近来偶闻一事，心中颇不平静，特意撰文，与诸位老友知会一声。（真有文学~） 我的个人博客域名，早在一年之前，便已彻底停用旧时 cc 后缀，转而沿用使用最久、也最为稳定的 cn 后缀域名，也就是诸位当前所见之本站：** koxiuqiu.cn **。若无被恶意反代、镜像劫持等特殊情况，各位认准此域名，便是真正的本站，其余一概不可轻信。 至于原先那个 cc 后缀域名，自弃用之后，便未再留意。直至近日，有老友偶然访问，才惊觉早已易主，被不明人士重新注册。点入一看，内容杂乱不堪，与我昔日博客、与本人立场...</summary>
    <content type="html"><![CDATA[<p>安然无恙，各位；</p>
<p>大伙别来无恙，这是一则通知申明~</p>
<h1 id="郑重告知"><a href="#郑重告知" class="headerlink" title="郑重告知"></a>郑重告知</h1><p>近来偶闻一事，心中颇不平静，特意撰文，与诸位老友知会一声。（真有文学~）</p>
<p>我的个人博客域名，早在一年之前，便已彻底停用旧时 cc 后缀，转而沿用使用最久、也最为稳定的 cn 后缀域名，也就是诸位当前所见之本站：**<a href="https://koxiuqiu.cn/">koxiuqiu.cn</a>**。若无被恶意反代、镜像劫持等特殊情况，各位认准此域名，便是真正的本站，其余一概不可轻信。</p>
<p>至于原先那个 cc 后缀域名，自弃用之后，便未再留意。直至近日，有老友偶然访问，才惊觉早已易主，被不明人士重新注册。点入一看，内容杂乱不堪，与我昔日博客、与本人立场全然无关，甚至观感极差（不良内容和广子），绝非正常博客内容。得知此事时，心中既有愕然，也有几分无奈与不安。</p>
<p><img src="https://cn-nb1.rains3.com/kxqimage/img/20260320224112811.png"></p>
<p>生怕各位进入还以为我转行了，言归正传，肯定是有不少人认为我是这样的了，误信旧址，误入不良站点，既坏了阅读心情，也可能平添不必要的风险。</p>
<p><img src="https://cn-nb1.rains3.com/kxqimage/img/20260320222542728.png"></p>
<p>因此在此郑重恳请各位：若您在自己的博客留言、友情链接、旧日收藏或转载记录里，还留存着我当年留下的 cc域名，烦请多留心一眼，直接删除，或是帮忙修改为现今的 cn域名。小小举手之劳，既能避免后来者误入歧途，也能守住我们这些年以文相识、以诚相交的清净天地。于此，我深表感激。</p>
<p>经此一事，更是感慨万千。</p>
<p>在这个网络日新月异、域名更迭频繁的时代，我们这些写博多年的人，域名早已不只是一串简单的字符，而是一处网上的家，是多年文字的归宿，是与诸位博友相识相知的渡口。当年一时改址，只图稳定省心，却未曾想过，旧域名一旦放手，便如同老宅易主，再归来时早已面目全非，物是人非。昔日自己用心经营的地方，转眼沦为陌生甚至不良的场所，心中难免唏嘘。</p>
<p>也借此提醒各位同好：域名一事，看似小事，实则牵连甚广。若非万不得已，切莫轻易更换。一旦放手，旧址便再不由己控，多年积攒的口碑、痕迹与信任，很可能被他人滥用，让老友困惑，让新人误入。网络虽虚，情谊却真；域名虽小，信誉为重。坚守一处安稳之地，既是对自己文字的负责，也是对一路相伴的博友们，最实在的交代。</p>
<p>愿诸位浏览平安，文字常新，老友不散。</p>
<hr>
<p>最近都在忙这娱乐和测试一些东西，会尽快发表文笔~</p>
]]></content>
  </entry>
  <entry>
    <title>春节游记</title>
    <link href="https://koxiuqiu.cn/posts/28p262261/" rel="alternate" type="text/html" />
    <link href="https://cn-nb1.rains3.com/kxqimage/img/20260227141823125.png" rel="enclosure" type="image/png" />
    <id>https://koxiuqiu.cn/posts/28p262261/</id>
    <published>2026-02-26T09:15:00.000Z</published>
    <updated>2026-02-26T09:15:00.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="生活日志" scheme="https://koxiuqiu.cn/categories/%E7%94%9F%E6%B4%BB%E6%97%A5%E5%BF%97/" label="分类" />
    <category term="日常" scheme="https://koxiuqiu.cn/tags/%E6%97%A5%E5%B8%B8/" label="标签" />
    <category term="游记" scheme="https://koxiuqiu.cn/tags/%E6%B8%B8%E8%AE%B0/" label="标签" />
    <summary type="text">安然无恙，各位； 这只是一篇记录文，对你可能无价值 前言 最近也是开学季了，不知道各位小朋友们大朋友们是否开心？距离上次更新已经又25天的时间了。，今年的春节我个人认为来说算是越来越没什么意思了，我看了看各位的评价，貌似是差不多的，都有目共睹，我起初以为只是个人感觉变了，毕竟随着年纪的增长对待事物的看法也逐渐发生改变，比如我母亲前几年还说着不管我找不找对象的今年就说突然间就觉得我找个对象挺好的，也不知道再过几年会不会变成“你赶紧找一个对象一起过日子”吧。 调整 新加了一个提示，对于我个人的简单记录我都会事先说明，对于测评、评价、体验等将不会说明 节前 枯...</summary>
    <content type="html"><![CDATA[<p>安然无恙，各位；</p>
<blockquote><p>这只是一篇记录文，对你可能无价值</p>
</blockquote>

<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>最近也是开学季了，不知道各位小朋友们大朋友们是否开心？距离上次更新已经又25天的时间了。，今年的春节我个人认为来说算是越来越没什么意思了，我看了看各位的评价，貌似是差不多的，都有目共睹，我起初以为只是个人感觉变了，毕竟随着年纪的增长对待事物的看法也逐渐发生改变，比如我母亲前几年还说着不管我找不找对象的今年就说突然间就觉得我找个对象挺好的，也不知道再过几年会不会变成“你赶紧找一个对象一起过日子”吧。</p>
<h1 id="调整"><a href="#调整" class="headerlink" title="调整"></a>调整</h1><p>新加了一个提示，对于我个人的简单记录我都会事先说明，对于测评、评价、体验等将不会说明</p>
<h1 id="节前"><a href="#节前" class="headerlink" title="节前"></a>节前</h1><p>枯燥ing…</p>
<h2 id="赶路"><a href="#赶路" class="headerlink" title="赶路"></a>赶路</h2><p>其实在上一次更新，也就是2月1日那天凌晨4点5点的就出发了，所以那天也很赶着就发布完立马上车出发了，主要先是去了徐闻，那边有个港口可以直达海口。每隔一年我们都会回一趟母亲的娘家，外公外婆也年纪大了得多回去看看。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226155339145.jpeg" alt="" loading="lazy" decoding="async"></figure>

<p>现在那里好像是说改革了还是说改成什么了，具体是什么我也没了解过，总之有了什么免shui城，等很多国际上的东西，看起来还是很国际化的，甚至可以看到老外和一些直播的人。前段时间还刷到了一个老外的视频，刚好也是我所在的港口不过可惜日期没对上就没遇上，不然高低蹭个镜头上上电视玩玩。</p>
<p>凌晨四五点出发的，坐车坐船在坐车，到了地方之后也差不多是晚上了，收拾一些行李之后舅舅就带着我出门喝茶，俗话讲就是喝奶茶去了。舅很喜欢打老虎机了，也不知道是什么时候喜欢上的，玩的玩完喝的喝完，就拉我出去转悠，最后决定吃个烧烤，吃到一半把家里那几个小的也拉出来吃吃喝喝，这一天也就过去了。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226160220049.jpeg" alt="" loading="lazy" decoding="async"></figure>

<p>由于房间不够，而且也没整什么和老家一样的大别墅，我直接上屋顶的“落地窗”超绝铁皮房里头睡了，下雨觉得意境不错，随便拍了张记录一下，最近还发现一个AI的很好玩的一个加工办法，还是很有意境的。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226160355811.jpeg" alt="" loading="lazy" decoding="async"></figure>

<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">关键词如下：数字CG风格，UES渲染，超广角构图，充满神秘感且细节繁复的云雾缭绕，前景柳叶飞溅点缀，动态模糊，天空被云雾覆盖，狂风肆虐，张力十足，恢宏浩荡，极具压迫感的景象，低饱和，强透视，极具视觉冲击力，光影交错，真实光线反射，墨绿灰白色调，白处冷亮锐利，灰处沉郁如墨，东方古风玄幻修仙氛围，8K 摄影画质</span><br></pre></td></tr></table></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226160655214.png" alt="" loading="lazy" decoding="async"></figure>

<h2 id="爬山"><a href="#爬山" class="headerlink" title="爬山"></a>爬山</h2><p>家里那个小姑娘估计是和爸妈闹腾着要出去拍照打卡，就挑了一个风和日丽的天气准备出去玩一下，到了目的地才发现妹子找的打卡游乐园是所谓的”照骗“，也可能是春节没到没什么人不盈利，又或者是我单方面觉得这地方偏僻还建立在城中村的那种破败感觉，总之就是非常失败。</p>
<p>母亲的鬼点子已生成，说要不去爬上吧，于是乎就去了《海南第一山》。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226160956078.jpeg" alt="" loading="lazy" decoding="async"></figure>

<blockquote>
<p>正在”上山求佛的咪“</p>
</blockquote>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226161053636.jpeg" alt="" loading="lazy" decoding="async"></figure>

<p>站的越高，看的越远，此刻具象化了。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226161545371.png" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226161615403.jpeg" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226161637554.jpeg" alt="" loading="lazy" decoding="async"></figure>

<p>爬到顶之后，就是有一些寺庙了，放生池什么的。只不过我不是信仰者罢了。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226161654709.jpeg" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226161749739.jpeg" alt="" loading="lazy" decoding="async"></figure>

<blockquote>
<p>其实到下山才发现，我们原来只是爬了第一个景点寺庙，后边还有很长一段路，结果我们走错了直接正好走另一条路下山了，但是那帮小的喊着受不了了也就不了了之了，我说呢，第一山怎么会如此矮，怎么会这么少景点，我都没感觉到“第一”的心情。</p>
</blockquote>
<h2 id="抓椰"><a href="#抓椰" class="headerlink" title="抓椰"></a>抓椰</h2><p>要说当地最出名的特产是什么？我想椰子一定有一席之地，是的，我也以第一视角去体验了一番！小孩勿模仿，操作有风险！</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226162140151.png" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226162219643.jpeg" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226162243348.jpeg" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226162305836.jpeg" alt="" loading="lazy" decoding="async"></figure>

<h2 id="上山"><a href="#上山" class="headerlink" title="上山"></a>上山</h2><p>居住的地方是山里，自然而然山里头的植物也很多，什么植物呢？山薯、爬上虎、中药、还有大批大批的人工种植橡树等。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226162655172.jpeg" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226162906538.jpeg" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226162923946.jpeg" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226162944345.jpeg" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226163244600.jpeg" alt="" loading="lazy" decoding="async"></figure>

<h2 id="猪宴"><a href="#猪宴" class="headerlink" title="猪宴"></a>猪宴</h2><p>除夕前夕，就去了亲戚家里头参加莎主宴，莎猪之前来一张十年都不自拍一次的自拍。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226163510456.jpeg" alt="" loading="lazy" decoding="async"></figure>

<p>我是属于那种吃过猪肉没见过猪跑的人群，亲戚家里头就养了很多，三棚小猪两棚老猪大猪，真是可爱的可爱，丑臭的丑臭。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226163647066.jpeg" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226163704021.jpeg" alt="" loading="lazy" decoding="async"></figure>

<blockquote>
<p>由于有很多过程的画面我觉得太可怕了就不放出来了，第一次直观的在现实中看着让我有一些后遗症，我自认为我不圣母的看着还是挺恐怖的，也是是胆小吧。</p>
</blockquote>
<h1 id="节后"><a href="#节后" class="headerlink" title="节后"></a>节后</h1><h2 id="前夕"><a href="#前夕" class="headerlink" title="前夕"></a>前夕</h2><p>除夕前夕反倒是比初一还要热闹点，特别是除夕晚12到初一那段时间。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226163937000.jpeg" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226163953585.jpeg" alt="" loading="lazy" decoding="async"></figure>

<h2 id="回归"><a href="#回归" class="headerlink" title="回归"></a>回归</h2><p>是的，今年基本上没什么拍的，基本上全程在家里宅着，又或者是忘记拍照忘记记录了，远不如往年丰富。</p>
<p>四要说的话，今年倒是在我身上发生了一起很狗血的感情经历吧！，。，算了不说了，怪可笑的~</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226164230845.jpeg" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226164238830.jpeg" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226164353315.png" alt="" loading="lazy" decoding="async"></figure>

<p>路上饿了之后就随便找了一个地方吃饭去了，主要是小孩子们饿坏了（我也饿了）就打算吃完了再继续回去。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226164528976.jpeg" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226164540239.jpeg" alt="" loading="lazy" decoding="async"></figure>

<p>一个月没见咪咪了，好在她还记着我，上来就是喵喵叫着，也胖了很多，就是开始掉毛的季节了疯狂掉毛，梳完毛之后甚至还可以搓成一个毛毛球了都。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226164558086.jpeg" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226164710098.jpeg" alt="" loading="lazy" decoding="async"></figure>

<p>收拾完了之后就上网去了，不过很少去，一是不想浪费钱，二是我的思想观念觉得这些场所是不好的，也算是一种刻板印象封建吧哈哈。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226164828773.jpeg" alt="" loading="lazy" decoding="async"></figure>

<hr>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226164847618.jpeg" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226164947427.jpeg" alt="" loading="lazy" decoding="async"></figure>

<hr>
<h1 id="新形象"><a href="#新形象" class="headerlink" title="新形象"></a>新形象</h1><p>新年新气象，自然我的小角色也要换上新衣，少女成长为成女~</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226171031415.png" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226171055683.png" alt="" loading="lazy" decoding="async"></figure>]]></content>
  </entry>
  <entry>
    <title>简易的链接反馈</title>
    <link href="https://koxiuqiu.cn/posts/27p26211/" rel="alternate" type="text/html" />
    <link href="https://cn-nb1.rains3.com/kxqimage/img/20260201034637918.png" rel="enclosure" type="image/png" />
    <id>https://koxiuqiu.cn/posts/27p26211/</id>
    <published>2026-01-31T19:30:53.000Z</published>
    <updated>2026-01-31T19:30:53.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="博客开发" scheme="https://koxiuqiu.cn/categories/%E5%8D%9A%E5%AE%A2%E5%BC%80%E5%8F%91/" label="分类" />
    <category term="PHP" scheme="https://koxiuqiu.cn/tags/PHP/" label="标签" />
    <category term="小程序" scheme="https://koxiuqiu.cn/tags/%E5%B0%8F%E7%A8%8B%E5%BA%8F/" label="标签" />
    <summary type="text">安然无恙，各位； 前言 由于之前说的反馈方式一直没跟上，今天正好需要整理程序顺便美好和重写了博客一些功能，也顺便简单创建了一个小程序，用于适配上博客的中间页反馈方式。 话说、更新是不是有些勤奋了？（调侃）不过接下来应该是长达近一个月停更了，要回海南过大年，期间会起一些草稿稿子的，今年连存货的习惯都没有了~ 开始 测试环境如下：测试运行环境的版本，推荐使用 Nginx 1.28.0 (理论上低版本也可以) PHP 8.0.26(必要，低于函数有问题) Github暂时下了不支持，往下翻找云盘获取吧！ 环境配置(1) 登录宝塔面板 → 「网站」→ 找到「自己...</summary>
    <content type="html"><![CDATA[<p>安然无恙，各位；</p>
<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>由于之前说的反馈方式一直没跟上，今天正好需要整理程序顺便美好和重写了博客一些功能，也顺便简单创建了一个小程序，用于适配上博客的中间页反馈方式。</p>
<p>话说、更新是不是有些勤奋了？（调侃）不过接下来应该是长达近一个月停更了，要回海南过大年，期间会起一些草稿稿子的，今年连存货的习惯都没有了~</p>
<h1 id="开始"><a href="#开始" class="headerlink" title="开始"></a>开始</h1><p>测试环境如下：测试运行环境的版本，推荐使用</p>
<ul>
<li>Nginx 1.28.0 (理论上低版本也可以)</li>
<li>PHP 8.0.26(必要，低于函数有问题)</li>
</ul>
<p>Github暂时下了不支持，往下翻找云盘获取吧！</p>
<h2 id="环境配置-1"><a href="#环境配置-1" class="headerlink" title="环境配置(1)"></a>环境配置(1)</h2><p>登录宝塔面板 → 「网站」→ 找到「自己的站点」 → 「设置」→ 「伪静态」；</p>
<p>粘贴下方伪静态规则 → 点击「保存F」（宝塔会自动重载 Nginx，无需手动重启）。</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><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></pre></td><td class="code"><pre><span class="line"># 1. 禁止外部访问data目录（无特征404响应，防止目录存在性探测）</span><br><span class="line">location ^~ /data/ &#123;</span><br><span class="line">    deny all;</span><br><span class="line">    return 404;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"># 2. 核心：保护目标接口文件，仅允许本站/本地请求，屏蔽所有特征</span><br><span class="line">location ~* (save_feedback|update_status|edit_feedback)\.php$ &#123;</span><br><span class="line">    # 强校验Referer，仅允许指定域名、本地回环，空Referer拒绝</span><br><span class="line">    if ($http_referer !~* (feedback.koxiuqiu.cn|127.0.0.1|localhost)) &#123;</span><br><span class="line">        return 404;</span><br><span class="line">    &#125;</span><br><span class="line">    # 屏蔽接口访问日志，避免泄露请求信息</span><br><span class="line">    access_log off;</span><br><span class="line">    log_not_found off;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"># 3. 全局安全头（all参数确保错误页、接口响应都携带，无死角防护）</span><br><span class="line">add_header X-Frame-Options &quot;SAMEORIGIN&quot; always;</span><br><span class="line">add_header X-XSS-Protection &quot;1; mode=block&quot; always;</span><br><span class="line">add_header X-Content-Type-Options &quot;nosniff&quot; always;</span><br><span class="line">add_header Referrer-Policy &quot;same-origin&quot; always;</span><br><span class="line">add_header Cache-Control &quot;no-cache, no-store, must-revalidate&quot; always;</span><br><span class="line"></span><br><span class="line"># 4. 禁止访问敏感配置/备份/日志/数据库文件（覆盖更全面的敏感后缀）</span><br><span class="line">location ~* (\.user.ini|\.htaccess|\.htpasswd|\.env.*|\.gitignore|\.bak|\.log|\.sql|\.tar|\.gz|\.zip)$ &#123;</span><br><span class="line">    return 404;</span><br><span class="line">    access_log off;</span><br><span class="line">    log_not_found off;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"># 5. 禁止访问版本控制/开发目录（防止源码、开发配置泄露）</span><br><span class="line">location ~* /(\.git|\.svn|\.idea|node_modules|vendor)/ &#123;</span><br><span class="line">    return 404;</span><br><span class="line">    access_log off;</span><br><span class="line">    log_not_found off;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"># 6. 屏蔽隐藏文件（所有以.开头的文件/目录，如.git/.env）</span><br><span class="line">location ~ /\. &#123;</span><br><span class="line">    return 404;</span><br><span class="line">    access_log off;</span><br><span class="line">    log_not_found off;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"># 7. 屏蔽Nginx版本号（伪静态中全局生效）</span><br><span class="line">server_tokens off;</span><br></pre></td></tr></table></figure>

<h2 id="环境配置-2"><a href="#环境配置-2" class="headerlink" title="环境配置(2)"></a>环境配置(2)</h2><p>修改站点独立配置文件（推荐，如<code>nginx/conf.d/yourdomain.conf</code>）</p>
<p>在你的站点内添加以下规则，<strong>重启 Nginx</strong> 后生效（<code>nginx -s reload</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><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><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br></pre></td><td class="code"><pre><span class="line">server &#123;</span><br><span class="line">    listen 80;</span><br><span class="line">    # 替换为实际域名/IP，多个用空格分隔（如feedback.koxiuqiu.cn 192.168.1.100）</span><br><span class="line">    server_name 你的域名/IP;</span><br><span class="line">    # 替换为项目实际根目录（如/var/www/feedback-system）</span><br><span class="line">    root 你的项目根目录;</span><br><span class="line">    index index.php index.html index.htm;</span><br><span class="line"></span><br><span class="line">    # 全局配置：屏蔽Nginx版本号（避免泄露服务器信息）</span><br><span class="line">    server_tokens off;</span><br><span class="line">    # 全局配置：禁止浏览器解析非标准MIME类型（防XSS/文件注入）</span><br><span class="line">    types_hash_max_size 2048;</span><br><span class="line"></span><br><span class="line">    # 核心防护1：禁止外部访问data目录（彻底防止反馈数据文件泄露）</span><br><span class="line">    location ^~ /data/ &#123;</span><br><span class="line">        deny all;</span><br><span class="line">        # 无特征响应：用404代替403，避免攻击者判断目录存在</span><br><span class="line">        return 404;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    # 核心防护2：强化接口文件保护（目标接口：save_feedback/update_status/edit_feedback.php）</span><br><span class="line">    # 优先级高于普通PHP解析，仅允许本站/本地请求，屏蔽所有错误信息</span><br><span class="line">    location ~* ^/(save_feedback|update_status|edit_feedback)\.php$ &#123;</span><br><span class="line">        # 1. Referer强校验：仅允许指定域名、本地回环请求，空Referer直接拒绝</span><br><span class="line">        if ($http_referer !~* ^(https?://(你的域名/IP|127.0.0.1|localhost)(:\d+)?/|$)) &#123;</span><br><span class="line">            return 404;</span><br><span class="line">        &#125;</span><br><span class="line">        # 2. 禁止直接访问PHP源文件（防源码泄露）</span><br><span class="line">        try_files $uri =404;</span><br><span class="line">        # 3. 屏蔽所有PHP错误/警告输出（核心：避免返回任何PHP相关信息）</span><br><span class="line">        fastcgi_param PHP_VALUE &quot;display_errors=Off; error_reporting=0&quot;;</span><br><span class="line">        # 4. Nginx层面屏蔽错误日志输出（避免接口请求日志泄露敏感信息）</span><br><span class="line">        error_log off;</span><br><span class="line">        # 5. 禁止浏览器缓存接口响应（防止敏感数据被缓存）</span><br><span class="line">        add_header Cache-Control &quot;no-cache, no-store, must-revalidate&quot; always;</span><br><span class="line">        add_header Pragma &quot;no-cache&quot; always;</span><br><span class="line">        add_header Expires &quot;0&quot; always;</span><br><span class="line">        # 6. 常规PHP FastCGI解析配置（保留原有端口，如9000/9001）</span><br><span class="line">        fastcgi_pass 127.0.0.1:9000;</span><br><span class="line">        fastcgi_index index.php;</span><br><span class="line">        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;</span><br><span class="line">        # 传递完整FastCGI参数，避免PHP解析异常</span><br><span class="line">        include fastcgi_params;</span><br><span class="line">        # 屏蔽FastCGI错误响应，统一返回无特征页面</span><br><span class="line">        fastcgi_intercept_errors on;</span><br><span class="line">        error_page 400 403 500 502 =404;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    # 常规PHP文件解析（非目标接口的普通PHP文件，保留基础防护）</span><br><span class="line">    location ~ \.php$ &#123;</span><br><span class="line">        try_files $uri =404; # 防止伪静态绕过，文件不存在直接404</span><br><span class="line">        fastcgi_pass 127.0.0.1:9000;</span><br><span class="line">        fastcgi_index index.php;</span><br><span class="line">        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;</span><br><span class="line">        include fastcgi_params;</span><br><span class="line">        # 屏蔽PHP错误输出</span><br><span class="line">        fastcgi_param PHP_VALUE &quot;display_errors=Off&quot;;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    # 核心防护3：禁止访问隐藏目录/文件（.git/.svn/.env/.htaccess等，优先级高）</span><br><span class="line">    location ~ /\. &#123;</span><br><span class="line">        deny all;</span><br><span class="line">        return 404;</span><br><span class="line">        access_log off;</span><br><span class="line">        log_not_found off;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    # 核心防护4：禁止访问敏感备份/日志/配置文件</span><br><span class="line">    location ~* (\.user.ini|\.htaccess|\.htpasswd|\.env.*|\.gitignore|\.bak|\.log|\.sql|\.tar|\.zip)$ &#123;</span><br><span class="line">        deny all;</span><br><span class="line">        return 404;</span><br><span class="line">        access_log off;</span><br><span class="line">        log_not_found off;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    # 全局安全头：防XSS、点击劫持、MIME嗅探、跨域等（all参数确保错误页也携带头）</span><br><span class="line">    add_header X-Frame-Options &quot;SAMEORIGIN&quot; always;</span><br><span class="line">    add_header X-XSS-Protection &quot;1; mode=block&quot; always;</span><br><span class="line">    add_header X-Content-Type-Options &quot;nosniff&quot; always;</span><br><span class="line">    add_header Referrer-Policy &quot;same-origin&quot; always; # 限制Referer传递范围</span><br><span class="line">    add_header Permissions-Policy &quot;geolocation=(), microphone=(), camera=()&quot; always; # 禁用无用权限</span><br><span class="line"></span><br><span class="line">    # 禁止访问空目录</span><br><span class="line">    autoindex off;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<p>本地临时测试（修改 nginx.conf）</p>
<p>若为本地测试环境（如 Windows&#x2F;Linux 本地 Nginx），可直接在<code>nginx/conf/nginx.conf</code>的<code>http</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><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></pre></td><td class="code"><pre><span class="line">http &#123;</span><br><span class="line">    # 原有配置不变，新增以下规则</span><br><span class="line">    # 全局禁止访问data目录</span><br><span class="line">    location ^~ /data/ &#123;</span><br><span class="line">        deny all;</span><br><span class="line">        return 403;</span><br><span class="line">    &#125;</span><br><span class="line">    # 全局禁止直接访问txt/php接口文件（仅放行入口文件）</span><br><span class="line">    location ~* ^/(save_feedback|update_status|edit_feedback)\.php$ &#123;</span><br><span class="line">        if ($http_referer !~* (localhost|127.0.0.1)) &#123;</span><br><span class="line">            return 403;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    location ~ \.txt$ &#123;</span><br><span class="line">        deny all;</span><br><span class="line">        return 403;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<blockquote>
<p>不懂的可以邮件发送你的配置，小柯会直接修改好再发回去给你！注意，复制的是宝塔面板的站点的站点配置中“配置文件”的内容！伪静态的话…CV过去的道理，不能不会吧？</p>
</blockquote>
<h2 id="上传源码"><a href="#上传源码" class="headerlink" title="上传源码"></a>上传源码</h2><p>云盘获取：<a href="https://panzl.axooo.cn/s/nvx3SJ">feedbacklinks: 一个由世界上最伟大的语言创建的小型链接反馈功能程序。</a></p>
<h2 id="使用教程"><a href="#使用教程" class="headerlink" title="使用教程"></a>使用教程</h2><h3 id="部署步骤"><a href="#部署步骤" class="headerlink" title="部署步骤"></a>部署步骤</h3><ol>
<li>将所有文件上传到服务器的网站根目录（或子目录，如<code>/feedback/</code>）；</li>
<li>手动创建<code>data</code>子目录，确保 PHP 可读写；</li>
<li>无需配置数据库，程序会自动创建<code>data/feedbacks.txt</code>数据文件；</li>
<li>访问前台：<code>http://你的域名/index.php</code>；</li>
<li>访问后台：<code>http://你的域名/admin.php</code>，默认密码<code>admin123</code>（<strong>务必自行修改，PHP几个文件都需要修改，开头可找到</strong>）。</li>
</ol>
<h3 id="关键修改点"><a href="#关键修改点" class="headerlink" title="关键修改点"></a>关键修改点</h3><ol>
<li>后台密码：修改<code>admin.php</code>和<code>update_status.php</code>中的<code>define(&#39;ADMIN_PWD&#39;, &#39;admin123&#39;);</code>为自定义复杂密码；</li>
<li>样式调整：可修改<code>index.php</code>和<code>admin.php</code>中的内嵌 CSS，调整科技感样式（如颜色、阴影、圆角等）；</li>
<li>隐私说明：可修改<code>index.php</code>中的隐私弹窗文案，适配你的业务场景；</li>
<li>表单验证：可在<code>save_feedback.php</code>中调整验证规则（如姓名长度、反馈原因字数限制）。</li>
</ol>
<h1 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h1><p>有什么问题和建议随时可以留言或仓库开启issues进行提交，初次尝试，请保证数据安全，勿要投入大范围的生产环境服务器可另开启服务或主机空间。</p>
<hr>
<p>2026-02-01：发布</p>
<p>2026-02-26：公示栏新增中间页和自动屏蔽链接，防止被搜索引擎因为反馈的违规链接构建在本站html而受到站点惩罚</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260226151344962.png" alt="" loading="lazy" decoding="async"></figure>

<hr>
<blockquote>
<p>最后更新2026.2.26 | 开发：2026.2.1</p>
</blockquote>
<p>如果你不想将链接公布出来又或者觉得链接都是不好的为什么还要游客跳转过去的可以给index.php替换为以下代码：</p>
<section class="stellar-folders"><div class="stellar-folders__label">link.html</div>
<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><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><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html lang=&quot;zh-CN&quot;&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">    &lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;</span><br><span class="line">    &lt;title&gt;朽秋秋雨链接反馈&lt;/title&gt;</span><br><span class="line">    &lt;!-- 核心：禁止搜索引擎抓取整个页面 + 禁止跟踪外链 --&gt;</span><br><span class="line">    &lt;meta name=&quot;robots&quot; content=&quot;noindex, nofollow, noarchive, nosnippet&quot;&gt;</span><br><span class="line">    &lt;meta name=&quot;referrer&quot; content=&quot;no-referrer&quot;&gt;</span><br><span class="line">    &lt;style&gt;</span><br><span class="line">        * &#123;</span><br><span class="line">            margin: 0;</span><br><span class="line">            padding: 0;</span><br><span class="line">            box-sizing: border-box;</span><br><span class="line">            font-family: sans-serif;</span><br><span class="line">        &#125;</span><br><span class="line">        body &#123;</span><br><span class="line">            background: linear-gradient(135deg, #1a202c, #2d3748);</span><br><span class="line">            color: #e2e8f0;</span><br><span class="line">            min-height: 100vh;</span><br><span class="line">            padding: 20px;</span><br><span class="line">        &#125;</span><br><span class="line">        .container &#123;</span><br><span class="line">            max-width: 1000px;</span><br><span class="line">            margin: 0 auto;</span><br><span class="line">            background: rgba(30, 41, 59, 0.8);</span><br><span class="line">            border-radius: 12px;</span><br><span class="line">            box-shadow: 0 0 20px rgba(79, 209, 197, 0.2);</span><br><span class="line">            border: 1px solid rgba(79, 209, 197, 0.3);</span><br><span class="line">            overflow: hidden;</span><br><span class="line">        &#125;</span><br><span class="line">        .header &#123;</span><br><span class="line">            padding: 20px;</span><br><span class="line">            background: linear-gradient(90deg, #2563eb, #0ea5e9);</span><br><span class="line">            text-align: center;</span><br><span class="line">            border-bottom: 1px solid rgba(79, 209, 197, 0.5);</span><br><span class="line">        &#125;</span><br><span class="line">        .header h1 &#123;</span><br><span class="line">            font-size: 24px;</span><br><span class="line">            color: #fff;</span><br><span class="line">            font-weight: 600;</span><br><span class="line">        &#125;</span><br><span class="line">        .btn-group &#123;</span><br><span class="line">            display: flex;</span><br><span class="line">            justify-content: center;</span><br><span class="line">            gap: 20px;</span><br><span class="line">            padding: 20px;</span><br><span class="line">            border-bottom: 1px solid rgba(79, 209, 197, 0.2);</span><br><span class="line">        &#125;</span><br><span class="line">        .btn &#123;</span><br><span class="line">            padding: 10px 30px;</span><br><span class="line">            border: none;</span><br><span class="line">            border-radius: 6px;</span><br><span class="line">            font-size: 16px;</span><br><span class="line">            cursor: pointer;</span><br><span class="line">            transition: all 0.3s;</span><br><span class="line">            color: #fff;</span><br><span class="line">        &#125;</span><br><span class="line">        .btn-submit &#123;</span><br><span class="line">            background: #2563eb;</span><br><span class="line">        &#125;</span><br><span class="line">        .btn-submit:hover &#123;</span><br><span class="line">            background: #0ea5e9;</span><br><span class="line">            box-shadow: 0 0 10px rgba(14, 165, 233, 0.4);</span><br><span class="line">        &#125;</span><br><span class="line">        .btn-board &#123;</span><br><span class="line">            background: #0ea5e9;</span><br><span class="line">        &#125;</span><br><span class="line">        .btn-board:hover &#123;</span><br><span class="line">            background: #2563eb;</span><br><span class="line">            box-shadow: 0 0 10px rgba(37, 99, 235, 0.4);</span><br><span class="line">        &#125;</span><br><span class="line">        .content &#123;</span><br><span class="line">            padding: 30px;</span><br><span class="line">            display: none;</span><br><span class="line">        &#125;</span><br><span class="line">        .content.active &#123;</span><br><span class="line">            display: block;</span><br><span class="line">        &#125;</span><br><span class="line">        /* 提交表单样式 */</span><br><span class="line">        .form-group &#123;</span><br><span class="line">            margin-bottom: 20px;</span><br><span class="line">        &#125;</span><br><span class="line">        .form-group label &#123;</span><br><span class="line">            display: block;</span><br><span class="line">            margin-bottom: 8px;</span><br><span class="line">            color: #94a3b8;</span><br><span class="line">            font-weight: 600;</span><br><span class="line">        &#125;</span><br><span class="line">        .form-control &#123;</span><br><span class="line">            width: 100%;</span><br><span class="line">            padding: 12px 15px;</span><br><span class="line">            background: rgba(15, 23, 42, 0.8);</span><br><span class="line">            border: 1px solid rgba(79, 209, 197, 0.3);</span><br><span class="line">            border-radius: 6px;</span><br><span class="line">            color: #e2e8f0;</span><br><span class="line">            font-size: 16px;</span><br><span class="line">        &#125;</span><br><span class="line">        .form-control:focus &#123;</span><br><span class="line">            outline: none;</span><br><span class="line">            border-color: #0ea5e9;</span><br><span class="line">            box-shadow: 0 0 10px rgba(14, 165, 233, 0.4);</span><br><span class="line">        &#125;</span><br><span class="line">        textarea.form-control &#123;</span><br><span class="line">            min-height: 120px;</span><br><span class="line">            resize: vertical;</span><br><span class="line">        &#125;</span><br><span class="line">        .submit-btn &#123;</span><br><span class="line">            width: 100%;</span><br><span class="line">            padding: 12px;</span><br><span class="line">            background: #2563eb;</span><br><span class="line">            color: #fff;</span><br><span class="line">            border: none;</span><br><span class="line">            border-radius: 6px;</span><br><span class="line">            font-size: 18px;</span><br><span class="line">            cursor: pointer;</span><br><span class="line">            transition: all 0.3s;</span><br><span class="line">        &#125;</span><br><span class="line">        .submit-btn:hover &#123;</span><br><span class="line">            background: #0ea5e9;</span><br><span class="line">            box-shadow: 0 0 15px rgba(79, 209, 197, 0.5);</span><br><span class="line">        &#125;</span><br><span class="line">        /* 公示板核心样式 */</span><br><span class="line">        .board-content &#123;</span><br><span class="line">            padding: 10px;</span><br><span class="line">        &#125;</span><br><span class="line">        .feedback-item &#123;</span><br><span class="line">            background: rgba(15, 23, 42, 0.7);</span><br><span class="line">            border-radius: 8px;</span><br><span class="line">            padding: 20px;</span><br><span class="line">            margin-bottom: 20px;</span><br><span class="line">            border: 1px solid rgba(79, 209, 197, 0.3);</span><br><span class="line">            box-shadow: 0 2px 8px rgba(0,0,0,0.2);</span><br><span class="line">        &#125;</span><br><span class="line">        .feedback-header &#123;</span><br><span class="line">            display: flex;</span><br><span class="line">            flex-wrap: wrap;</span><br><span class="line">            gap: 12px;</span><br><span class="line">            margin-bottom: 15px;</span><br><span class="line">            align-items: center;</span><br><span class="line">            padding-bottom: 10px;</span><br><span class="line">            border-bottom: 1px dashed rgba(79, 209, 197, 0.4);</span><br><span class="line">        &#125;</span><br><span class="line">        .feedback-name &#123;</span><br><span class="line">            color: #0ea5e9;</span><br><span class="line">            font-weight: 600;</span><br><span class="line">            font-size: 16px;</span><br><span class="line">        &#125;</span><br><span class="line">        .feedback-status &#123;</span><br><span class="line">            padding: 4px 10px;</span><br><span class="line">            border-radius: 20px;</span><br><span class="line">            font-size: 12px;</span><br><span class="line">            font-weight: 600;</span><br><span class="line">        &#125;</span><br><span class="line">        .status-processing &#123;</span><br><span class="line">            background: rgba(234, 179, 8, 0.2);</span><br><span class="line">            color: #fbbf24;</span><br><span class="line">            border: 1px dashed #fbbf24;</span><br><span class="line">        &#125;</span><br><span class="line">        .status-handled &#123;</span><br><span class="line">            background: rgba(34, 197, 94, 0.2);</span><br><span class="line">            color: #22c55e;</span><br><span class="line">            border: 1px dashed #22c55e;</span><br><span class="line">        &#125;</span><br><span class="line">        .status-unneeded &#123;</span><br><span class="line">            background: rgba(156, 163, 175, 0.2);</span><br><span class="line">            color: #9ca3af;</span><br><span class="line">            border: 1px dashed #9ca3af;</span><br><span class="line">        &#125;</span><br><span class="line">        .feedback-time &#123;</span><br><span class="line">            color: #94a3b8;</span><br><span class="line">            font-size: 12px;</span><br><span class="line">        &#125;</span><br><span class="line">        .feedback-content-item &#123;</span><br><span class="line">            border: 1px dashed rgba(79, 209, 197, 0.5);</span><br><span class="line">            border-radius: 6px;</span><br><span class="line">            padding: 10px 12px;</span><br><span class="line">            margin-bottom: 10px;</span><br><span class="line">            background: rgba(20, 33, 61, 0.5);</span><br><span class="line">        &#125;</span><br><span class="line">        .feedback-content-item:last-child &#123;</span><br><span class="line">            margin-bottom: 0;</span><br><span class="line">        &#125;</span><br><span class="line">        .item-label &#123;</span><br><span class="line">            color: #94a3b8;</span><br><span class="line">            font-size: 14px;</span><br><span class="line">            margin-right: 8px;</span><br><span class="line">            font-weight: 600;</span><br><span class="line">        &#125;</span><br><span class="line">        .masked-url &#123;</span><br><span class="line">            color: #38bdf8;</span><br><span class="line">            font-size: 14px;</span><br><span class="line">            word-break: break-all;</span><br><span class="line">        &#125;</span><br><span class="line">        .feedback-reason &#123;</span><br><span class="line">            font-size: 14px;</span><br><span class="line">            line-height: 1.5;</span><br><span class="line">            white-space: pre-line;</span><br><span class="line">            color: #e2e8f0;</span><br><span class="line">        &#125;</span><br><span class="line">        /* 图片预览样式（仅展示，无URL） */</span><br><span class="line">        .feedback-img &#123;</span><br><span class="line">            position: relative;</span><br><span class="line">        &#125;</span><br><span class="line">        .img-preview &#123;</span><br><span class="line">            max-width: 200px;</span><br><span class="line">            max-height: 180px;</span><br><span class="line">            border-radius: 6px;</span><br><span class="line">            border: 1px solid rgba(79, 209, 197, 0.5);</span><br><span class="line">            pointer-events: none; /* 彻底禁止点击 */</span><br><span class="line">        &#125;</span><br><span class="line">        .img-tip &#123;</span><br><span class="line">            font-size: 12px;</span><br><span class="line">            color: #94a3b8;</span><br><span class="line">            margin-top: 5px;</span><br><span class="line">        &#125;</span><br><span class="line">        .no-data &#123;</span><br><span class="line">            text-align: center;</span><br><span class="line">            padding: 40px;</span><br><span class="line">            color: #94a3b8;</span><br><span class="line">            font-size: 16px;</span><br><span class="line">        &#125;</span><br><span class="line">        /* 提示框样式 */</span><br><span class="line">        .alert &#123;</span><br><span class="line">            padding: 15px;</span><br><span class="line">            border-radius: 6px;</span><br><span class="line">            margin-bottom: 20px;</span><br><span class="line">            display: none;</span><br><span class="line">        &#125;</span><br><span class="line">        .alert-success &#123;</span><br><span class="line">            background: rgba(34, 197, 94, 0.2);</span><br><span class="line">            color: #22c55e;</span><br><span class="line">            border: 1px solid rgba(34, 197, 94, 0.3);</span><br><span class="line">        &#125;</span><br><span class="line">        .alert-error &#123;</span><br><span class="line">            background: rgba(239, 68, 68, 0.2);</span><br><span class="line">            color: #ef4444;</span><br><span class="line">            border: 1px solid rgba(239, 68, 68, 0.3);</span><br><span class="line">        &#125;</span><br><span class="line">        @media (max-width: 768px) &#123;</span><br><span class="line">            .btn-group &#123;</span><br><span class="line">                flex-direction: column;</span><br><span class="line">            &#125;</span><br><span class="line">            .btn &#123;</span><br><span class="line">                width: 100%;</span><br><span class="line">            &#125;</span><br><span class="line">            .feedback-header &#123;</span><br><span class="line">                flex-direction: column;</span><br><span class="line">                align-items: flex-start;</span><br><span class="line">                gap: 8px;</span><br><span class="line">            &#125;</span><br><span class="line">            .img-preview &#123;</span><br><span class="line">                max-width: 100%;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">    &lt;div class=&quot;container&quot;&gt;</span><br><span class="line">        &lt;div class=&quot;header&quot;&gt;</span><br><span class="line">            &lt;h1&gt;朽秋秋雨链接反馈&lt;/h1&gt;</span><br><span class="line">        &lt;/div&gt;</span><br><span class="line">        &lt;div class=&quot;btn-group&quot;&gt;</span><br><span class="line">            &lt;button class=&quot;btn btn-submit&quot; onclick=&quot;showTab(&#x27;submit&#x27;)&quot;&gt;提交反馈&lt;/button&gt;</span><br><span class="line">            &lt;button class=&quot;btn btn-board&quot; onclick=&quot;showTab(&#x27;board&#x27;)&quot;&gt;处理公示板&lt;/button&gt;</span><br><span class="line">        &lt;/div&gt;</span><br><span class="line"></span><br><span class="line">        &lt;!-- 提交反馈表单 --&gt;</span><br><span class="line">        &lt;div class=&quot;content active&quot; id=&quot;submit-content&quot;&gt;</span><br><span class="line">            &lt;div class=&quot;alert&quot; id=&quot;submit-alert&quot;&gt;&lt;/div&gt;</span><br><span class="line">            &lt;form id=&quot;feedback-form&quot;&gt;</span><br><span class="line">                &lt;div class=&quot;form-group&quot;&gt;</span><br><span class="line">                    &lt;label for=&quot;name&quot;&gt;姓名 *&lt;/label&gt;</span><br><span class="line">                    &lt;input type=&quot;text&quot; class=&quot;form-control&quot; id=&quot;name&quot; name=&quot;name&quot; required placeholder=&quot;请输入您的姓名&quot;&gt;</span><br><span class="line">                &lt;/div&gt;</span><br><span class="line">                &lt;div class=&quot;form-group&quot;&gt;</span><br><span class="line">                    &lt;label for=&quot;email&quot;&gt;联系邮箱 *&lt;/label&gt;</span><br><span class="line">                    &lt;input type=&quot;email&quot; class=&quot;form-control&quot; id=&quot;email&quot; name=&quot;email&quot; required placeholder=&quot;请输入您的邮箱，方便回复&quot;&gt;</span><br><span class="line">                &lt;/div&gt;</span><br><span class="line">                &lt;div class=&quot;form-group&quot;&gt;</span><br><span class="line">                    &lt;label for=&quot;link&quot;&gt;反馈链接 *&lt;/label&gt;</span><br><span class="line">                    &lt;input type=&quot;url&quot; class=&quot;form-control&quot; id=&quot;link&quot; name=&quot;link&quot; required placeholder=&quot;请输入反馈相关的链接（如网页、商品链接等）&quot;&gt;</span><br><span class="line">                &lt;/div&gt;</span><br><span class="line">                &lt;div class=&quot;form-group&quot;&gt;</span><br><span class="line">                    &lt;label for=&quot;reason&quot;&gt;反馈原因 *&lt;/label&gt;</span><br><span class="line">                    &lt;textarea class=&quot;form-control&quot; id=&quot;reason&quot; name=&quot;reason&quot; required placeholder=&quot;请详细描述您的反馈原因，换行请按Enter&quot;&gt;&lt;/textarea&gt;</span><br><span class="line">                &lt;/div&gt;</span><br><span class="line">                &lt;div class=&quot;form-group&quot;&gt;</span><br><span class="line">                    &lt;label for=&quot;img_url&quot;&gt;截图URL（选填）&lt;/label&gt;</span><br><span class="line">                    &lt;input type=&quot;url&quot; class=&quot;form-control&quot; id=&quot;img_url&quot; name=&quot;img_url&quot; placeholder=&quot;请输入截图的在线URL（如阿里云OSS、腾讯云COS链接）&quot;&gt;</span><br><span class="line">                &lt;/div&gt;</span><br><span class="line">                &lt;button type=&quot;submit&quot; class=&quot;submit-btn&quot;&gt;提交反馈&lt;/button&gt;</span><br><span class="line">            &lt;/form&gt;</span><br><span class="line">        &lt;/div&gt;</span><br><span class="line"></span><br><span class="line">        &lt;!-- 公示板内容（彻底屏蔽所有完整URL） --&gt;</span><br><span class="line">        &lt;div class=&quot;content&quot; id=&quot;board-content&quot;&gt;</span><br><span class="line">            &lt;div class=&quot;board-content&quot; id=&quot;feedback-list&quot;&gt;</span><br><span class="line">                加载中...</span><br><span class="line">            &lt;/div&gt;</span><br><span class="line">        &lt;/div&gt;</span><br><span class="line">    &lt;/div&gt;</span><br><span class="line">    &lt;br&gt;</span><br><span class="line">&lt;div style=&quot;text-align: center; width: 100%;&quot;&gt;</span><br><span class="line">  获取本页面源码：返回博客搜索【链接反馈】</span><br><span class="line">&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">    &lt;script&gt;</span><br><span class="line">        // URL脱敏函数（仅保留协议+屏蔽域名，无任何完整URL展示）</span><br><span class="line">        function maskUrl(url) &#123;</span><br><span class="line">            if (!url) return &#x27;无&#x27;;</span><br><span class="line">            try &#123;</span><br><span class="line">                const parsed = new URL(url);</span><br><span class="line">                const host = parsed.host;</span><br><span class="line">                const hostParts = host.split(&#x27;.&#x27;);</span><br><span class="line">                let maskedHost = host;</span><br><span class="line">                </span><br><span class="line">                if (hostParts.length &gt;= 2) &#123;</span><br><span class="line">                    const mainHost = hostParts[hostParts.length - 2];</span><br><span class="line">                    const suffix = hostParts[hostParts.length - 1];</span><br><span class="line">                    const prefix = hostParts.slice(0, hostParts.length - 2).join(&#x27;.&#x27;);</span><br><span class="line">                    </span><br><span class="line">                    // 强化屏蔽：仅保留前2位，其余全屏蔽（更彻底）</span><br><span class="line">                    const maskedMain = mainHost.length &gt; 2 </span><br><span class="line">                        ? mainHost.substring(0, 2) + &#x27;*&#x27;.repeat(mainHost.length - 2) </span><br><span class="line">                        : &#x27;*&#x27;.repeat(3);</span><br><span class="line">                    </span><br><span class="line">                    maskedHost = prefix ? `$&#123;prefix.substring(0, 2)&#125;*.$&#123;maskedMain&#125;.$&#123;suffix&#125;` : `$&#123;maskedMain&#125;.$&#123;suffix&#125;`;</span><br><span class="line">                &#125; else &#123;</span><br><span class="line">                    maskedHost = &#x27;*&#x27;.repeat(6); // 非标准域名直接显示6个*</span><br><span class="line">                &#125;</span><br><span class="line">                </span><br><span class="line">                // 仅返回屏蔽后的域名，不包含路径/参数</span><br><span class="line">                return `$&#123;parsed.protocol&#125;//$&#123;maskedHost&#125;`;</span><br><span class="line">            &#125; catch (e) &#123;</span><br><span class="line">                return &#x27;已屏蔽链接&#x27;;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        // 切换标签页</span><br><span class="line">        function showTab(tab) &#123;</span><br><span class="line">            document.querySelectorAll(&#x27;.content&#x27;).forEach(el =&gt; el.classList.remove(&#x27;active&#x27;));</span><br><span class="line">            if (tab === &#x27;submit&#x27;) &#123;</span><br><span class="line">                document.getElementById(&#x27;submit-content&#x27;).classList.add(&#x27;active&#x27;);</span><br><span class="line">            &#125; else if (tab === &#x27;board&#x27;) &#123;</span><br><span class="line">                document.getElementById(&#x27;board-content&#x27;).classList.add(&#x27;active&#x27;);</span><br><span class="line">                loadBoardData();</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        // 加载公示板数据（核心：仅传递脱敏后URL，不处理/存储完整URL）</span><br><span class="line">        function loadBoardData() &#123;</span><br><span class="line">            const feedbackList = document.getElementById(&#x27;feedback-list&#x27;);</span><br><span class="line">            feedbackList.innerHTML = &#x27;加载中...&#x27;;</span><br><span class="line">            </span><br><span class="line">            fetch(&#x27;save_feedback.php?action=get_board&#x27;)</span><br><span class="line">                .then(res =&gt; &#123;</span><br><span class="line">                    if (!res.ok) throw new Error(&#x27;服务器响应异常&#x27;);</span><br><span class="line">                    return res.json();</span><br><span class="line">                &#125;)</span><br><span class="line">                .then(result =&gt; &#123;</span><br><span class="line">                    if (result.code === 200) &#123;</span><br><span class="line">                        renderBoard(result.data);</span><br><span class="line">                    &#125; else &#123;</span><br><span class="line">                        feedbackList.innerHTML = `&lt;div class=&quot;no-data&quot;&gt;数据加载失败：$&#123;result.msg&#125;&lt;/div&gt;`;</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125;)</span><br><span class="line">                .catch(err =&gt; &#123;</span><br><span class="line">                    console.error(&#x27;加载失败：&#x27;, err);</span><br><span class="line">                    feedbackList.innerHTML = &#x27;&lt;div class=&quot;no-data&quot;&gt;数据加载失败，请稍后重试&lt;/div&gt;&#x27;;</span><br><span class="line">                &#125;);</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        // 渲染公示板数据（彻底移除所有完整URL，仅展示脱敏结果）</span><br><span class="line">        function renderBoard(data) &#123;</span><br><span class="line">            const feedbackList = document.getElementById(&#x27;feedback-list&#x27;);</span><br><span class="line">            </span><br><span class="line">            if (data.length === 0) &#123;</span><br><span class="line">                feedbackList.innerHTML = &#x27;&lt;div class=&quot;no-data&quot;&gt;暂无反馈记录&lt;/div&gt;&#x27;;</span><br><span class="line">                return;</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            let html = &#x27;&#x27;;</span><br><span class="line">            data.forEach((item, index) =&gt; &#123;</span><br><span class="line">                const statusText = item.status === &#x27;processing&#x27; ? &#x27;正在处理&#x27; : (item.status === &#x27;handled&#x27; ? &#x27;已处理&#x27; : &#x27;无需处理&#x27;);</span><br><span class="line">                const statusClass = item.status === &#x27;processing&#x27; ? &#x27;status-processing&#x27; : (item.status === &#x27;handled&#x27; ? &#x27;status-handled&#x27; : &#x27;status-unneeded&#x27;);</span><br><span class="line">                // 仅使用脱敏后的URL，不引用任何完整URL</span><br><span class="line">                const maskedLink = maskUrl(item.link);</span><br><span class="line">                const maskedImgUrl = maskUrl(item.img_url);</span><br><span class="line">                </span><br><span class="line">                // 图片仅展示，不显示任何URL（包括脱敏后的），仅提示“已屏蔽”</span><br><span class="line">                const imgHtml = item.img_url </span><br><span class="line">                    ? `</span><br><span class="line">                        &lt;div class=&quot;feedback-content-item feedback-img&quot;&gt;</span><br><span class="line">                            &lt;span class=&quot;item-label&quot;&gt;截图预览：&lt;/span&gt;&lt;br&gt;</span><br><span class="line">                            &lt;img src=&quot;$&#123;item.img_url&#125;&quot; alt=&quot;反馈截图&quot; class=&quot;img-preview&quot;&gt;</span><br><span class="line">                            &lt;div class=&quot;img-tip&quot;&gt;截图URL已屏蔽&lt;/div&gt;</span><br><span class="line">                        &lt;/div&gt;</span><br><span class="line">                      ` </span><br><span class="line">                    : &#x27;&#x27;;</span><br><span class="line">                </span><br><span class="line">                html += `</span><br><span class="line">                    &lt;div class=&quot;feedback-item&quot; data-id=&quot;$&#123;item.id&#125;&quot;&gt;</span><br><span class="line">                        &lt;div class=&quot;feedback-header&quot;&gt;</span><br><span class="line">                            &lt;span class=&quot;feedback-name&quot;&gt;反馈人：$&#123;item.name&#125;&lt;/span&gt;</span><br><span class="line">                            &lt;span class=&quot;feedback-status $&#123;statusClass&#125;&quot;&gt;$&#123;statusText&#125;&lt;/span&gt;</span><br><span class="line">                            &lt;span class=&quot;feedback-time&quot;&gt;提交时间：$&#123;item.create_time&#125;&lt;/span&gt;</span><br><span class="line">                        &lt;/div&gt;</span><br><span class="line">                        &lt;!-- 仅展示脱敏后的屏蔽域名，无任何完整URL --&gt;</span><br><span class="line">                        &lt;div class=&quot;feedback-content-item feedback-link&quot;&gt;</span><br><span class="line">                            &lt;span class=&quot;item-label&quot;&gt;反馈链接：&lt;/span&gt;</span><br><span class="line">                            &lt;span class=&quot;masked-url&quot;&gt;$&#123;maskedLink&#125;&lt;/span&gt;</span><br><span class="line">                        &lt;/div&gt;</span><br><span class="line">                        &lt;!-- 反馈原因 --&gt;</span><br><span class="line">                        &lt;div class=&quot;feedback-content-item feedback-reason&quot;&gt;</span><br><span class="line">                            &lt;span class=&quot;item-label&quot;&gt;反馈原因：&lt;/span&gt;</span><br><span class="line">                            $&#123;item.reason.replace(/\n/g, &#x27;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#x27;)&#125;</span><br><span class="line">                        &lt;/div&gt;</span><br><span class="line">                        &lt;!-- 截图预览（无URL展示） --&gt;</span><br><span class="line">                        $&#123;imgHtml&#125;</span><br><span class="line">                    &lt;/div&gt;</span><br><span class="line">                `;</span><br><span class="line">            &#125;);</span><br><span class="line"></span><br><span class="line">            feedbackList.innerHTML = html;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        // 提交反馈表单</span><br><span class="line">        document.getElementById(&#x27;feedback-form&#x27;).addEventListener(&#x27;submit&#x27;, function(e) &#123;</span><br><span class="line">            e.preventDefault();</span><br><span class="line">            const alertBox = document.getElementById(&#x27;submit-alert&#x27;);</span><br><span class="line">            alertBox.style.display = &#x27;none&#x27;;</span><br><span class="line"></span><br><span class="line">            const formData = new FormData(this);</span><br><span class="line">            fetch(&#x27;save_feedback.php&#x27;, &#123;</span><br><span class="line">                method: &#x27;POST&#x27;,</span><br><span class="line">                body: formData</span><br><span class="line">            &#125;)</span><br><span class="line">            .then(res =&gt; res.json())</span><br><span class="line">            .then(data =&gt; &#123;</span><br><span class="line">                alertBox.className = data.code === 200 ? &#x27;alert alert-success&#x27; : &#x27;alert alert-error&#x27;;</span><br><span class="line">                alertBox.textContent = data.msg;</span><br><span class="line">                alertBox.style.display = &#x27;block&#x27;;</span><br><span class="line">                if (data.code === 200) this.reset();</span><br><span class="line">            &#125;)</span><br><span class="line">            .catch(err =&gt; &#123;</span><br><span class="line">                alertBox.className = &#x27;alert alert-error&#x27;;</span><br><span class="line">                alertBox.textContent = &#x27;提交失败，请稍后重试&#x27;;</span><br><span class="line">                alertBox.style.display = &#x27;block&#x27;;</span><br><span class="line">            &#125;);</span><br><span class="line">        &#125;);</span><br><span class="line"></span><br><span class="line">        // 页面加载默认显示提交反馈</span><br><span class="line">        window.onload = () =&gt; showTab(&#x27;submit&#x27;);</span><br><span class="line">    &lt;/script&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure></section>]]></content>
  </entry>
  <entry>
    <title>舟终末地初玩体验</title>
    <link href="https://koxiuqiu.cn/posts/26p261291/" rel="alternate" type="text/html" />
    <link href="https://cn-nb1.rains3.com/kxqimage/img/20260130015924172.png" rel="enclosure" type="image/png" />
    <id>https://koxiuqiu.cn/posts/26p261291/</id>
    <published>2026-01-29T14:50:09.000Z</published>
    <updated>2026-01-29T14:50:09.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="生活日志" scheme="https://koxiuqiu.cn/categories/%E7%94%9F%E6%B4%BB%E6%97%A5%E5%BF%97/" label="分类" />
    <category term="游戏" scheme="https://koxiuqiu.cn/tags/%E6%B8%B8%E6%88%8F/" label="标签" />
    <category term="游戏体验" scheme="https://koxiuqiu.cn/tags/%E6%B8%B8%E6%88%8F%E4%BD%93%E9%AA%8C/" label="标签" />
    <summary type="text">安然无恙，各位； 前言 这几天半个月以来差不多一直躺在床上，杜老师的新服务器也没玩，自己的工程也不敢了，纯躺。主要是最近发现几本写的还不错的小说，特别是第二本小说是我这么久以来看网文超过200章的唯二能坚持看下去的，三观很正，敢写敢想，只可惜审核原因删减很多，即便听书版本也删减了很多。 好东西就不给大家了解了，我自己先看完先。 期间，阅读软件想免费看不是都要看广子嘛，于是就不停的刷到一个最近挺火的新二游《终末地》，起初还挺厌烦的，这宣发经费也太足了吧，哪个行业都有，不过我本人也是一个算是比较资深的宅货，就慢慢感兴趣准备试一下，今天就简单玩了几个小时。 新...</summary>
    <content type="html"><![CDATA[<p>安然无恙，各位；</p>
<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>这几天半个月以来差不多一直躺在床上，杜老师的新服务器也没玩，自己的工程也不敢了，纯躺。主要是最近发现几本写的还不错的小说，特别是第二本小说是我这么久以来看网文超过200章的唯二能坚持看下去的，三观很正，敢写敢想，只可惜审核原因删减很多，即便听书版本也删减了很多。</p>
<p>好东西就不给大家了解了，我自己先看完先。</p>
<p>期间，阅读软件想免费看不是都要看广子嘛，于是就不停的刷到一个最近挺火的新二游《终末地》，起初还挺厌烦的，这宣发经费也太足了吧，哪个行业都有，不过我本人也是一个算是比较资深的宅货，就慢慢感兴趣准备试一下，今天就简单玩了几个小时。<span class="stellar-blur">新手村还没过，纯属手机落后温度过高只能先停下来降温充电了。</span></p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260130000555468.png" alt="" loading="lazy" decoding="async"></figure>

<hr>
<h1 id="游玩"><a href="#游玩" class="headerlink" title="游玩"></a>游玩</h1><p>其实，为什么一开始会对这个二游会有一定的偏见呢，主要原因其实是网上的舆论导致的，在体验之前，我在互联网上就已经稍稍的关注到这个经历三测的新游了。</p>
<p>主要的评价一般都是：</p>
<blockquote class="stellar-quot"><p>优化差卡顿、无游戏体验等</p></blockquote>

<blockquote>
<p>玩久了容易疲劳的那种精神上的问题等，负面的舆论蜂拥而至。</p>
</blockquote>
<p><strong>注：本次体验仅在互联网上进行少量的理解和初次体验的感觉，客观性更偏向自我</strong></p>
<h2 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h2><figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260130000612842.png" alt="" loading="lazy" decoding="async"></figure>

<section class="stellar-poetry"><header><strong>小柯手机配置</strong><span>iPhone系列footer:大概五年前机型</span></header><div class="stellar-poetry__body"><p>显示屏: 2532x1170 460 ppi<br>内存: 6GB RAM<br>存储: 128GB<br>电池: 2851 毫安(67%健康)</p>
</div></section>

<h2 id="体验"><a href="#体验" class="headerlink" title="体验"></a>体验</h2><p>虽是 2020 年发布的机型，实际体验远不像网上热议的那般卡顿：即便在<strong>低电量、高温、电池健康度偏低</strong>且<strong>边充边玩</strong>的多重考验下，也从少有出现过卡顿、闪退的情况。画质在最高与中等档位间切换，有些图可能会觉得画质较差，仅少数高特效场景会轻微掉帧，这也属于手机高温低电状态下的正常现象，完全可以理解。</p>
<p>目前暂未实测具体升温速度，大致连续使用半小时后机身进入高温状态，后续温度基本稳定在 40-50℃；极端情况下机身会有烫手的触感，但好在我自己有手机壳使用，体感上会舒适不少。<del class="stellar-del">其实还是挺怕给我CPU干虚焊了的…</del></p>
<figure class="stellar-video"></figure>

<p>看得出来，在多重负面BUFF的情况下，表现情况其实也是能看得过去的，并不是网传那样说的优化差劲卡顿，我有些怀疑硬黑有没有真实体验过。<del class="stellar-del">但是其实我也忘记是什么时候什么地方看到的说法，只是隐隐有印象</del></p>
<p>想要更好的游戏体验的话，推荐还是使用PC端去玩吧，比如说雨天湿身效果的设计，和很多细节纹理在移动端应该是都有所缩水，但是也在情理之中，不然移动端得爆炸呀，优化再好也是一个新游，不能强求，或者提升自己的硬件条件吧。</p>
<h2 id="建模"><a href="#建模" class="headerlink" title="建模"></a>建模</h2><p>建模方面来说，我个人觉得是无可挑剔了，也许少部分存在塑料的糙感，但是整体上来看感觉还挺好，能排入我游玩的第一阶梯队伍，我先前都体验过各种二游，比如开放世界的鸣和原，又或者是打击感的鸣和战双，终末地体验上来说干架和玩法上来说对我比较新奇，目前还没摸清楚，简单的了解感觉还不错，还有继续玩下去的想法。</p>
<p>不过听说玩就了容易变成贴吧里头一个很著名的表情包：</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260130004707098.gif" alt="玩了一周后舟友脑内世界变化情况" loading="lazy" decoding="async"><figcaption>玩了一周后舟友脑内世界变化情况</figcaption></figure>

<hr>
<p>在中等画质的情况下，人物建模也不错的，还有很多灵动的小细节，网上最火的不过是背后偷看干员，会回头看你的设计，其他方面的也不错，比如耳朵灵巧的摆动活动等。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260130003841051.png" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260130004114817.png" alt="" loading="lazy" decoding="async"></figure>

<p>在里头也有很多细节设计：例如支线也有配音、动态地图设计NPC都是生动的，甚至还会“到点下班”的设计等。</p>
<p>注：这个不是BUG，是设计师的玩梗！</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260130024802150.png" alt="" loading="lazy" decoding="async"></figure>

<hr>
<p>UI整体布局来说我觉得像是那种想摆脱固有二游的设计但是又没完全摆脱的感觉，总体上来说还是挺有科技感，挺有心意的，商城设计很有未来末土新闻风的感觉。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260130005312490.png" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260130005245123.png" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260130005301309.png" alt="" loading="lazy" decoding="async"></figure>

<p>对于其他方面来说的话，最为广泛的说法就是背包小，我觉得还好，接受范围内，我比较包容；跑图方面单调，不过鉴于之前游玩过的类型而言，其实也还好接受。</p>
<h2 id="实机"><a href="#实机" class="headerlink" title="实机"></a>实机</h2><p>手感方面来说，也很新颖，释放技能等操作设备都会有整动的反馈感，个人觉得虽是无鸣的那种多样的攻击模组和打击手感，但是其实也在接受方面内，算不上网上吐槽的那般不好，可以打上不错的分数。</p>
<figure class="stellar-video"></figure>

<h2 id="剧情"><a href="#剧情" class="headerlink" title="剧情"></a>剧情</h2><p>剧情方面吧，只是了解了最前面的很小一部分，就是很典的救世主苏醒类型？但是由于只是初次体验也无任何了解和去看攻略什么的，对于前作的剧情我也不了解，对前作的2D类型不怎么感兴趣的说。</p>
<p>不过动画看上去还是不错的，我也算是半个剧情党，看着也比较舒服，也没有别人说的慢哄哄的</p>
<h2 id="抽卡"><a href="#抽卡" class="headerlink" title="抽卡"></a>抽卡</h2><p>抽卡算是比较典型的一种角色获取手段了，不过抽卡的机制上比较新奇，对于大部分来说可能算是一个小槽点，我个人觉得还好，也许是暂时还没出现什么特别特别戳我审美点的角色吧，渴望度不算高。</p>
<figure class="stellar-video"></figure>

<h1 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h1><p>整体上来说我觉得质量还是不错的，更多玩法其实我还压根没接触到，听说至少要玩三四十个小时才能进入第二个章节环节，更多的只是给我的第一印象，但是，人不正好就是靠的第一印象么？</p>
<p>可能不太适合一些无法理解复杂程序的人群游玩，缺点方面也比较明显有些许门槛，可以看情况的入手。</p>
<p>不过，想让我本人能长期娱乐的项目来说，还是有待考察，也并不是说推荐大家”哎呀都来玩都来玩“的说法，更多还是得经得起长期考验才行。</p>
<blockquote>
<p>今年第一水，话说是时候把置顶文修改一下了，新年新气象，今年打算修改一下更新的想法和规律。</p>
</blockquote>
<p><a href="https://koxiuqiu.cn/posts/1p2401091/">2026年2月更新日记 - 置顶已更新</a></p>
]]></content>
  </entry>
  <entry>
    <title>给Hexo和留言添加跳转中间页</title>
    <link href="https://koxiuqiu.cn/posts/25p26191/" rel="alternate" type="text/html" />
    <link href="https://cn-nb1.rains3.com/kxqimage/img/20260109193732597.webp" rel="enclosure" type="image/webp" />
    <id>https://koxiuqiu.cn/posts/25p26191/</id>
    <published>2026-01-09T12:17:09.000Z</published>
    <updated>2026-01-31T14:16:14.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="博客开发" scheme="https://koxiuqiu.cn/categories/%E5%8D%9A%E5%AE%A2%E5%BC%80%E5%8F%91/" label="分类" />
    <category term="教程" scheme="https://koxiuqiu.cn/tags/%E6%95%99%E7%A8%8B/" label="标签" />
    <category term="hexo" scheme="https://koxiuqiu.cn/tags/hexo/" label="标签" />
    <summary type="text">安然无恙，各位； 前言 新年快乐！2026年的第一笔~ 这段时间难得的一个五天假期，就打算折腾下自己的小站，改动最多的就是安全方面的事情了，由于个人的想法比较多，过度敏感，对这方面做的比较离谱。 现在经常看着有博友不少因为留言的问题被请去喝茶谈心的，连忙转头看看自己的，发现也有不少奇怪的链接，以前也没注意这方面问题，靠自己一点点审查的话很麻烦，就打算弄一个中间页提示。首先在网上找了一下，发现修改的都是hexo文章和构建页面的跳转中间页，而且有的实现起来有些麻烦，当然是指对于不懂的人来说，有很多专业术语或者是技术层面的代沟的“ 对牛弹琴 ”， 当然，可能没...</summary>
    <content type="html"><![CDATA[<p>安然无恙，各位；</p>
<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>新年快乐！2026年的第一笔~</p>
<p>这段时间难得的一个五天假期，就打算折腾下自己的小站，改动最多的就是安全方面的事情了，由于个人的想法比较多，过度敏感，对这方面做的比较离谱。</p>
<p>现在经常看着有博友不少因为留言的问题被请去喝茶谈心的，连忙转头看看自己的，发现也有不少奇怪的链接，以前也没注意这方面问题，靠自己一点点审查的话很麻烦，就打算弄一个中间页提示。首先在网上找了一下，发现修改的都是hexo文章和构建页面的跳转中间页，而且有的实现起来有些麻烦，当然是指对于不懂的人来说，有很多专业术语或者是技术层面的代沟的“<span class="stellar-blur">对牛弹琴</span>”，</p>
<blockquote><p>当然，可能没什么实际作用，大家当个乐子看看就行。</p>
</blockquote>

<h2 id="插件"><a href="#插件" class="headerlink" title="插件"></a>插件</h2><p>不过还是有一个不错的插件实现的：<a href="https://blog.liushen.fun/posts/1dfd1f41/">安全跳转页面·插件版 | LiuShen’s Blog</a> 柳哥在很早之前就弄了一个插件一键完成的。</p>
<blockquote>
<p>效果如下：支持白昼黑夜主题、</p>
</blockquote>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260109175850005.png" alt="" loading="lazy" decoding="async"></figure>

<p><strong>liushen</strong>的实现方法就不是简单的使用外挂JS进行实现，因为检测的内容是直接对HTML内容进行检测，并不会经过JavaScript，于是liushen就开发了这么一个插件：<a href="https://github.com/willow-god/hexo-safego">hexo-safego</a></p>
<blockquote class="stellar-quot"><p>插件功能</p></blockquote>

<ul>
<li>外部链接跳转：将外部链接替换为自定义的跳转页面，可以自定义文件名称，增加安全性。</li>
<li>灵活配置：支持多个容器，使用css选择器进行选择、支持白名单域名和生效页面路径的配置。</li>
<li>Base64 编码：可选将外链链接编码为Base64加密，在跳转时再使用js转为正常网站地址，增强安全性能。</li>
<li>调试模式：调试模式输出详细信息，便于开发和调试。</li>
<li>自定义页面：支持设置标题、副标题、头像、暗黑模式，如果有前端基础，还可以自己定义跳转页面进行美化。</li>
</ul>
<h2 id="留言"><a href="#留言" class="headerlink" title="留言"></a>留言</h2><p>但是，柳哥的插件只是支持hexo构建的页面，对于twikoo等外嵌的留言系统来说是没作用的，在探索了一下变量，参考了<a href="https://koobai.com/">空白Koobai</a>和<a href="https://www.iamlm.com/">老麦笔记</a>的文章终于造出了一堆史山代码。</p>
<p>期间出现了名字跳转或内容跳转失效，如果使用有问题或者其他系统自行看F12看，这个问题的本质是<strong>昵称链接的 DOM 选择器不匹配</strong> + <strong>异步加载的昵称链接未被脚本捕获</strong>，其他系统我没尝试过各位可以自行测试。</p>
<p>用鼠标点击评论区的昵称，或者<code>Ctrl+Shift+C</code>，此时开发者工具会定位到昵称对应的 HTML 代码；查看昵称链接的 HTML 结构，示例如下（你需要看自己的）:</p>
<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">&lt;a href=&quot;https://koxiuqiu.cn&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;tk-nick tk-nick-link&quot;&gt;&lt;strong&gt;朽丘秋雨&lt;/strong&gt;&lt;/a&gt;</span><br></pre></td></tr></table></figure>

<div class="stellar-checkbox is-checked"><span>可放心食用，一键CV复制粘贴即用！</span></div>

<hr>
<p>实现如下：</p>
<p>前往<code>/source</code>目录创捷一个<code>html</code>文件，命名：<code>link.html</code>，当然你可以自己改：</p>
<aside class="stellar-note">PS：&nbsp;小提示 如果发现<code>hexo g</code> 构建<code>public</code>目录不存在，可以自己再复制一份过去到<code>public</code>也可以，不使用<code>hexo clean</code>就不用操作了，我个人的习惯就是直接<code>hexo g&amp;d</code>两件套了，<code>clean</code>除非改样式一般不用。</aside>

<blockquote>
<p>样式参考的是柳哥的(其实一模一样的样式)，还是挺喜欢柳哥的样式审美的。</p>
</blockquote>
<section class="stellar-folders"><div class="stellar-folders__label">link.html</div>
<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><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><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html lang=&quot;zh&quot;&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;</span><br><span class="line">    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,initial-scale=1,user-scalable=no&quot;&gt;</span><br><span class="line">    &lt;link rel=&quot;icon&quot; href=&quot;/xiaoke.png&quot; type=&quot;image/x-icon&quot;&gt;</span><br><span class="line">    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;</span><br><span class="line">    &lt;meta name=&quot;robots&quot; content=&quot;noindex, nofollow&quot;/&gt;</span><br><span class="line">    &lt;title&gt;😃页面加载中，请稍候...&lt;/title&gt;</span><br><span class="line">    &lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line">        body &#123;</span><br><span class="line">            overflow: hidden;</span><br><span class="line">            height: 100vh;</span><br><span class="line">            width: 100vw;</span><br><span class="line">            margin: 0;</span><br><span class="line">            padding: 0;</span><br><span class="line">            transition: background 0.3s ease-in-out;</span><br><span class="line">        &#125;</span><br><span class="line">        .container &#123;</span><br><span class="line">            display: flex;</span><br><span class="line">            align-items: center;</span><br><span class="line">            justify-content: center;</span><br><span class="line">            height: 100%;</span><br><span class="line">            width: 100%;</span><br><span class="line">            margin: 0;</span><br><span class="line">            flex-direction: column;</span><br><span class="line">        &#125;</span><br><span class="line">        .avatar-placeholder, .avatar &#123;</span><br><span class="line">            width: 100px;</span><br><span class="line">            height: 100px;</span><br><span class="line">            border-radius: 50%;</span><br><span class="line">            margin-bottom: 15px;</span><br><span class="line">            display: block;</span><br><span class="line">        &#125;</span><br><span class="line">        .avatar &#123;</span><br><span class="line">            display: none;</span><br><span class="line">        &#125;</span><br><span class="line">        .description &#123;</span><br><span class="line">            font-size: 20px;</span><br><span class="line">            font-weight: 600;</span><br><span class="line">        &#125;</span><br><span class="line">        .subtitle &#123;</span><br><span class="line">            font-size: 15px;</span><br><span class="line">            margin-bottom: 20px;</span><br><span class="line">            color: #C4C4C4;</span><br><span class="line">        &#125;</span><br><span class="line">        .loading &#123;</span><br><span class="line">            text-align: center;</span><br><span class="line">            padding: 30px;</span><br><span class="line">            border-radius: 25px;</span><br><span class="line">            animation: fadein 2s;</span><br><span class="line">            width: 450px;</span><br><span class="line">            max-width: 80%;</span><br><span class="line">            transition: all 0.3s ease-in-out;</span><br><span class="line">        &#125;</span><br><span class="line">        @keyframes fadein &#123;</span><br><span class="line">            from &#123; opacity: 0 &#125;</span><br><span class="line">            to &#123; opacity: 1 &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        .content &#123;</span><br><span class="line">            margin-bottom: 20px;</span><br><span class="line">        &#125;</span><br><span class="line">        .url-text &#123;</span><br><span class="line">            margin-bottom: 10px;</span><br><span class="line">            font-size: 16px;</span><br><span class="line">            letter-spacing: 1px;</span><br><span class="line">        &#125;</span><br><span class="line">        .jump-url &#123;</span><br><span class="line">            position: relative;</span><br><span class="line">            font-size: 20px;</span><br><span class="line">            display: block;</span><br><span class="line">            margin-top: 5px;</span><br><span class="line">            margin-bottom: 25px;</span><br><span class="line">            padding: 15px;</span><br><span class="line">            border-radius: 18px;</span><br><span class="line">            height: 25px;</span><br><span class="line">            white-space: nowrap;</span><br><span class="line">            overflow: hidden;</span><br><span class="line">            text-overflow: ellipsis;</span><br><span class="line">        &#125;</span><br><span class="line">        .copy-btn-container &#123;</span><br><span class="line">            position: absolute;</span><br><span class="line">            display: flex;</span><br><span class="line">            align-items: center;</span><br><span class="line">            right: 10px;</span><br><span class="line">            top: 50%;</span><br><span class="line">            transform: translateY(-50%);</span><br><span class="line">            height: 100%;</span><br><span class="line">            width: 63px;</span><br><span class="line">            flex-direction: row-reverse;</span><br><span class="line">        &#125;</span><br><span class="line">        .copy-btn &#123;</span><br><span class="line">            width: 40px;</span><br><span class="line">            height: 40px;</span><br><span class="line">            border-radius: 12px;</span><br><span class="line">            border: 1px solid #a4a4a4;</span><br><span class="line">            transition: all 0.3s ease-in-out;</span><br><span class="line">            cursor: pointer;</span><br><span class="line">        &#125;</span><br><span class="line">        .copy-btn-container svg &#123;</span><br><span class="line">            width: 25px;</span><br><span class="line">            height: 25px;</span><br><span class="line">            fill: #888;</span><br><span class="line">        &#125;</span><br><span class="line">        .countdown-text &#123;</span><br><span class="line">            margin-top: 12px;</span><br><span class="line">            font-size: 12px;</span><br><span class="line">        &#125;</span><br><span class="line">        .button-container &#123;</span><br><span class="line">            display: flex;</span><br><span class="line">            justify-content: center;</span><br><span class="line">            gap: 20%;</span><br><span class="line">            margin-top: 20px;</span><br><span class="line">        &#125;</span><br><span class="line">        .button &#123;</span><br><span class="line">            padding: 10px 20px;</span><br><span class="line">            border-radius: 16px;</span><br><span class="line">            border: none;</span><br><span class="line">            cursor: pointer;</span><br><span class="line">            font-size: 16px;</span><br><span class="line">            width: 120px;</span><br><span class="line">            height: 40px;</span><br><span class="line">        &#125;</span><br><span class="line">        .cancel-button &#123;</span><br><span class="line">            color: black;</span><br><span class="line">        &#125;</span><br><span class="line">        .confirm-button &#123;</span><br><span class="line">            color: white;</span><br><span class="line">        &#125;</span><br><span class="line">        /* 白天模式 */</span><br><span class="line">        body.light &#123;</span><br><span class="line">            background: linear-gradient(135deg, #E9E9E9, #FFFFFF);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .loading &#123;</span><br><span class="line">            border: 1px solid #ccc;</span><br><span class="line">            background: rgba(255,255,255,0.7);</span><br><span class="line">            box-shadow: 0 16px 32px rgba(0,0,0,0.1);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .loading:hover &#123;</span><br><span class="line">            box-shadow: 0 16px 32px rgba(0,0,0,0.2);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .url-text &#123;</span><br><span class="line">            color: #333;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .jump-url &#123;</span><br><span class="line">            border: 1px solid #ccc;</span><br><span class="line">            background-color: #F7F9FE;</span><br><span class="line">            color: #333;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .copy-btn-container &#123;</span><br><span class="line">            background: linear-gradient(to left, #F7F9FE 75%,transparent 100%);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .copy-btn &#123;</span><br><span class="line">            background-color: #F7F9FE;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .copy-btn:hover &#123;</span><br><span class="line">            box-shadow: 0 16px 32px rgba(100,100,100,0.2);</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .countdown-text &#123;</span><br><span class="line">            color: #515151;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .cancel-button &#123;</span><br><span class="line">            background-color: #a6e3e9;</span><br><span class="line">        &#125;</span><br><span class="line">        body.light .confirm-button &#123;</span><br><span class="line">            background-color: #3fc1c9;</span><br><span class="line">        &#125;</span><br><span class="line">        /* 黑夜模式 */</span><br><span class="line">        body.dark &#123;</span><br><span class="line">            background: linear-gradient(135deg, #364f6b, #222831);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .loading &#123;</span><br><span class="line">            border: 1px solid #777;</span><br><span class="line">            background: #393e46;</span><br><span class="line">            color: #EFEFEF;</span><br><span class="line">            box-shadow: 0 16px 32px rgba(100,100,100,0.1);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .loading:hover &#123;</span><br><span class="line">            box-shadow: 0 16px 32px rgba(100,100,100,0.2);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .description &#123;</span><br><span class="line">            color: #F3F3F3;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .url-text, body.dark .countdown-text &#123;</span><br><span class="line">            color: #EFEFEF;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .jump-url &#123;</span><br><span class="line">            border: 1px solid #777;</span><br><span class="line">            background-color: #333;</span><br><span class="line">            color: #EFEFEF;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .copy-btn-container &#123;</span><br><span class="line">            background: linear-gradient(to left, #333 75%,transparent 100%);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .copy-btn &#123;</span><br><span class="line">            background-color: #222831;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .copy-btn:hover &#123;</span><br><span class="line">            box-shadow: 0 16px 32px rgba(100,100,100,0.2);</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .cancel-button &#123;</span><br><span class="line">            background-color: #872C2C;</span><br><span class="line">            color: #FFF;</span><br><span class="line">        &#125;</span><br><span class="line">        body.dark .confirm-button &#123;</span><br><span class="line">            background-color: #28566F;</span><br><span class="line">            color: #FFF;</span><br><span class="line">        &#125;</span><br><span class="line">    &lt;/style&gt;</span><br><span class="line">    &lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line">        // 适配Stellar主题的日夜模式</span><br><span class="line">        function detectStellarTheme() &#123;</span><br><span class="line">            const body = document.body;</span><br><span class="line">            const theme = localStorage.getItem(&#x27;theme&#x27;);</span><br><span class="line">            if (theme === &#x27;dark&#x27; || (!theme &amp;&amp; window.matchMedia(&#x27;(prefers-color-scheme: dark)&#x27;).matches)) &#123;</span><br><span class="line">                body.classList.add(&#x27;dark&#x27;);</span><br><span class="line">                body.classList.remove(&#x27;light&#x27;);</span><br><span class="line">            &#125; else &#123;</span><br><span class="line">                body.classList.add(&#x27;light&#x27;);</span><br><span class="line">                body.classList.remove(&#x27;dark&#x27;);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        // 获取URL参数</span><br><span class="line">        function GetQueryString(name) &#123;</span><br><span class="line">            var reg = new RegExp(&quot;(^|&amp;)&quot; + name + &quot;=([^&amp;]*)(&amp;|$)&quot;, &quot;i&quot;);</span><br><span class="line">            var r = window.location.search.substr(1).match(reg);</span><br><span class="line">            return r ? decodeURIComponent(r[2]) : null; // 改用decodeURIComponent，兼容URL编码的参数</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        // 安全解码URL参数（优化容错性）</span><br><span class="line">        function decodeSafeUrlParam(paramStr) &#123;</span><br><span class="line">            try &#123;</span><br><span class="line">                // 修复base64替换逻辑，添加补全等号的处理</span><br><span class="line">                const base64 = paramStr.replace(/-/g, &#x27;+&#x27;).replace(/_/g, &#x27;/&#x27;);</span><br><span class="line">                // 补全base64缺失的等号</span><br><span class="line">                const paddedBase64 = base64.padEnd(base64.length + (4 - base64.length % 4) % 4, &#x27;=&#x27;);</span><br><span class="line">                const decodedBinary = atob(paddedBase64);</span><br><span class="line">                const decoded = decodeURIComponent(Array.from(decodedBinary).map(c =&gt; </span><br><span class="line">                    &#x27;%&#x27; + (&#x27;00&#x27; + c.charCodeAt(0).toString(16)).slice(-2)</span><br><span class="line">                ).join(&#x27;&#x27;));</span><br><span class="line">                return decoded;</span><br><span class="line">            &#125; catch (e) &#123;</span><br><span class="line">                console.warn(&#x27;URL解码失败，使用原始值:&#x27;, e);</span><br><span class="line">                return paramStr;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        // 跳转逻辑</span><br><span class="line">        let jump_url = GetQueryString(&#x27;url&#x27;);</span><br><span class="line">        // 解码处理</span><br><span class="line">        if (jump_url) &#123;</span><br><span class="line">            jump_url = decodeSafeUrlParam(jump_url);</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        // 修复核心：正确创建正则表达式对象，添加i忽略大小写</span><br><span class="line">        const UrlReg = new RegExp(&#x27;^((http|https|thunder|qqdl|ed2k|Flashget|qbrowser|ftp|rtsp|mms)://)&#x27;, &#x27;i&#x27;);</span><br><span class="line">        // 验证URL合法性</span><br><span class="line">        if (!jump_url || !UrlReg.test(jump_url)) &#123; // 改用test方法更高效</span><br><span class="line">            document.title = &#x27;参数错误，正在返回首页...&#x27;;</span><br><span class="line">            jump_url = location.origin;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        // 手动跳转函数（仅修改此处，从新建窗口改为当前窗口）</span><br><span class="line">        function jump() &#123;</span><br><span class="line">            location.href = jump_url; // 当前窗口直接跳转</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        // 关闭/返回逻辑</span><br><span class="line">        function closeWindow() &#123;</span><br><span class="line">            function isWeChat() &#123;</span><br><span class="line">                return /MicroMessenger/i.test(navigator.userAgent);</span><br><span class="line">            &#125;</span><br><span class="line">            function isQQ() &#123;</span><br><span class="line">                return /QQ/i.test(navigator.userAgent) &amp;&amp; !/MicroMessenger/i.test(navigator.userAgent);</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            if (isWeChat()) &#123;</span><br><span class="line">                if (typeof WeixinJSBridge !== &quot;undefined&quot;) &#123;</span><br><span class="line">                    WeixinJSBridge.call(&#x27;closeWindow&#x27;);</span><br><span class="line">                &#125; else &#123;</span><br><span class="line">                    document.addEventListener(&#x27;WeixinJSBridgeReady&#x27;, function () &#123;</span><br><span class="line">                        WeixinJSBridge.call(&#x27;closeWindow&#x27;);</span><br><span class="line">                    &#125;, &#123; once: true &#125;);</span><br><span class="line">                    setTimeout(() =&gt; fallbackBack(), 500);</span><br><span class="line">                &#125;</span><br><span class="line">            &#125; else if (isQQ()) &#123;</span><br><span class="line">                try &#123;</span><br><span class="line">                    if (typeof mqq !== &quot;undefined&quot; &amp;&amp; mqq.ui &amp;&amp; mqq.ui.closeWebView) &#123;</span><br><span class="line">                        mqq.ui.closeWebView();</span><br><span class="line">                    &#125; else &#123;</span><br><span class="line">                        fallbackBack();</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125; catch (e) &#123;</span><br><span class="line">                    fallbackBack();</span><br><span class="line">                &#125;</span><br><span class="line">            &#125; else &#123;</span><br><span class="line">                fallbackBack();</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        // 返回兜底函数</span><br><span class="line">        function fallbackBack() &#123;</span><br><span class="line">            if (window.history.length &lt;= 1) &#123;</span><br><span class="line">                window.location.href = location.origin;</span><br><span class="line">            &#125; else &#123;</span><br><span class="line">                window.history.back();</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        // 复制链接功能</span><br><span class="line">        function copyToClipboard() &#123;</span><br><span class="line">            const urlText = document.getElementById(&#x27;jump-url-text&#x27;).textContent;</span><br><span class="line">            // 改用Clipboard API，替代过时的execCommand</span><br><span class="line">            navigator.clipboard.writeText(urlText).then(() =&gt; &#123;</span><br><span class="line">                alert(&#x27;链接已复制到剪贴板！&#x27;);</span><br><span class="line">            &#125;).catch(() =&gt; &#123;</span><br><span class="line">                // 降级方案</span><br><span class="line">                const tempInput = document.createElement(&#x27;input&#x27;);</span><br><span class="line">                tempInput.value = urlText;</span><br><span class="line">                document.body.appendChild(tempInput);</span><br><span class="line">                tempInput.select();</span><br><span class="line">                document.execCommand(&#x27;copy&#x27;);</span><br><span class="line">                document.body.removeChild(tempInput);</span><br><span class="line">                alert(&#x27;链接已复制到剪贴板！&#x27;);</span><br><span class="line">            &#125;);</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        // 加载头像</span><br><span class="line">        async function loadAvatar() &#123;</span><br><span class="line">            const avatarImg = document.querySelector(&#x27;.avatar&#x27;);</span><br><span class="line">            const placeholder = document.querySelector(&#x27;.avatar-placeholder&#x27;);</span><br><span class="line">            const img = new Image();</span><br><span class="line">            img.src = &#x27;/xiaoke.png&#x27;;</span><br><span class="line">            img.onload = function () &#123;</span><br><span class="line">                avatarImg.src = img.src;</span><br><span class="line">                avatarImg.style.display = &#x27;block&#x27;;</span><br><span class="line">                placeholder.style.display = &#x27;none&#x27;;</span><br><span class="line">            &#125;</span><br><span class="line">            img.onerror = function() &#123;</span><br><span class="line">                placeholder.style.display = &#x27;none&#x27;; // 加载失败隐藏占位符</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        // 页面初始化</span><br><span class="line">        window.addEventListener(&#x27;load&#x27;, function () &#123;</span><br><span class="line">            detectStellarTheme();</span><br><span class="line">            loadAvatar();</span><br><span class="line">            // 显示目标链接</span><br><span class="line">            const jumpUrlElement = document.getElementById(&#x27;jump-url-text&#x27;);</span><br><span class="line">            jumpUrlElement.textContent = jump_url;</span><br><span class="line">            // 更新提示文本</span><br><span class="line">            const countdownText = document.querySelector(&#x27;.countdown-text&#x27;);</span><br><span class="line">            countdownText.textContent = &quot;💡请自行确认链接安全性，手动点击跳转&quot;;</span><br><span class="line">            // 监听主题切换</span><br><span class="line">            window.addEventListener(&#x27;storage&#x27;, (e) =&gt; &#123;</span><br><span class="line">                if (e.key === &#x27;theme&#x27;) detectStellarTheme();</span><br><span class="line">            &#125;);</span><br><span class="line">        &#125;);</span><br><span class="line">    &lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">    &lt;div class=&quot;container&quot;&gt;</span><br><span class="line">        &lt;div class=&quot;avatar-placeholder&quot;&gt;&lt;/div&gt;</span><br><span class="line">        &lt;img src=&quot;&quot; alt=&quot;头像&quot; class=&quot;avatar&quot;&gt;</span><br><span class="line">        &lt;div class=&quot;description&quot;&gt;朽丘秋雨&lt;/div&gt;</span><br><span class="line">        &lt;div class=&quot;subtitle&quot;&gt;安全提示&lt;/div&gt;</span><br><span class="line">        &lt;div class=&quot;loading&quot;&gt;</span><br><span class="line">            &lt;div class=&quot;content&quot;&gt;</span><br><span class="line">                &lt;div class=&quot;url-text&quot;&gt;您即将离开本站，跳转到：&lt;/div&gt;</span><br><span class="line">                &lt;div class=&quot;jump-url&quot; id=&quot;jump-url&quot;&gt;</span><br><span class="line">                    &lt;span id=&quot;jump-url-text&quot;&gt;&lt;/span&gt;</span><br><span class="line">                    &lt;div class=&quot;copy-btn-container&quot;&gt;</span><br><span class="line">                        &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyToClipboard()&quot;&gt;</span><br><span class="line">                            &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;</span><br><span class="line">                                &lt;path d=&quot;M208 0L332.1 0c12.7 0 24.9 5.1 33.9 14.1l67.9 67.9c9 9 14.1 21.2 14.1 33.9L448 336c0 26.5-21.5 48-48 48l-192 0c-26.5 0-48-21.5-48-48l0-288c0-26.5 21.5-48 48-48zM48 128l80 0 0 64-64 0 0 256 192 0 0-32 64 0 0 48c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 176c0-26.5 21.5-48 48-48z&quot;/&gt;</span><br><span class="line">                            &lt;/svg&gt;</span><br><span class="line">                        &lt;/button&gt;</span><br><span class="line">                    &lt;/div&gt;</span><br><span class="line">                &lt;/div&gt;</span><br><span class="line">            &lt;/div&gt;</span><br><span class="line">            &lt;div class=&quot;countdown-text&quot;&gt;⚡请自行确认链接安全性，手动点击跳转&lt;/div&gt;</span><br><span class="line">            &lt;div class=&quot;button-container&quot;&gt;</span><br><span class="line">                &lt;button class=&quot;button cancel-button&quot; onclick=&quot;closeWindow()&quot;&gt;取消跳转&lt;/button&gt;</span><br><span class="line">                &lt;button class=&quot;button confirm-button&quot; onclick=&quot;jump()&quot;&gt;立即跳转&lt;/button&gt;</span><br><span class="line">            &lt;/div&gt;</span><br><span class="line">        &lt;/div&gt;</span><br><span class="line">    &lt;/div&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure></section>

<p>在<code>source/js</code> <span class="stellar-blur">(没有js文件夹自行创捷)</span> 创捷一个<code>redirect.js</code>和<code>redirect-1.js</code>文件，分别复制一下代码：</p>
<blockquote>
<p>请移至最下方<strong>更新修复</strong>，最新仅需创捷一个<code>redirect.js</code>并引用即可。</p>
</blockquote>
<section class="stellar-folders"><div class="stellar-folders__label">redirect.js</div>
<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><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><span class="line">75</span><br><span class="line">76</span><br></pre></td><td class="code"><pre><span class="line">(function() &#123;</span><br><span class="line">    var siteDomain = window.location.hostname; // 自动获取本站域名，无需手动改</span><br><span class="line">    var redirectPage = &#x27;/link.html&#x27;; // 中间页路径</span><br><span class="line"></span><br><span class="line">    // 核心函数：判断是否为外部链接</span><br><span class="line">    function isExternalLink(url) &#123;</span><br><span class="line">        if (!url || !url.startsWith(&#x27;http&#x27;)) return false;</span><br><span class="line">        // 排除mailto/tel等非网页链接</span><br><span class="line">        if (url.startsWith(&#x27;mailto:&#x27;) || url.startsWith(&#x27;tel:&#x27;)) return false;</span><br><span class="line">        // 排除本站链接</span><br><span class="line">        var linkHost = new URL(url).hostname.replace(/^www\./, &#x27;&#x27;);</span><br><span class="line">        var siteHost = siteDomain.replace(/^www\./, &#x27;&#x27;);</span><br><span class="line">        return linkHost !== siteHost;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    // 核心函数：替换链接跳转</span><br><span class="line">    function replaceLinkHref(link) &#123;</span><br><span class="line">        var originalHref = link.getAttribute(&#x27;href&#x27;);</span><br><span class="line">        if (isExternalLink(originalHref)) &#123;</span><br><span class="line">            // 保留原链接的target属性（比如_blank）</span><br><span class="line">            var target = link.getAttribute(&#x27;target&#x27;) || &#x27;_self&#x27;;</span><br><span class="line">            // 核心：替换为中间页跳转</span><br><span class="line">            link.setAttribute(&#x27;href&#x27;, redirectPage + &#x27;?url=&#x27; + encodeURIComponent(originalHref));</span><br><span class="line">            // 修复：如果原链接是新窗口打开，保持行为</span><br><span class="line">            link.setAttribute(&#x27;target&#x27;, target);</span><br><span class="line">            // 移除可能的onclick冲突</span><br><span class="line">            link.onclick = null;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    // 核心函数：处理Twikoo评论区链接（解决异步加载问题）</span><br><span class="line">    function handleTwikooLinks() &#123;</span><br><span class="line">        // Stellar主题下Twikoo的实际选择器（必对！）</span><br><span class="line">        var twikooLinkSelectors = [</span><br><span class="line">            &#x27;.tk-content a&#x27;, // 评论内容里的链接（Stellar+Twikoo默认类名）</span><br><span class="line">            &#x27;.tk-nick a&#x27;      // 留言人昵称链接（Stellar+Twikoo默认类名）</span><br><span class="line">        ];</span><br><span class="line"></span><br><span class="line">        // 遍历并替换链接</span><br><span class="line">        twikooLinkSelectors.forEach(function(selector) &#123;</span><br><span class="line">            var links = document.querySelectorAll(selector);</span><br><span class="line">            links.forEach(function(link) &#123;</span><br><span class="line">                replaceLinkHref(link);</span><br><span class="line">            &#125;);</span><br><span class="line">        &#125;);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    // 核心：页面加载后执行 + 监听Twikoo异步加载</span><br><span class="line">    window.onload = function() &#123;</span><br><span class="line">        // 初始加载的评论链接</span><br><span class="line">        handleTwikooLinks();</span><br><span class="line"></span><br><span class="line">        // 监听Twikoo评论区DOM变化（解决异步加载无效问题）</span><br><span class="line">        var twikooContainer = document.getElementById(&#x27;twikoo&#x27;);</span><br><span class="line">        if (twikooContainer) &#123;</span><br><span class="line">            var observer = new MutationObserver(function(mutations) &#123;</span><br><span class="line">                mutations.forEach(function(mutation) &#123;</span><br><span class="line">                    if (mutation.addedNodes.length &gt; 0) &#123;</span><br><span class="line">                        handleTwikooLinks(); // 新评论加载后重新处理链接</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125;);</span><br><span class="line">            &#125;);</span><br><span class="line">            observer.observe(twikooContainer, &#123;</span><br><span class="line">                childList: true,</span><br><span class="line">                subtree: true</span><br><span class="line">            &#125;);</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        // 兼容Twikoo官方回调（双重保障）</span><br><span class="line">        if (window.twikoo) &#123;</span><br><span class="line">            twikoo.init(&#123;</span><br><span class="line">                onCommentLoaded: handleTwikooLinks</span><br><span class="line">            &#125;);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;;</span><br><span class="line">&#125;)();</span><br></pre></td></tr></table></figure>
<div class="stellar-folders__label">redirect-1.js</div>
<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><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></pre></td><td class="code"><pre><span class="line">(function() &#123;</span><br><span class="line">    var siteDomain = window.location.hostname;</span><br><span class="line">    var redirectPage = &#x27;/link.html&#x27;;</span><br><span class="line"></span><br><span class="line">    function isExternalLink(url) &#123;</span><br><span class="line">        if (!url || !url.startsWith(&#x27;http&#x27;)) return false;</span><br><span class="line">        if (url.startsWith(&#x27;mailto:&#x27;) || url.startsWith(&#x27;tel:&#x27;)) return false;</span><br><span class="line">        var linkHost = new URL(url).hostname.replace(/^www\./, &#x27;&#x27;);</span><br><span class="line">        var siteHost = siteDomain.replace(/^www\./, &#x27;&#x27;);</span><br><span class="line">        return linkHost !== siteHost;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    function replaceLinkHref(link) &#123;</span><br><span class="line">        var originalHref = link.getAttribute(&#x27;href&#x27;);</span><br><span class="line">        if (originalHref.includes(redirectPage + &#x27;?url=&#x27;)) return;</span><br><span class="line">        if (isExternalLink(originalHref)) &#123;</span><br><span class="line">            var target = link.getAttribute(&#x27;target&#x27;) || &#x27;_self&#x27;;</span><br><span class="line">            link.setAttribute(&#x27;href&#x27;, redirectPage + &#x27;?url=&#x27; + encodeURIComponent(originalHref));</span><br><span class="line">            link.setAttribute(&#x27;target&#x27;, target);</span><br><span class="line">            link.onclick = null;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    function handleTwikooLinks() &#123;</span><br><span class="line">        var nicknameSelector = &#x27;.tk-nick&#x27;;</span><br><span class="line"></span><br><span class="line">        var twikooLinkSelectors = [</span><br><span class="line">            nicknameSelector,</span><br><span class="line">            &#x27;.tk-content a&#x27;</span><br><span class="line">        ];</span><br><span class="line"></span><br><span class="line">        twikooLinkSelectors.forEach(function(selector) &#123;</span><br><span class="line">            var links = document.querySelectorAll(selector);</span><br><span class="line">            links.forEach(function(link) &#123;</span><br><span class="line">                replaceLinkHref(link);</span><br><span class="line">            &#125;);</span><br><span class="line">        &#125;);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    function initObserver() &#123;</span><br><span class="line">        var twikooContainer = document.getElementById(&#x27;twikoo&#x27;);</span><br><span class="line">        if (!twikooContainer) return;</span><br><span class="line"></span><br><span class="line">        var observer = new MutationObserver(function() &#123;</span><br><span class="line">            handleTwikooLinks();</span><br><span class="line">        &#125;);</span><br><span class="line">        observer.observe(twikooContainer, &#123;</span><br><span class="line">            childList: true,</span><br><span class="line">            subtree: true</span><br><span class="line">        &#125;);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    window.addEventListener(&#x27;load&#x27;, function() &#123;</span><br><span class="line">        handleTwikooLinks();</span><br><span class="line">        initObserver();</span><br><span class="line">    &#125;);</span><br><span class="line">&#125;)();</span><br></pre></td></tr></table></figure></section>

<p>最后引入JS样式，<code>_config.stellar.yml</code>找到<code>inject</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><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">inject:</span><br><span class="line">  head:</span><br><span class="line">    - &lt;link rel=&quot;stylesheet&quot; href=&quot;...&quot;&gt;</span><br><span class="line">  script:</span><br><span class="line">    - ...</span><br><span class="line">    - &lt;script src=&quot;/js/redirect.js&quot;&gt;&lt;/script&gt; #twikoo跳转中间页</span><br><span class="line">    - &lt;script src=&quot;/js/redirect-1.js&quot;&gt;&lt;/script&gt; #twikoo跳转中间页</span><br></pre></td></tr></table></figure>

<hr>
<h1 id="杂记"><a href="#杂记" class="headerlink" title="杂记"></a>杂记</h1><p>后续又调整修复了中间页的BUG，如跳转链接会本站、显示错误…</p>
<p>其他主题通用，只是修改了留言系统部分。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20260109183120083.png" alt="" loading="lazy" decoding="async"></figure>

<p>当然，首先twikoo本身来说不是hexo本身的功能，其实这玩意更多只是给访客一个提示，我能做的就是该提示提示了，有问题把链接留言下来我给他处理了就好！</p>
<p>欢迎交流，写这类的文比较生疏，有什么缺漏问题可以提出。</p>
<h1 id="更新修复"><a href="#更新修复" class="headerlink" title="更新修复"></a>更新修复</h1><p>2026&#x2F;1&#x2F;21：</p>
<ol>
<li><strong>昵称链接（.tk-nick）的处理</strong>：原代码里把 <code>.tk-nick</code> 当成链接，但 <code>.tk-nick</code> 本身可能不是 <code>&lt;a&gt;</code> 标签，或者结构里昵称的链接选择器不对，比如 twikoo 的昵称链接结构可能是 <code>.tk-nick a</code>，因为有时候昵称是放在<code>&lt;span class=&quot;tk-nick&quot;&gt;&lt;a href=&quot;...&quot;&gt;昵称&lt;/a&gt;&lt;/span&gt;</code> 这样的结构里，所以原代码直接选 <code>.tk-nick</code> 可能没选中 <code>&lt;a&gt;</code> 标签，导致昵称的链接没被处理。</li>
<li><strong>内容链接（.tk-content a）的处理</strong>：原代码里的选择器是 <code>.tk-content a</code>，但要确保 twikoo 加载完成后动态生成的内容也被处理，不过现有代码有 MutationObserver，可能是选择器是否准确，或者动态加载时的时机问题。</li>
</ol>
<p>现在分步骤解决：</p>
<p>先修正选择器，确保能正确选中昵称的链接和内容里的链接：</p>
<ol>
<li><strong>昵称链接的选择器</strong>：twikoo 的昵称通常是 <code>&lt;a class=&quot;tk-nick tk-nick-link&quot; href=&quot;...&quot; target=&quot;_blank&quot;&gt;昵称&lt;/a&gt;</code>，或者有时候是 <code>&lt;span class=&quot;tk-nick&quot;&gt;&lt;a ...&gt;...&lt;/a&gt;&lt;/span&gt;</code>，所以正确的选择器应该是 <code>.tk-nick a</code> 或者直接 <code>.tk-nick-link</code>（如果 twikoo 给链接加了这个类）。原代码里用 <code>.tk-nick</code> 可能选中的是外层容器，不是 <code>&lt;a&gt;</code> 标签，所以要改成 <code>.tk-nick a</code> 或者 <code>.tk-nick-link</code>。</li>
<li><strong>内容链接的选择器</strong>：<code>.tk-content a</code> 是对的，但要确保 MutationObserver 能监听到动态加载的内容，并且每次变化后重新处理链接。</li>
</ol>
<section class="stellar-folders"><div class="stellar-folders__label">2026.1.31更新：redirect.js</div>
<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><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">(function() &#123;</span><br><span class="line">    var siteDomain = window.location.hostname;</span><br><span class="line">    var redirectPage = &#x27;/link.html&#x27;;</span><br><span class="line"></span><br><span class="line">    // 判断是否为外部链接</span><br><span class="line">    function isExternalLink(url) &#123;</span><br><span class="line">        if (!url || !url.startsWith(&#x27;http&#x27;)) return false;</span><br><span class="line">        if (url.startsWith(&#x27;mailto:&#x27;) || url.startsWith(&#x27;tel:&#x27;)) return false;</span><br><span class="line">        var linkHost = new URL(url).hostname.replace(/^www\./, &#x27;&#x27;);</span><br><span class="line">        var siteHost = siteDomain.replace(/^www\./, &#x27;&#x27;);</span><br><span class="line">        return linkHost !== siteHost;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    // 替换链接为跳转中间页</span><br><span class="line">    function replaceLinkHref(link) &#123;</span><br><span class="line">        var originalHref = link.getAttribute(&#x27;href&#x27;);</span><br><span class="line">        if (!originalHref) return; // 跳过无 href 的元素</span><br><span class="line">        if (originalHref.includes(redirectPage + &#x27;?url=&#x27;)) return; // 避免重复处理</span><br><span class="line">        if (isExternalLink(originalHref)) &#123;</span><br><span class="line">            var target = link.getAttribute(&#x27;target&#x27;) || &#x27;_blank&#x27;;</span><br><span class="line">            link.setAttribute(&#x27;href&#x27;, redirectPage + &#x27;?url=&#x27; + encodeURIComponent(originalHref));</span><br><span class="line">            link.setAttribute(&#x27;target&#x27;, target);</span><br><span class="line">            if (link.onclick) link.onclick = null; // 移除原有点击事件</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    // 处理 twikoo 评论区的链接</span><br><span class="line">    function handleTwikooLinks() &#123;</span><br><span class="line">        // ✅ 修正选择器：精准命中昵称的 &lt;a&gt; 标签和内容里的链接</span><br><span class="line">        var nicknameLinkSelector = &#x27;.tk-nick a, .tk-nick-link&#x27;; </span><br><span class="line">        var contentLinkSelector = &#x27;.tk-content a&#x27;;</span><br><span class="line"></span><br><span class="line">        var twikooLinkSelectors = [</span><br><span class="line">            nicknameLinkSelector,</span><br><span class="line">            contentLinkSelector</span><br><span class="line">        ];</span><br><span class="line"></span><br><span class="line">        twikooLinkSelectors.forEach(function(selector) &#123;</span><br><span class="line">            var links = document.querySelectorAll(selector);</span><br><span class="line">            links.forEach(function(link) &#123;</span><br><span class="line">                replaceLinkHref(link);</span><br><span class="line">            &#125;);</span><br><span class="line">        &#125;);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    // 监听 twikoo 动态加载的内容</span><br><span class="line">    function initObserver() &#123;</span><br><span class="line">        var twikooContainer = document.getElementById(&#x27;twikoo&#x27;);</span><br><span class="line">        if (!twikooContainer) return;</span><br><span class="line"></span><br><span class="line">        var observer = new MutationObserver(function() &#123;</span><br><span class="line">            handleTwikooLinks();</span><br><span class="line">        &#125;);</span><br><span class="line">        observer.observe(twikooContainer, &#123;</span><br><span class="line">            childList: true,</span><br><span class="line">            subtree: true,</span><br><span class="line">            attributes: true // 监听属性变化，适配动态插入的链接</span><br><span class="line">        &#125;);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    // 页面加载完成后初始化</span><br><span class="line">    window.addEventListener(&#x27;load&#x27;, function() &#123;</span><br><span class="line">        handleTwikooLinks();</span><br><span class="line">        initObserver();</span><br><span class="line">    &#125;);</span><br><span class="line"></span><br><span class="line">    // ✅ 额外：twikoo 评论加载完成的回调（如果你的 twikoo 版本支持）</span><br><span class="line">    if (window.twikoo) &#123;</span><br><span class="line">        twikoo.on(&#x27;commentLoaded&#x27;, handleTwikooLinks);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;)();</span><br></pre></td></tr></table></figure>
<div class="stellar-folders__label">如果想隐藏Markdown跳转按钮可以选择此版本</div>
<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><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">(function() &#123;</span><br><span class="line">    var siteDomain = window.location.hostname;</span><br><span class="line">    var redirectPage = &#x27;/link.html&#x27;;</span><br><span class="line"></span><br><span class="line">    // 判断是否为外部链接</span><br><span class="line">    function isExternalLink(url) &#123;</span><br><span class="line">        if (!url || !url.startsWith(&#x27;http&#x27;)) return false;</span><br><span class="line">        if (url.startsWith(&#x27;mailto:&#x27;) || url.startsWith(&#x27;tel:&#x27;)) return false;</span><br><span class="line">        var linkHost = new URL(url).hostname.replace(/^www\./, &#x27;&#x27;);</span><br><span class="line">        var siteHost = siteDomain.replace(/^www\./, &#x27;&#x27;);</span><br><span class="line">        return linkHost !== siteHost;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    // 替换链接为跳转中间页</span><br><span class="line">    function replaceLinkHref(link) &#123;</span><br><span class="line">        var originalHref = link.getAttribute(&#x27;href&#x27;);</span><br><span class="line">        if (!originalHref) return; // 跳过无 href 的元素</span><br><span class="line">        if (originalHref.includes(redirectPage + &#x27;?url=&#x27;)) return; // 避免重复处理</span><br><span class="line">        if (isExternalLink(originalHref)) &#123;</span><br><span class="line">            var target = link.getAttribute(&#x27;target&#x27;) || &#x27;_blank&#x27;;</span><br><span class="line">            link.setAttribute(&#x27;href&#x27;, redirectPage + &#x27;?url=&#x27; + encodeURIComponent(originalHref));</span><br><span class="line">            link.setAttribute(&#x27;target&#x27;, target);</span><br><span class="line">            if (link.onclick) link.onclick = null; // 移除原有点击事件</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    // 处理 twikoo 评论区的链接</span><br><span class="line">    function handleTwikooLinks() &#123;</span><br><span class="line">        // ✅ 修正选择器：精准命中昵称的 &lt;a&gt; 标签和内容里的链接</span><br><span class="line">        var nicknameLinkSelector = &#x27;.tk-nick a, .tk-nick-link&#x27;; </span><br><span class="line">        var contentLinkSelector = &#x27;.tk-content a&#x27;;</span><br><span class="line"></span><br><span class="line">        var twikooLinkSelectors = [</span><br><span class="line">            nicknameLinkSelector,</span><br><span class="line">            contentLinkSelector</span><br><span class="line">        ];</span><br><span class="line"></span><br><span class="line">        twikooLinkSelectors.forEach(function(selector) &#123;</span><br><span class="line">            var links = document.querySelectorAll(selector);</span><br><span class="line">            links.forEach(function(link) &#123;</span><br><span class="line">                replaceLinkHref(link);</span><br><span class="line">            &#125;);</span><br><span class="line">        &#125;);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    // 监听 twikoo 动态加载的内容</span><br><span class="line">    function initObserver() &#123;</span><br><span class="line">        var twikooContainer = document.getElementById(&#x27;twikoo&#x27;);</span><br><span class="line">        if (!twikooContainer) return;</span><br><span class="line"></span><br><span class="line">        var observer = new MutationObserver(function() &#123;</span><br><span class="line">            handleTwikooLinks();</span><br><span class="line">        &#125;);</span><br><span class="line">        observer.observe(twikooContainer, &#123;</span><br><span class="line">            childList: true,</span><br><span class="line">            subtree: true,</span><br><span class="line">            attributes: true // 监听属性变化，适配动态插入的链接</span><br><span class="line">        &#125;);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    // 页面加载完成后初始化</span><br><span class="line">    window.addEventListener(&#x27;load&#x27;, function() &#123;</span><br><span class="line">        handleTwikooLinks();</span><br><span class="line">        initObserver();</span><br><span class="line">    &#125;);</span><br><span class="line"></span><br><span class="line">    // ✅ 额外：twikoo 评论加载完成的回调（如果你的 twikoo 版本支持）</span><br><span class="line">    if (window.twikoo) &#123;</span><br><span class="line">        twikoo.on(&#x27;commentLoaded&#x27;, handleTwikooLinks);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;)();</span><br></pre></td></tr></table></figure></section>]]></content>
  </entry>
  <entry>
    <title>再见2025，你好2026</title>
    <link href="https://koxiuqiu.cn/posts/24p2512231/" rel="alternate" type="text/html" />
    <link href="https://cn-nb1.rains3.com/kxqimage/img/20251223233901550.webp" rel="enclosure" type="image/webp" />
    <id>https://koxiuqiu.cn/posts/24p2512231/</id>
    <published>2025-12-23T15:43:09.000Z</published>
    <updated>2025-12-23T15:43:09.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="生活日志" scheme="https://koxiuqiu.cn/categories/%E7%94%9F%E6%B4%BB%E6%97%A5%E5%BF%97/" label="分类" />
    <category term="日常" scheme="https://koxiuqiu.cn/tags/%E6%97%A5%E5%B8%B8/" label="标签" />
    <category term="年度总结" scheme="https://koxiuqiu.cn/tags/%E5%B9%B4%E5%BA%A6%E6%80%BB%E7%BB%93/" label="标签" />
    <summary type="text">安然无恙，各位； 这只是一篇记录文，对你可能无价值 最近又有劲爆的大瓜可以吃，可以直接跳过直接吃： 慢脚事件 前言 转眼间12月已过半旬，马上就迎接2026年，说真的，感觉真的时间过得非常非常的快，记得有一种说法，叫做“人的中点”还是怎么说的，简单的意思就是人从有记忆的年龄段到什么什么年龄中间的就是人的中点。 人的中点，例如人到4岁开始记住事情的时候，那么18岁就是人的中点，这时候人就会感觉自己时间过得飞快，或者是代表着你的生活已经高度统一，每天都重复一些事情重复过每一天，从开始的四岁到五岁之间的间隔3厘米，到18岁到19岁间隔的0.5厘米。 雅内定律...</summary>
    <content type="html"><![CDATA[<p>安然无恙，各位；</p>
<blockquote><p>这只是一篇记录文，对你可能无价值</p>
</blockquote>

<p>最近又有劲爆的大瓜可以吃，可以直接跳过直接吃：<span class="stellar-navbar"><a href="https://koxiuqiu.cn/posts/24p2512231/#%E6%9C%80%E6%96%B0%E5%A4%A7%E7%93%9C">慢脚事件</a></span></p>
<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>转眼间12月已过半旬，马上就迎接2026年，说真的，感觉真的时间过得非常非常的快，记得有一种说法，叫做“人的中点”还是怎么说的，简单的意思就是人从有记忆的年龄段到什么什么年龄中间的就是人的中点。</p>
<p>人的中点，例如人到4岁开始记住事情的时候，那么18岁就是人的中点，这时候人就会感觉自己时间过得飞快，或者是代表着你的生活已经高度统一，每天都重复一些事情重复过每一天，从开始的四岁到五岁之间的间隔3厘米，到18岁到19岁间隔的0.5厘米。</p>
<hr>
<section class="stellar-paper"><header><strong>雅内定律</strong><span>AI内容出自 · 某豆AI</span></header><div class="stellar-paper__body">
<p>为此AI给出的回答就是</p>

<p>这种说法源于心理学中关于时间感知的理论，主要基于“雅内定律”和时间感知的对数原理。正确表述如下： </p>

<p>法国心理学家保罗·雅内提出的“雅内定律”指出，人对时间的感知与年龄成反比。基于心理学研究表明，人类对时间的感知并非线性，而是对数递减，年纪越大，时间越“压缩”。 一般来说，人们对童年生活的回忆通常只能追溯至4 - 5岁。在童年时期，由于经历了大量的“第一次”，如第一次骑自行车、第一次独自坐公交等，每个“第一次”都会触发海马体高强度编码，生成丰富细节，构成一段高分辨率记忆，所以大脑会感觉时间过得很慢。例如，5岁时，1年是你生命的1&#x2F;5，仿佛超长待机；而50岁时，1年仅占生命的1&#x2F;50，便会觉得眨眼即逝。 </p>

<p>这种说法源于心理学中关于时间感知的理论，主要基于“雅内定律”和时间感知的对数原理。正确表述如下： 从时间感知的对数原理来看，人生前18年，可能占据主观时间的50%，之后的几十年，虽然实际时间更长，但在感知中却像“压缩包”一样“飞速掠过”。这就是为什么18岁可能被视为“心理中点”，在此之后，人们会感觉时间过得越来越快，也可能会因生活逐渐趋于规律、新鲜事物减少，而觉得生活是在重复，时间间隔在主观感受上变得更短。</p>
</div><footer>仅供参考</footer></section>

<hr>
<p>总而言之言而总之，现在基本上每天高度重合了 <span class="stellar-blur">精神状态良好</span> ，才间接导致我最近状态比较恍惚。</p>
<p>包括但不限于：</p>
<div class="stellar-checkbox is-checked"><span>要写东西的时候又突然无从动笔</span></div>

<div class="stellar-checkbox is-checked"><span>要励志做某些事情的时候又不做</span></div>

<div class="stellar-checkbox is-checked"><span>想要去改变自己自律的时候破戒</span></div>

<h1 id="网站"><a href="#网站" class="headerlink" title="网站"></a>网站</h1><p>首先，我的博客在最近才进行了优化和重新选择了框架主题，简单了解：<a href="https://koxiuqiu.cn/posts/23p251271/">小站最新装修 - 朽丘秋雨</a> 。</p>
<h2 id="计划"><a href="#计划" class="headerlink" title="计划"></a>计划</h2><p>会将收集朋友和访客的一些建议去做优化对策，目前的问题是：</p>
<div class="stellar-checkbox stellar-checkbox--minus stellar-checkbox--yellow is-checked"><span>文章图片点击后无法放大[完成半成]</span></div>

<div class="stellar-checkbox stellar-checkbox--minus stellar-checkbox--yellow is-checked"><span>网站加载的速度严重卡顿[完成半成]</span></div>

<div class="stellar-checkbox is-checked"><span>文章文笔和内容整改删除[基本完成]</span></div>

<div class="stellar-checkbox stellar-checkbox--times stellar-checkbox--red is-checked"><span>友联页面暂时无法适配[不会处理]</span></div>

<div class="stellar-checkbox stellar-checkbox--times stellar-checkbox--red is-checked"><span>说说系统版本无法兼容[不会处理]</span></div>

<blockquote><p>后续再去进行收集和更新处理…</p>
</blockquote>

<p>关于网站加载还在想到底是怎么样才能去很好的解决，<span class="stellar-blur">毕竟我坚持使用本地资源</span> 目前是使用分布式网络进行缓存优化，可能会整一套优化到极致的系统过来进行<span class="stellar-blur">强行</span> 优化，也许会公布给大家一起用，不过不会直接开放，只是个别博友一起用。</p>
<h2 id="目前"><a href="#目前" class="headerlink" title="目前"></a>目前</h2><p>新年新气象，所以打算把今年的一些东西重新制定一下，例如更新频率<span class="stellar-blur stellar-blur--password">[绝对不是懒]</span>、编写年总月总的排版和格式，和每次推送文章的基本要求。12月目前改动就这么点。</p>
<p>目前的话暂时还没有更好的想法，文章的话，为了保持输出的内容不那么水，更新频率就稍稍往后推。之前的很多篇我都做了隐藏处理，所以能看的到和实际上有的相差较大，截止至目前我一共编写了大约六七十有余篇，展示出来的屈指可数，仅仅40余篇。</p>
<blockquote class="stellar-quot"><p>为什么隐藏？</p></blockquote>

<aside class="stellar-note">byd:&nbsp; 我个人的性格是矛盾的，有时候偏激过于小孩子气，有时候也会稳重顾全大局，我都将这些划归于是我的社会经验不足；因此，有些时候的文章会讲话更加直接点，惹来了不少攻击，亦或者是发言不妥当，评论区也是重灾区，我回复留言的时候各种状态下都有，就会有种博主像是多重人格似的 &nbsp;</aside>

<p>所以希望有什么需要提醒一下博主的，不玻璃心 <span class="stellar-blur">还是挺玻璃心的..</span> ，直接明了的批评！</p>
<h1 id="生活"><a href="#生活" class="headerlink" title="生活"></a>生活</h1><h2 id="最新大瓜"><a href="#最新大瓜" class="headerlink" title="最新大瓜"></a>最新大瓜</h2><p>相比大家应该都知道了，在2025年12月22日晚大约九点至凌晨十二点的事情了吧？</p>
<p>什么，不知道，<em class="stellar-emp">那么我简单的说道说道！</em></p>
<hr>
<h3 id="事情起因"><a href="#事情起因" class="headerlink" title="事情起因"></a>事情起因</h3><p>本身来说，在十一十二点的我刚操劳完一天的事情，就打开企鹅日常的吃瓜，突然看到一则消息十分耀眼，慢脚出事了。</p>
<blockquote>
<p>当然由于目前局势不妥，这里一概绕开真实信息进行说明，小柯还是很怂的，如有侵权随时联系邮箱：<a href="mailto:&#103;&#101;&#x6d;&#105;&#105;&#x64;&#x6f;&#122;&#x65;&#110;&#122;&#x40;&#104;&#x6f;&#116;&#109;&#97;&#x69;&#108;&#x2e;&#99;&#x6f;&#x6d;">&#103;&#101;&#x6d;&#105;&#105;&#x64;&#x6f;&#122;&#x65;&#110;&#122;&#x40;&#104;&#x6f;&#116;&#109;&#97;&#x69;&#108;&#x2e;&#99;&#x6f;&#x6d;</a></p>
</blockquote>
<p>具体出事的板块是直播间，突然涌入大量违规内容，各种颜色片子和生理不适的内容涌出，并且审核员集体消失，机器审核也疑似瘫痪，大量小白号以及停更许久的账号出现了无门槛直接直播。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20251223215526893.png" alt="" loading="lazy" decoding="async"></figure>

<p>具体的事情经过在博友圈子里有博主已经生成了一个大概表格图出来了：</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20251223220906604.png" alt="" loading="lazy" decoding="async"></figure>

<p>但是与实际情况来看有小偏差，我看的是11点左右，且我所目击的直播最高人数高达四十万在线人数，大概就是如此。</p>
<blockquote>
<p>官方通知，如有不合适联系博主删除，本文也不是讨论此图片中的平台，请不要对我实施强硬措施）怕没ing…</p>
</blockquote>
<p>图片已下架..</p>
<h3 id="经过猜测"><a href="#经过猜测" class="headerlink" title="经过猜测"></a>经过猜测</h3><p>经过梳理，第一想到的是真的会有大手子去干这种事情么，应该是有内线存在，里应外合一起谋划了这次攻击，在经过一些情况的收集简单的讨论结果。</p>
<blockquote>
<p>大量热度被压，基本上全部视频被删，众多解析博主被封号、删除视频、等操作，我现在想重新回顾和收集也没办法了。</p>
</blockquote>
<p>简单来说，慢脚服务器被攻击团队进行了我们行业熟知的DDoS攻击，疑似将审核API攻击瘫痪，人力资源也没办法处理的来上万场直播，同时出现大量账号通过虚拟号接码注册小白号或者账号被所谓的单点登录，疑似无密匙直接登陆，并且绕过了实名，进行直播。官方为了降低损失直接掐掉全部直播间。</p>
<p>我有朋友玩股的，听说了这件事之后今天就特意去看了一下股价，果然全部都是绿色的，虽然我不懂这些吧，后边搜了一下：2月23日慢脚股价盘中一度下探超5.7%，较前一交易日蒸发约164亿港元。截至今日收盘，跌幅3.52%，总市值2779亿港元。</p>
<p>在技术方面解析起来很简单，无非就是攻击、绕过、事实……攻击成本实在是太低了，如果平台的实名接口是第三方那么安全隐患将会更高。</p>
<h3 id="其他闲言"><a href="#其他闲言" class="headerlink" title="其他闲言"></a>其他闲言</h3><blockquote>
<p>目前而言，对我切切实实造成了一些影响，一整天精神都比较抽象，也可能是因为大平台出现问题所以都在说变天了，有种世界末日来临似的，不过在编写文笔的时候这种不好的精神状态好了很多了，这周多注意休息，少看点负面消息，玩玩游戏，什么都好。</p>
</blockquote>
<p>违规内容，从来都是慢脚身上甩不掉的 “烫手山芋”。这次集中冒头的违规事儿，不过是把平台风控上的窟窿、应急处理跟不上的问题，明晃晃摆到了台面上。翻一翻这两年能查到的消息就知道，慢脚因为这类内容被监管 “敲过警钟”、卷进舆论争议的情况没断过，看网友调侃说这是 “第二季”，看来之前也有过差不多规模的状况？</p>
<p>面对反复冒头的乱象，平台差不多每月都会发个公告，说处理了多少违规账号、清了多少不当内容。但实际情况是，这些内容像 “打不死的小强”，清了又冒出来，根本没从根儿上理顺。</p>
<p>之前那套靠关键词、画面识别的办法，早跟不上暗处那些人的 “新花样” 了。现在这些内容靠碎剪、换脸、多地址推流这些藏着的手段，能轻松钻过平台头一道监控的空子。这就让治理变成了 “摁下葫芦浮起瓢” 的循环，也显露出平台在内容安全这块儿只能跟在后面补漏，没法提前把窟窿堵上的被动。</p>
<p>更让人念叨的是，这次集中攻击里，平台的反应慢得有点离谱。不少用户说，加上第三方数据看，攻击起来后，那些违规直播的推流没第一时间掐断，不少不当内容在平台里扩散了十到二十分钟，有的时间更长。直到举报多起来、相关话题在社交平台热了，平台才急着把全平台直播频道停了，等于给这些内容留足了扩散的时间，让更多人瞧见了这些糟心东西。</p>
<p>说到底，平台连套拿得出手的应急方案和风控办法都没攒齐。这次暗处的攻击明显是有组织、有技术的 “精准冲塔”，操控着一大堆不常动的账号同时开播。可碰上这种不按常理来的攻击，平台明显没辙：一开始既没法快速定位批量有问题的账号，也没有分级管、精准限流的流程，工作人员只能一个个封账号，根本拦不住这些内容大范围扩散。</p>
<h3 id="一些告诫"><a href="#一些告诫" class="headerlink" title="一些告诫"></a>一些告诫</h3><p>请各位从现在开始千万不要点击W信里的任何链接公众号，即便是自己的家人都不可以，同时告诫自己的家人要注意安全！</p>
<p>因为有的直播间挂了一些链接，有些人好奇就点了进去后出现无法控制手机黑屏等，事后W信账号被盗取和财产全部损失(目前没见过实际实例但是都得小心)，被控制的账号会再给账号中的好友、朋友圈发表那些奇怪的链接给他人进行盗用，或者是借款，各位小心！</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20251223224908178.png" alt="" loading="lazy" decoding="async"></figure>

<blockquote class="stellar-quot"><p>不过我看W信官方也下台了辟谣不属实，不过还是警戒大家不要随便乱点击！</p></blockquote>

<h1 id="二五年度总结"><a href="#二五年度总结" class="headerlink" title="二五年度总结"></a>二五年度总结</h1><p>2025 年的「koxiuqiu」，就像一本随手翻不完的生活与工作手账，有每月的碎碎念复盘，有突发的停更小插曲，还有年底的重大域名调整，每一段都藏着真实的探索痕迹。下面先顺着月份，看看这一年的点滴：</p>
<h2 id="各月度总结"><a href="#各月度总结" class="headerlink" title="各月度总结"></a>各月度总结</h2><h3 id="1-月：新的起点"><a href="#1-月：新的起点" class="headerlink" title="1 月：新的起点"></a>1 月：新的起点</h3><p>1 月是全年的开篇，带着 “新开始” 的仪式感，不仅写了 1 月小结，梳理了月初的工作生活节奏，还同步分享了好几份不同主题的内容 ，有纠结 “封建派还是自由派” 的思想小碰撞；也有 “心悦君兮君不知，一寸相思一寸灰” 的感性随笔。</p>
<h3 id="2-月：稳步推进"><a href="#2-月：稳步推进" class="headerlink" title="2 月：稳步推进"></a>2 月：稳步推进</h3><p>2 月延续了月度小结的节奏，发布了 25 年 2 月小结。没有太多额外的话题输出，大概率是恰逢春节前后，一边兼顾节日氛围，一边稳稳推进手头的事务。这份小结虽然简洁，是对这段时间工作生活的梳理与沉淀，没有急功近利的内容堆砌，只在平淡中稳步接住 1 月的规划。</p>
<h3 id="3-月：业务技术"><a href="#3-月：业务技术" class="headerlink" title="3 月：业务技术"></a>3 月：业务技术</h3><p>3 月除了常规的 3 月小结，还专门发布了自己的一些项目，文章已隐藏。看得出来这个月把重心放在了技术服务保障上。</p>
<h3 id="4-月：项目日常"><a href="#4-月：项目日常" class="headerlink" title="4 月：项目日常"></a>4 月：项目日常</h3><p>4 月依旧保持着 “月度小结 + 专项分享” 的模式。</p>
<h3 id="5-6-月：留白期"><a href="#5-6-月：留白期" class="headerlink" title="5-6 月：留白期"></a>5-6 月：留白期</h3><p>这两个月没有公开的小结或专项内容，属于全年的 “留白时刻”。大概率是进入了项目集中推进期，不管是公益、商业项目的落地执行，还是技术优化，都需要投入更多精力；也是给自己留了调整的空间，暂时把重心从 “记录” 转向了 “实干”。</p>
<h3 id="7-月：转折收尾"><a href="#7-月：转折收尾" class="headerlink" title="7 月：转折收尾"></a>7 月：转折收尾</h3><p>一方面，像前几个月一样，完成了 7 月的事务复盘，梳理了上半年项目推进、日常事务的成果与不足，为 CN 域名阶段的运营画上了阶段性句号；另一方面，正式告知大家 “<a href="https://koxiuqiu.cn/">koxiuqiu.cn</a>” 这个 CN 域名不再更新，后续要切换到 CC 域名。不过后续很快便转回来了。</p>
<h3 id="8-10-月：深度沉淀"><a href="#8-10-月：深度沉淀" class="headerlink" title="8-10 月：深度沉淀"></a>8-10 月：深度沉淀</h3><p>这三个月没什么内容更新，是全年最长的 “静默期”，不过期间还是因为一些事情就简单发了一些东西。这段时间主要是个人状态调整与博客问题排查期，博客存在体验不佳、卡顿、报错、失联等问题，甚至自己都不愿访问，因此这段时间大概率在默默梳理博客的技术漏洞，同时调整个人状态。</p>
<blockquote>
<p>我总觉得会停更，但是我回头一望发现，哎？我好像一直保持着月更，估计都是水文，后续调整会把一些文章隐藏的，也会提高发表的门槛吧，至少看上去没那么水！(谁敢想曾经的小柯文章都是以万字为单位的教程博主..)</p>
</blockquote>
<h3 id="11-月：状态同步"><a href="#11-月：状态同步" class="headerlink" title="11 月：状态同步"></a>11 月：状态同步</h3><p>11 月终于有了新动态，发布了 “25 年 11 月灌水闲说”，核心是同步回归计划与近期状态：明确后续会恢复更新，但不纠结于周更、月更，季更也可，主打一个 “不焦虑、随心意”；分享了个人状态调整期的思绪零散，以及关于博客内容与互动的说明，还提到 “准备推送了又觉得草率，再给自己多点闲暇时光”。</p>
<h3 id="12-月：博客修整"><a href="#12-月：博客修整" class="headerlink" title="12 月：博客修整"></a>12 月：博客修整</h3><p>12 月是全年的收尾，也是内容与技术的 “集中爆发期”，核心围绕博客修整展开：发布了 “关于博客” 的专项说明，透露了一系列关键调整;将主域名切回.cn，恢复早年首页样子，统一整合所有数据；博客框架选用 Hexo，主题为 Stellar（XAOXUU 开发），同时上线主题切换功能，支持 Hexo-Stellar 与 Valaxy-Yun 两种选项，数据互通（尽量），还计划后续在首页加切换按钮；为保障稳定，将所有资源全量本地化，避免依赖外部资源导致失效；此外，还处理了插件兼容问题（如 Fancybox 图片放大功能），计划参考请教他人修改主页右侧栏，并打磨调整内容中不合适的文笔、删除不妥当文章。</p>
<p>本月还同步了多项细节：提到远古时期基于 Hexo 蝴蝶主题魔改的版本因报错、加载异常、丢内容等问题，已存进网盘留作纪念，主站不再折腾复杂功能；友联方面欢迎他人添加自己的小站，因个人不喜欢频繁推送及 Valaxy 框架推送卡顿，暂时无法主动回链，认为这样能筛掉一时兴起的站点，更稳妥；感谢 “开往项目” 组未将自己除名，已把项目按钮加回；以及 12 月 11 日的补充说明，提到会完善插件功能、修改不合适文章，回归。</p>
<h2 id="简单总结闲言"><a href="#简单总结闲言" class="headerlink" title="简单总结闲言"></a>简单总结闲言</h2><p>我的小站，在折腾里慢慢归位 2025年对我来说，核心就俩字：折腾，还有回归。 </p>
<p>年初带着新鲜劲儿开更，写月度小结，也瞎琢磨社会这种话题，偶尔还发点感性随笔，忙忙活活挺充实。中间一会儿停更调整，一会儿又琢磨公益和商业项目，7月甚至说要把CN域名换成CC，现在回头看，真是有点反复。 </p>
<p>最头疼的还是博客的问题，上半年后期网站卡得不行，还总报错，我自己都不想点开看。直到11月才慢慢找回状态，不纠结更新频率，舒服最重要。 年底这波调整：把域名切回了熟悉的.cn，数据全整合到一起，选了Hexo+Stellar的主题，还弄了个主题切换功能，所有资源都本地化了，就图个稳定。</p>
<p>那些早年魔改的主题虽然没能保留，但存进网盘留了念想，也挺好。 这一年没少折腾域名、主题和内容，删了不少水文，也打磨了不少文字。特别感谢关注我的朋友夸新主题好看，还有“开往项目”组没把我除名，友联的小伙伴也愿意等我慢慢回链。 </p>
<blockquote>
<p>还有很多东西需要调整，然后为了方便同步文章数据都会去掉全部标签再同步到其他框架，毕竟主题没办法兼容语法，文章排版观感肯定是以本站优先，同步速度和进度，也会有误差，如果发现同步的站和本站文章有多或者有少还请留个言提醒一下~</p>
</blockquote>
<p>2025年就这么过去了，有迷茫也有收获，最大的感悟就是：</p>
<blockquote class="stellar-quot"><p>小站不用追求多惊艳，自己舒服就好</p></blockquote>

<p>新的一年，我“解冻”啦，会慢慢更新，继续分享生活和思考，就这么从容地走下去～</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20251223233030269.png" alt="" loading="lazy" decoding="async"></figure>

<hr>
<p>终于水完了，是不是该回房间偷偷的……</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20251223233455880.png" alt="" loading="lazy" decoding="async"></figure>

<blockquote>
<p>你在想什么，战双更新大版本了，启动ing……</p>
</blockquote>
]]></content>
  </entry>
  <entry>
    <title>小站最新装修</title>
    <link href="https://koxiuqiu.cn/posts/23p251271/" rel="alternate" type="text/html" />
    <link href="https://cn-nb1.rains3.com/kxqimage/img/20251207170017113.webp" rel="enclosure" type="image/webp" />
    <id>https://koxiuqiu.cn/posts/23p251271/</id>
    <published>2025-12-07T08:00:00.000Z</published>
    <updated>2025-12-07T08:00:00.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="博客开发" scheme="https://koxiuqiu.cn/categories/%E5%8D%9A%E5%AE%A2%E5%BC%80%E5%8F%91/" label="分类" />
    <category term="记录" scheme="https://koxiuqiu.cn/tags/%E8%AE%B0%E5%BD%95/" label="标签" />
    <summary type="text">安然无恙，各位； 这只是一篇记录文，对你可能无价值 最近也是终于舍得抽点时间出来折腾了，那就是折腾一下博客什么的。 把之前的水文删除了产出了本篇的海文-_- 关于博客 可能访问blog.koxiuqiu.cn没有直观感受到吧，一会我给这个由 Valaxy v0.26.6 驱动|主题- Yun 博客框架首页加一个大大的按钮用来切换。 突然想到了一些问题，干脆重新改一下，重定向回去主域使用URL定位到主题的地方直接选择，重新绑定一个二级就好了。 主题 这个是新主题。 框架： Hexo 主题： Stellar：开始您全新的博客之旅 - XAOXUU 还有很多更...</summary>
    <content type="html"><![CDATA[<p>安然无恙，各位；</p>
<blockquote><p>这只是一篇记录文，对你可能无价值</p>
</blockquote>

<p>最近也是终于舍得抽点时间出来折腾了，那就是折腾一下博客什么的。</p>
<mark class="stellar-mark stellar-mark--green">把之前的水文删除了产出了本篇的海文-_-</mark>

<h1 id="关于博客"><a href="#关于博客" class="headerlink" title="关于博客"></a>关于博客</h1><p>可能访问blog.koxiuqiu.cn没有直观感受到吧，一会我给这个由 <a href="git+https://github.com/YunYouJun/valaxy.git">Valaxy</a> v0.26.6 驱动|主题-<a href="git+https://github.com/YunYouJun/valaxy/tree/main/packages/valaxy-theme-yun.git">Yun</a>博客框架首页加一个大大的按钮用来切换。</p>
<blockquote>
<p>突然想到了一些问题，干脆重新改一下，重定向回去主域使用URL定位到主题的地方直接选择，重新绑定一个二级就好了。</p>
</blockquote>
<h2 id="主题"><a href="#主题" class="headerlink" title="主题"></a>主题</h2><blockquote>
<p>这个是新主题。</p>
</blockquote>
<p>框架：<a href="https://hexo.io/zh-cn/">Hexo</a></p>
<p>主题：<a href="https://xaoxuu.com/wiki/stellar/">Stellar：开始您全新的博客之旅 - XAOXUU</a></p>
<p>还有很多更好的配置我没有进行编写，暂时不想折腾太多，只需要基本的暂时足矣，如果有什么好的建议或者能指导一下的感激不尽~</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20251207155759467.png" alt="" loading="lazy" decoding="async"></figure>

<p>也其实最开始那几年用的就是这个老域名，前段时间刚把主域名切回了.cn，干脆就一起把首页也恢复成了早年的样子，所有数据也都做了统一整合。</p>
<p>我本身不太愿意舍弃以前自己折腾出来的东西，而且确实也有访客不太喜欢现在用的主题或框架，所以就做了个能让大家自由选框架和主题的功能，目前暂时先上线了两个选项。</p>
<hr>
<p>会抽时间把主题的语法、标签等文章啊功能整合起来发在自己博客上，方便使用也梳理成自己可以简单理解的样子。</p>
<p>如果出现URL文件不一样或者是什么的，正常现象，单纯就是不好统一的原因而已，当然也可能是我自己没排查出来出现错误，随时留言道一句呀。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20251207160058152.png" alt="" loading="lazy" decoding="async"></figure>

<p>其实远古时期那个基于HEXO蝴蝶主题魔改的版本，最终没保留下来也挺无奈的；主要是当年断断续续改了一两年，后期各种麻烦事全来了：魔改代码时不时报错，文章要么加载不出来，要么直接乱序错位，最后甚至还丢了部分内容，数据同步早就没法正常弄了。实在没办法，只能先把它存进网盘里，留个念想。 </p>
<p>后续要是遇到什么有意思的功能，或许还会折腾着加进去，但主站大概率不会再动了。现在这样没太多复杂功能、清清爽爽的状态其实也挺好。回想整个2025年，我基本没怎么折腾网站，就想图个稳定。这次把域名、首页和数据理顺，如今这次纯粹是之前的问题堆得没法回避，属于被迫修整。</p>
<p>什么被迫呢…子乔自己看吧：</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20251207165124183.png" alt="" loading="lazy" decoding="async"></figure>

<blockquote>
<p>简单的说就是去年我自己都会看看自己小站，这会我看都不想看，体验不好又卡顿容易报错失联，更别提访客了。</p>
</blockquote>
<h2 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h2><p>接下来会在这一小段时间里尽快梳理、重编各项规则，同时把内容里不合适、不妥当的文笔打磨调整好。另外能明显感觉到圈内环境在慢慢变好，所以也打算重新回归；目前已经先把开往项目的按钮加回去了。 特别感谢这段时间项目组没有把我除名。</p>
<p>其实我心里清楚，自己在团队里就是个小透明而已，能被留下来真的挺感激的，哈哈。 </p>
<p>友联方面，大家如果愿意的话，可以先把我的小站加上。之所以暂时没法主动回链，一方面是我本身不太喜欢频繁推送的操作，另一方面va框架有个小问题，每次推送都会卡很久。所以还请大家多等一等，这样其实也能筛掉一些只是一时兴起的站点，反而更稳妥些～</p>
<h2 id="博客"><a href="#博客" class="headerlink" title="博客"></a>博客</h2><figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20251207160938977.png" alt="" loading="lazy" decoding="async"></figure>


<p>目前的框架主题都是全资源本地化的，花了点小功夫把东西都加载在本地中，虽然这样是没办法比得过那些优化鬼才的加载速度了，好在稳定。</p>
<p>虽说这么一来，加载速度肯定比不上那些擅长优化的“大神”们，但胜在足够稳定。</p>
<p>其实按理说，那些常用的知名资源不太可能出什么波动，或许是我自己疑心太重，甚至有点被害臆想？主要是以前总遇到东西失效的情况，就连我自己折腾的内容，也可能因为后续各种不可控因素出问题；再加上最近各大厂也有些不太方便明说的变动，多做一层本地化，总归能更安心些。</p>
<h2 id="数据"><a href="#数据" class="headerlink" title="数据"></a>数据</h2><p>由于某些框架和主题的根本上的不同，所以排版上来说，都是基于主站，次站一律只采用最基础的语法，例如那些公式图、目录树等功能均不支持。</p>
]]></content>
  </entry>
  <entry>
    <title>25年11月灌水闲说</title>
    <link href="https://koxiuqiu.cn/posts/22p2511201/" rel="alternate" type="text/html" />
    <id>https://koxiuqiu.cn/posts/22p2511201/</id>
    <published>2025-11-19T16:00:00.000Z</published>
    <updated>2025-12-06T16:00:00.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="生活日志" scheme="https://koxiuqiu.cn/categories/%E7%94%9F%E6%B4%BB%E6%97%A5%E5%BF%97/" label="分类" />
    <category term="日常" scheme="https://koxiuqiu.cn/tags/%E6%97%A5%E5%B8%B8/" label="标签" />
    <category term="月度总结" scheme="https://koxiuqiu.cn/tags/%E6%9C%88%E5%BA%A6%E6%80%BB%E7%BB%93/" label="标签" />
    <summary type="text">安然无恙，各位； 这只是一篇记录文，对你可能无价值 最近最后调整一下应该是会恢复更新了，不说周更吧，嗯…也不说月更吧，季更也不错（准备推送了感觉草率了再给自己多点闲暇时光） 关于近期博客内容与互动的说明： 大家好，想和大家同步一下近期的情况。这段时间由于个人状态调整，思绪相对零散，在博客文章撰写和评论互动中，可能出现过“话不过大脑”的情况；比如表述不够周全、无意间流露出过度个人化的倾向，或是有其他不够恰当的内容、发言。 我一直很重视和大家的交流，也希望自己的内容能带来积极的沟通价值。所以如果大家在阅读我的文章、看到我的评论时，发现任何值得商榷的地方，无论...</summary>
    <content type="html"><![CDATA[<p>安然无恙，各位；</p>
<blockquote><p>这只是一篇记录文，对你可能无价值</p>
</blockquote>

<blockquote>
<p>最近最后调整一下应该是会恢复更新了，不说周更吧，嗯…也不说月更吧，季更也不错（准备推送了感觉草率了再给自己多点闲暇时光）</p>
</blockquote>
<p>关于近期博客内容与互动的说明：</p>
<p>大家好，想和大家同步一下近期的情况。这段时间由于个人状态调整，思绪相对零散，在博客文章撰写和评论互动中，可能出现过“话不过大脑”的情况；比如表述不够周全、无意间流露出过度个人化的倾向，或是有其他不够恰当的内容、发言。 我一直很重视和大家的交流，也希望自己的内容能带来积极的沟通价值。所以如果大家在阅读我的文章、看到我的评论时，发现任何值得商榷的地方，无论是观点偏差、表达问题，还是你觉得不够妥当的表述，都欢迎直接在这条动态下告诉我。 每一条反馈对我来说都是修正和进步的机会，我会认真对待大家指出的问题，及时调整和完善，也谢谢大家一直以来的包容与帮助。</p>
<p>好些日子没写小结了，这玩意该怎么写来着？</p>
<p>算下来几个月没写小结了，这段时间大概就是从忙着改博客 BUG，到开新小说草稿的这段日子吧，零碎事儿不少，趁这会儿捋捋。</p>
<h2 id="网站方面"><a href="#网站方面" class="headerlink" title="网站方面"></a>网站方面</h2><h3 id="关于博客"><a href="#关于博客" class="headerlink" title="关于博客"></a>关于博客</h3><p>还行，也就有了几波攻击和vercel授权问题导致无法正常推送而已，我推送一次很麻烦！</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20251120230250688.png" alt="" loading="lazy" decoding="async"></figure>

<p>最近发现个小情况：刷新博客页面（是文章页还是其他页面）时，按F5后会短暂闪一下404页面，之后才会正常加载。 暂时没摸清具体原因，猜测可能和页面渲染有关。</p>
<p>之前博客样式出过BUG，当时是我自己手动强行修复的，不排除那次修改留下了隐患。不过目前来看，这个小问题完全不影响正常使用，也没有访客反馈过相关问题，所以打算先放一放，等之后有空了再排查具体原因。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20251120230526285.png" alt="" loading="lazy" decoding="async"></figure>

<p>最近这段时间，我确实有些松懈过头了；连负责运行的机器断了线，我都全然没察觉，直到它掉线好几天才后知后觉地发现。</p>
<p>万幸的是，所有数据都完好保留着，没出什么大问题。 其实我一直有备份的习惯，也清楚这是个能规避风险的好习惯，但真到需要恢复的时候，还是忍不住觉得麻烦。说到底，还是自己太怕费事儿，才没第一时间去处理这些后续工作。</p>
<h2 id="关于生活"><a href="#关于生活" class="headerlink" title="关于生活"></a>关于生活</h2><h3 id="感情反面"><a href="#感情反面" class="headerlink" title="感情反面"></a>感情反面</h3><p>这段日子过得确实一塌糊涂，满是狼狈和混乱，但也算有个庆幸的地方；我比从前清醒了太多。 在一段看不到结果的感情里兜兜转转许久，最终还是被现实拉回了神。不管是双方家庭的差异、柴米油盐的生活压力，还是藏在心底里那些没说出口的委屈与不合拍，桩桩件件都在提醒我：感情从来不是只靠热情就能撑下去的，现实里的考量，从来都绕不开。</p>
<h3 id="其他内容"><a href="#其他内容" class="headerlink" title="其他内容"></a>其他内容</h3><p>最近开了本新小说，风格大概是悬疑、都市加科幻的结合，前期大纲和核心设定已经捋得差不多了，具体内容就先不剧透啦，说不定之后会先在博客里放些片段试试水。 目前是保持着一周三更的节奏在写草稿。</p>
<p>没错，还只是草稿阶段，暂时没打算发布。一方面是账号有点小麻烦：不知道什么时候用手机号一键注册了个新号，现在还没法注销，得等三十天后才能再操作；另一方面也确实觉得现在的状态不适合发：更新速度本身就慢，只能先慢慢存稿，而且故事节奏偏缓，我自己读下来还总觉得有些“废话”，明显是还没摆脱写博文的思维习惯，用这种方式写小说总觉得差点意思，还得再调整调整。</p>
<p>说到底，也算是给自己找了件正经事做。人啊，总归得有份属于自己的事忙着；不管是写小说、打理博客，还是别的什么，有个能投入心思的方向，日子才不会空落落的，不然总觉得少了点滋味，确实没什么意思。</p>
]]></content>
  </entry>
  <entry>
    <title>放下热爱,归向烟火,致大家的一封告别与交代信</title>
    <link href="https://koxiuqiu.cn/posts/21p2510061/" rel="alternate" type="text/html" />
    <link href="https://cn-nb1.rains3.com/kxqimage/img/20251006184453224.webp" rel="enclosure" type="image/webp" />
    <id>https://koxiuqiu.cn/posts/21p2510061/</id>
    <published>2025-10-05T16:00:00.000Z</published>
    <updated>2025-12-06T16:00:00.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="博客开发" scheme="https://koxiuqiu.cn/categories/%E5%8D%9A%E5%AE%A2%E5%BC%80%E5%8F%91/" label="分类" />
    <category term="记录" scheme="https://koxiuqiu.cn/tags/%E8%AE%B0%E5%BD%95/" label="标签" />
    <summary type="text">安然无恙，各位; 这只是一篇记录文，对你可能无价值 前言 这是一则很突然的文章，距离上一次在博客更新，已经是七八月的事了。那段日子里，我无数次打开编辑器又关掉，最终还是让页面停留在了原地，本以为这样的 “停更” 会一直延续下去，直到生活彻底把这段回忆冲淡。所以今天敲下这些字时，连指尖都带着几分突然，毕竟现在的我，早已不是当年那个能抱着电脑熬到凌晨、为一个项目细节反复打磨的人。 决策 我的很多项目都是免费服务给大家的，但是一次次的失望带来给我的不仅仅是精神上的疲惫，更多的是失望，这次退出我将不会进行复出了，以往来说都是关闭过段时间又重启，可能会有人在背后议...</summary>
    <content type="html"><![CDATA[<p>安然无恙，各位;</p>
<blockquote><p>这只是一篇记录文，对你可能无价值</p>
</blockquote>

<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>这是一则很突然的文章，距离上一次在博客更新，已经是七八月的事了。那段日子里，我无数次打开编辑器又关掉，最终还是让页面停留在了原地，本以为这样的 “停更” 会一直延续下去，直到生活彻底把这段回忆冲淡。所以今天敲下这些字时，连指尖都带着几分突然，毕竟现在的我，早已不是当年那个能抱着电脑熬到凌晨、为一个项目细节反复打磨的人。</p>
<h2 id="决策"><a href="#决策" class="headerlink" title="决策"></a>决策</h2><p>我的很多项目都是免费服务给大家的，但是一次次的失望带来给我的不仅仅是精神上的疲惫，更多的是失望，这次退出我将不会进行复出了，以往来说都是关闭过段时间又重启，可能会有人在背后议论吧，说 “果然是圈够钱就跑路了”。每次想到这些可能的揣测，心里都会有点委屈，但更多的是坦然；因为我从这些事里，一分钱都没赚过，问心无愧。那些年做的项目，从最初的小功能网站到后来的丘盾 CDN 公益项目，全都是免费开放给大家用的。我还记得丘盾 CDN 刚上线时，为了解决一个卡顿问题，又额外花费许多能买很多礼物的钱，去优化，然后去发现问题去优化解决，看着后台用户量慢慢涨起来时，心里的成就感比拿了奖还开心。可后来呢？一次次的问题、一次次的质疑，还有偶尔收到的负面反馈，慢慢磨掉了最初的热情。尤其是这次，明明是其他问题引发的蝴蝶效应，却连累了刚重启不久的丘盾 CDN，我对着后台数据发呆了很久，心里满是愧疚；这个从早年就存在、曾慢慢做大的项目，明明今年年初才好不容易重启，却又要因为我的决定再次停下。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20251006014909559.png" alt="" loading="lazy" decoding="async"></figure>

<p>但请大家放心，关于项目的数据，我会亲自监督删除，绝不会保留，更不会泄露半分。这不仅是对大家的承诺，也是我对自己这些年心血的交代。我们内部早就签了条款合同，每个成员都清楚底线，大家完全不用担心中成员的问题。或许有人会说 “你又让大家失望了”，我没法反驳，只能承认这是事实。这些年我好像一直在 “让别人失望”：做项目会出岔子，答应大家的更新会延迟，就连这次，也没能守住 “一直做下去” 的承诺。可我真的累了，不想再逼自己硬扛，不想再 “找虐”，我没有受虐倾向，也不想再这样折磨自个了。</p>
<p>从小到大，我好像就没彻彻底底做成过什么事。谈恋爱时，会因为不懂经营而错过；又或者考高中大学，明明努力了却还是差一点；创业时，因为感情分心、决策失误，最后落得亏损的下场；就连打游戏，也总是因为心态不好而输。我好像一直在 “差一点” 的怪圈里打转，学习一旦被影响，就再也找不回之前的状态；做事情一旦分心，就会接连出错。人情世故、情商、感情，这些别人好像轻易就能做好的事，对我来说却难如登天。这次选择退出，也是想放过自己；</p>
<p>既然做不好，不如早点放手，别再耽误自己。</p>
<p>还有我的付费图床项目，（目前全部费用原路返回保留数据且转换为免费项目）我也想跟大家说清楚后续。我会这两天把它切换到专门的域名，（会给CC加301重定向，短期内可以不用例会，大家可以慢慢更新），并且删除全部付费内容，不会让大家因为我的决定受到损失。如果后期出现不可抗的问题也会尽力。<br>有人可能会好奇，之前不是用 CC 后缀的域名吗？其实我也舍不得，但为了后期的稳定，还是决定把 CC 后缀的都下掉。备案、国内政策的变动，这些都是不确定的因素，域名的所有权也并不是我的，我怕哪天突然出问题，又要麻烦大家调整，更怕这些 “不稳定” 会打乱我未来的生活。我现在只想追求极致的稳定，不想再花时间折腾这些事，不想再因为一个域名的问题，半夜爬起来处理，全部东西都将会切换大厂。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20251006015041960.png" alt="" loading="lazy" decoding="async"></figure>

<p>说起来，这几年看着博客圈的变化，心里也满是感慨。曾经热闹的评论区，慢慢变得冷清；曾经一起更新的博主，渐渐转战到了其他平台。现在大家都习惯用社交平台记录生活，只有少数 “老人” 还在坚持写博客。我算不上什么 “老人”，但也陪博客走过了三四年。这三四年里，我在博客里写过开心的事，也写过难过的情绪；记录过项目上线的激动，也吐槽过遇到的麻烦。每次翻到以前的文章，都能想起当时的心情，那些文字就像一个个小盒子，装着我最珍贵的回忆。我知道记录和更新博客本身很有意义，它能留住时光，能让人回忆起曾经的自己。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20251006015405400.png" alt="" loading="lazy" decoding="async"></figure>

<p>最后，我会慢慢退出合作的公司和项目，每一个都会做好交接，不会留下烂摊子。也请大家以后不要再打扰我的私人生活，我始终秉持着工作就是工作生活就是生活要分开分类，我想在新的生活里，做一个普通的人，按时吃饭、好好休息，和喜欢的人一起过安稳的日子。</p>
<p>这段日子，谢谢大家的陪伴和支持，谢谢你们愿意用时间来看我的项目、读我的文字，会记得这段时光里的每一份温暖。愿大家都能在自己的生活里，找到热爱且能坚持的事，愿我们都能活得轻松、活得自在。</p>
<hr>
<h2 id="项目"><a href="#项目" class="headerlink" title="项目"></a>项目</h2><blockquote>
<p>「丘盾CDN」QiuDun CDN - 纯公益的内容分发网络加速</p>
</blockquote>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20251006012716595.png" alt="" loading="lazy" decoding="async"></figure>

<hr>
<p>其实大家不用太担心丘盾 CDN 关闭带来的影响；对日常使用来说，它的关停并不会造成太大麻烦，只要在关闭前做好切换，就能平稳过渡。</p>
<p>关于具体的操作时间，我也查过官方说明，域名解析的 DNS 刷新周期虽标注为 48 小时，但实际操作里，很多时候几分钟到几小时内就能完成转移，官方说法更多是留出冗余时间。所以大家不用慌，建议在关闭前两天动手操作就够了，时间完全充裕。</p>
<p>具体步骤也很简单，不用额外折腾：先在新的服务平台调整好需要的参数设置，确认所有配置都没问题后，再把域名解析指向新平台。这样一来，等旧的 CDN 正式关闭时，新服务已经能正常承接，不会出现断联的情况。</p>
<p>我知道大家可能会怕操作出错，或者担心中途出问题，但真的不用紧张，这个切换过程很常规，按步骤来就不会有意外。如果后续还有不清楚的地方，在我淡出前，也可以在评论区问我，我会尽量回复大家，帮大家把过渡工作做好。毕竟是我决定关停项目，总不能让大家因为我的选择，在使用上添堵。</p>
<hr>
<p><strong>2025&#x2F;10&#x2F;23 操作平台会提前关闭，并切换成通知页面用于提前通知，官网会提前关闭避免新用户注册</strong></p>
<p>会进行交叉停止，因为各个分区的压力和数量不同，都会有所延期！</p>
<ul>
<li>境外加速服务：将于 <code>2025/10/23</code> 彻底关闭，建议在21日前进行切换CDN</li>
</ul>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20251006013329212.png" alt="" loading="lazy" decoding="async"></figure>

<ul>
<li>境内加速服务：将于 <code>2025/11/1</code> 彻底关闭，建议在30日前进行切换CDN</li>
</ul>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20251006013715235.png" alt="" loading="lazy" decoding="async"></figure>

<p>实际情况就实际情况就是，还没发表公开文章的时候又被举报罚款，也有人恶意攻击和投诉被强行提前关闭了。简单的来说就是即便我没有做出关闭的决定，也是迟早会被迫的简单的来说就是即便我没有做出关闭的决定，也是迟早会被迫的事情。</p>
<hr>
<h2 id="别语"><a href="#别语" class="headerlink" title="别语"></a>别语</h2><p>最后再说一句：抱歉此前诸多不周，若他日江湖偶遇，愿我们还能笑着道声 “别来无恙”就此别过，后会有期！</p>
<hr>
<p><strong>我没逝，此前言辞若有偏颇，让大家误以为我要停更博客，实在抱歉。博客会一直在，毕竟这是我生活的痕迹。</strong></p>
<blockquote>
<p>评论区如存在加载失败请尝试网络代理或切换数据刷新网络环境</p>
</blockquote>
]]></content>
  </entry>
  <entry>
    <title>比起顺意哄劝，我选笨拙地托你往亮处走</title>
    <link href="https://koxiuqiu.cn/posts/20p2508281/" rel="alternate" type="text/html" />
    <link href="https://cn-nb1.rains3.com/kxqimage/img/20250828015820810.webp" rel="enclosure" type="image/webp" />
    <id>https://koxiuqiu.cn/posts/20p2508281/</id>
    <published>2025-08-27T16:00:00.000Z</published>
    <updated>2025-12-06T16:00:00.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="闲聊杂谈" scheme="https://koxiuqiu.cn/categories/%E9%97%B2%E8%81%8A%E6%9D%82%E8%B0%88/" label="分类" />
    <category term="日志" scheme="https://koxiuqiu.cn/tags/%E6%97%A5%E5%BF%97/" label="标签" />
    <category term="生活" scheme="https://koxiuqiu.cn/tags/%E7%94%9F%E6%B4%BB/" label="标签" />
    <summary type="text">安然无恙，各位； 上回更新还是七月，算下来淡出博客圈快半年了。这会儿再冒头，估摸着 KL 这个名字，早没人记起了 ； 是我疏懒，罪过。 本是该停更的 ； 手头堆着太多事，没空闲余。偏是熬着把活忙完了，竟空出些碎时间，这篇就随手写了，算篇随笔吧。往后估计还得停更，少则几周，多则一两月。连月度小结也欠着，实在是忙得脚不沾地，况且近来也没心思记那些生活琐事。白天也有事情做今个干脆也不睡了。 今儿要写的，是个寻常到不能再寻常，却也争议不断的话题。从前不是没写过，只是总没说透，多是借点小事，絮絮叨叨附些道理，浅得很。 家庭、父母、孩子、旧观念、理解…… 没错，还是...</summary>
    <content type="html"><![CDATA[<p>安然无恙，各位；</p>
<p>上回更新还是七月，算下来淡出博客圈快半年了。这会儿再冒头，估摸着 KL 这个名字，早没人记起了 ； 是我疏懒，罪过。</p>
<blockquote>
<p>本是该停更的 ； 手头堆着太多事，没空闲余。偏是熬着把活忙完了，竟空出些碎时间，这篇就随手写了，算篇随笔吧。往后估计还得停更，少则几周，多则一两月。连月度小结也欠着，实在是忙得脚不沾地，况且近来也没心思记那些生活琐事。白天也有事情做今个干脆也不睡了。</p>
</blockquote>
<p>今儿要写的，是个寻常到不能再寻常，却也争议不断的话题。从前不是没写过，只是总没说透，多是借点小事，絮絮叨叨附些道理，浅得很。</p>
<p>家庭、父母、孩子、旧观念、理解……</p>
<p>没错，还是教育和家庭那点事。草稿攒了多少，自己也记不清了。身边朋友不懂我这些心思，有时会觉得乏力；之前也发过类似的文字，删删改改，早把太锐的、太急的都磨掉了，才敢往外放。</p>
<p>八月末的时候，和相熟的哥们闹了点不快；说“吵架”太沉，其实更像一场话不投机的争执。我本就不爱争，更懒得和心思没沉下来的人掰扯，毕竟年纪差着些，走过的路、放在心上的事都不一样。想起六月里还掏心跟他聊过，试着帮他捋顺些想法，如今看他还是老样子，那点开导的心思，倒像落进了空处，只剩点说不清的失望。后来也想通了，有些叛逆像是扎在性子上的刺，不是旁人说几句就能磨平的。</p>
<p>就像博友常说的，没经够事儿，心里那杆秤，自然也称不出轻重来。 家丑总归不好往外说，具体缘由我就不多提了。只说我有个要好的异性朋友，叫小钰，家里管得严，偶尔会跟我们念叨几句委屈。那天许是小钰的话勾着了共鸣，又或许是他自己先没稳住神，哥们竟顺着她的埋怨一路说下去，没想着劝劝，更没提过该怎么帮她往宽处想。明明该是拉一把的事，倒成了陪着一起钻牛角尖了，开导这两个或许对他来说是存在什么误解？</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250828003206714.png" alt="" loading="lazy" decoding="async"></figure>

<p>话到最后，我也懒得再开口了。他自始至终都困在自己的视角里絮叨，还把那点厌家的情绪一股脑往人身上递。后来我私下找他聊过，结果自然是话不投机； 怎么说都像是隔着层东西，压根没法往一处凑。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250828003945131.png" alt="" loading="lazy" decoding="async"></figure>

<p>前边一直在掰扯，为什么要给小钰灌这种拧巴的想法。她马上毕业考，本身压力就堆成山，我费心开导那么久，想的是稳住节奏顾全大局，从没拿 “为你好” 那套中式教育的话术去压人。结果呢？前功尽弃，情绪又被拽回泥潭。</p>
<p>我实在没法理解他这副样子，像被情绪牵着走的幼稚鬼，偏要在别人紧要关口添乱。想起那句关于感情的话，套在这儿也应景：男女朋友上的这句话，它说：她可以不懂事，我不能不懂事； 不是要谁时刻完美，只是当有人在人生岔路拼命闯关时，同行者该拎得清轻重，别用自以为是的‘共情’，把人往更难的地方推 。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250828003957855.png" alt="" loading="lazy" decoding="async"></figure>

<p>看到他敲出 “家长这样管的窒息感知道吗” 时，胸腔里那股火 “噌” 地就往上蹿；我太懂这种窒息了，十几岁时被按在 “为你好” 的规训里窒息到喘不过气，无数个夜里把枕头哭湿的记忆，连当下社交平台上，那些被父母管控逼到崩溃的案例，我都攒着当共情的凭据，盼着能给陷在类似处境的人撑把伞。可他倒好，生生把我的话拧成麻花，硬往我头上扣 “要跟她说妈妈是为你好”“认同抑郁症是装的” 这些帽子，像笃定我从没尝过被窒息感淹没的滋味。</p>
<p>我确实封建，但是我想法开明一点，封建的只是心想的但是不会去做。</p>
<p>盯着屏幕那几秒，手指都在发抖。最后咬着牙敲下 “我睡了”，算是彻底认栽：没必要跟把亲情掰成仇恶利刃的人掰扯。不是不承认亲情里会有刺，可他分明不是 “亲情长刺该修整” 的例外，而是年纪拖着长大、心智还困在孩童混沌里的人。我看得见他家正拧巴着矛盾，却没法睁眼装瞎，纵容他拿 “家里有事” 当遮羞布，把扭曲的认知焊成护心甲；有些错，不该因为 “家有难处” 就成了理所应当。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250828013507661.png" alt="" loading="lazy" decoding="async"></figure>

<p>可哥们的做法，像把我拼命支起的伞骨，生生掰歪。</p>
<hr>
<p>我打心底里盼着她能好好的，最不愿见她往歪处想，更别说是轻生这样的傻事。我曾亲历过心理疾病病痛的纠缠，自然懂人在极端时那些翻涌的念头有多磨人，所以始终守着一份心，想做那个能给她搭把手、引引路的人 ； 但凡我放在心上的人，我向来都是这样待的。</p>
<p>这倒让我想起个道理来。有种男人，不管你遇上什么事，好的坏的，都能第一时间凑上来哄。可这未必是真上心，反倒可能是 “渣男” 的路数：要么是哄顺了你的毛，好转头去撩拨旁人；要么是嫌你闹得慌，赶紧把你安抚住，图个耳根清净； 说到底，是不耐烦，毕竟他从没想过要和你往长远了走，更别提什么婚姻里的相扶相持。但另一种男人不同。他会先耐着性子问清来龙去脉，知道你究竟遇上了什么，心里憋着哪些情绪。他也会开导你，却从不说 “我这是为你好” 这种硬邦邦的话，不会让你觉得被说教、被强迫。他先接住你的情绪，让你知道自己的感受被妥帖放着，再慢慢引着你往亮处走、往正路上走，绝不会眼睁睁看着你困在错误的念头里打转，不管不顾。</p>
<p>说到底，前者是图一时的 “太平”，后者才是揣着真心，想陪你把路走稳当。</p>
<hr>
<p>我重新审视 “理解” 的边界。我曾以为，经历和年纪带来的认知差，能靠耐心填补，却忘了有些人，早已把固执当铠甲。就像博友说的 “经历不多，觉悟难高”，可真正让人无奈的，是有人明明见过深渊，却偏要往更偏的岔路走。淡出博客圈这半年，本以为自己看事更淡，可遇到这些，还是会急、会气。或许成长就是这样，即便知道人与人认知有壁，仍忍不住为 “懂与不懂” 较劲。但较劲过后，也学会了放过自己，不是所有人都能站到同一片认知天地，与其执着掰扯，不如守好自己的 “理解坐标系”，在能照亮的地方发光，在照不到的角落，学会释怀。</p>
<p>也可能我确实封建了吧，又或者是自己的三观不符合当下时代，旁观者清，也许旁人来看我这些事情或许能给予我更好的意见，是吧，你？</p>
]]></content>
  </entry>
  <entry>
    <title>25年7月小结</title>
    <link href="https://koxiuqiu.cn/posts/19p2507271/" rel="alternate" type="text/html" />
    <link href="https://cn-nb1.rains3.com/kxqimage/img/20250727134641701.webp" rel="enclosure" type="image/webp" />
    <id>https://koxiuqiu.cn/posts/19p2507271/</id>
    <published>2025-07-26T16:00:00.000Z</published>
    <updated>2025-12-06T16:00:00.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="生活日志" scheme="https://koxiuqiu.cn/categories/%E7%94%9F%E6%B4%BB%E6%97%A5%E5%BF%97/" label="分类" />
    <category term="日常" scheme="https://koxiuqiu.cn/tags/%E6%97%A5%E5%B8%B8/" label="标签" />
    <category term="月度总结" scheme="https://koxiuqiu.cn/tags/%E6%9C%88%E5%BA%A6%E6%80%BB%E7%BB%93/" label="标签" />
    <summary type="text">安然无恙，各位； 这只是一篇记录文，对你可能无价值 今儿个想跟大伙儿念叨念叨停更这事儿。今年这已经是第二次长时间歇笔了，上回好歹还能凑数写几篇，这次是真没辙了，人长时间没在圈子里晃悠，老朋友们估计也发现了，我这都小半年没怎么吭声了。 另外，关于我那个公益项目丘盾 CDN，这些年多亏了大伙儿捧场，收到不少好评不说，还有好多博主、论坛主动帮着宣传。其实我打心眼儿里没盼着啥回报，也从没想过要大家特意去宣传或者挂个链接啥的，大家伙儿觉得这事儿还行，愿意搭把手，我就挺知足了。 丘盾事故 说起来也简单，最近是因为要换底层系统。老平台那边，一来是授权出了问题，二来数据...</summary>
    <content type="html"><![CDATA[<p>安然无恙，各位；</p>
<blockquote><p>这只是一篇记录文，对你可能无价值</p>
</blockquote>

<p>今儿个想跟大伙儿念叨念叨停更这事儿。今年这已经是第二次长时间歇笔了，上回好歹还能凑数写几篇，这次是真没辙了，人长时间没在圈子里晃悠，老朋友们估计也发现了，我这都小半年没怎么吭声了。</p>
<p>另外，关于我那个公益项目丘盾 CDN，这些年多亏了大伙儿捧场，收到不少好评不说，还有好多博主、论坛主动帮着宣传。其实我打心眼儿里没盼着啥回报，也从没想过要大家特意去宣传或者挂个链接啥的，大家伙儿觉得这事儿还行，愿意搭把手，我就挺知足了。</p>
<h2 id="丘盾事故"><a href="#丘盾事故" class="headerlink" title="丘盾事故"></a>丘盾事故</h2><figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250727132323351.png" alt="" loading="lazy" decoding="async"></figure>

<p>说起来也简单，最近是因为要换底层系统。老平台那边，一来是授权出了问题，二来数据库数据实在太庞大，直接死机启动不了了，没办法就开放了新平台。</p>
<p>可新平台也没顺顺当当的，刚上线就出了严重事故，直接掉线一整天。这一下，刚切到新平台的上百个站点全受了影响，这儿真得说声万分抱歉。</p>
<p>当时没办法，就让大家先把解析切回老平台了。后来新平台修复好，老平台也没关，俩平台就一直开着，等着大伙儿自己慢慢切到新平台。说实在的，还是推荐尽快换过来，站长这边是真没功夫一个个帮着迁移，几百个站点呢，实在顾不过来。目前看，差不多有近百个站已经切过来了</p>
<h2 id="感情事故"><a href="#感情事故" class="headerlink" title="感情事故"></a>感情事故</h2><p>出了这档子事，心里头确实像被什么东西堵着，提不起劲儿。但你说得对，这世界还有太多模样没见过呢。</p>
<p>其实能想到这一层，就已经在慢慢缓过来了。世界大得很，那些没踏足过的地方，没遇见过的风景，风里的味道、花里的香，还有寻常巷陌里的烟火气，都在那儿等着呢。</p>
<p>人这一辈子，谁还没碰上过几次磕绊？跨过去这道坎，前头总有新的景致。等心绪顺些了，出去走走，该看的、该体验的，一样都别落下才好。</p>
<h2 id="生活事故"><a href="#生活事故" class="headerlink" title="生活事故"></a>生活事故</h2><p>最近这身子骨是真不给力，前阵子还吐了两次血，手也不对劲，估摸着是腱鞘炎犯了。再加上觉总睡不够，作息颠三倒四的，吃饭也没个准点儿，整个人透着股乏劲儿。</p>
<p>说实在的，这状态自己也揪心，毕竟身体是底子，再这么折腾下去怕是扛不住。慢慢调吧，先试着把觉补补，饭按时吃上，手头的活儿也得悠着点，总不能跟自己过不去不是。</p>
<h2 id="关于生活"><a href="#关于生活" class="headerlink" title="关于生活"></a>关于生活</h2><p>虽说这个月过得确实不怎么样，一地鸡毛的，但人生嘛，本就是起起落落的常态。没必要老盯着那些糟心事较劲，更犯不上钻牛角尖。真能做到不纠结、不较真，日子也就算顺顺当当的了。</p>
<p>一起玩不，哈哈湛江市65高渐离带带你呀？</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250727133333324.png" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250727133406935.png" alt="" loading="lazy" decoding="async"></figure>

<p>这个月心情一直不怎么顺，索性回了趟老家。家门前不知啥时候冒出棵龙眼树，这会儿挂的果子个头不大，剥开来肉也薄，尝了几个就没再吃，转身走了。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250727133514512.png" alt="" loading="lazy" decoding="async"></figure>

<p>最近总有些朋友同学约着出门，我也尽量把手里的活儿挪一挪，腾出空来陪他们走走。说实在的，我这阵子的状态，确实也该多出去松快松快，总闷着也不是回事儿。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250727133622153.png" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250727133633774.png" alt="" loading="lazy" decoding="async"></figure>

<p>好朋友就是这样，聊着聊着脚底下就没停步，不知不觉走了十公里，愣是踱到公园里头了。也不知道最近是不是有啥讲究日子，公园里穿汉装的姑娘们随处可见，绕着园子转了一圈，手里的相机咔咔没停，竟拍了三十多张。您要是觉得这举动不地道，说我几句也没啥好辩解的；实在是那些衣裳太俏，姑娘们穿得又精神，忍不住就多拍了几张。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250727133748536.png" alt="" loading="lazy" decoding="async"></figure>

<p>晚上回来，把东西忙完就奖励自己，家里小孩也接回来了，给小妹也整点吃的。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250727133826712.png" alt="" loading="lazy" decoding="async"></figure>

<p>没钓过鱼，但是又有两朋友约我出去钓鱼，我本是没打算去的，但是舅舅突然间就想去了，大太阳，我那两朋友又不去了，就我和老舅出去现买工具出去混了。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250727134046579.png" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250727134101890.png" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250727134131057.png" alt="" loading="lazy" decoding="async"></figure>

<blockquote>
<p>完事，咱就不多说了得走了，停更一段时间</p>
</blockquote>
]]></content>
  </entry>
  <entry>
    <title>代际观念与亲情现实的双重困局</title>
    <link href="https://koxiuqiu.cn/posts/18p2506291/" rel="alternate" type="text/html" />
    <link href="https://cn-nb1.rains3.com/kxqimage/img/20250629123422626.webp" rel="enclosure" type="image/webp" />
    <id>https://koxiuqiu.cn/posts/18p2506291/</id>
    <published>2025-06-28T16:00:00.000Z</published>
    <updated>2025-12-06T16:00:00.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="闲聊杂谈" scheme="https://koxiuqiu.cn/categories/%E9%97%B2%E8%81%8A%E6%9D%82%E8%B0%88/" label="分类" />
    <category term="日志" scheme="https://koxiuqiu.cn/tags/%E6%97%A5%E5%BF%97/" label="标签" />
    <category term="生活" scheme="https://koxiuqiu.cn/tags/%E7%94%9F%E6%B4%BB/" label="标签" />
    <summary type="text">安然无恙，各位； 最近发现，不少人和家里人都有些矛盾。明明是至亲，却过得像仇人似的。也不是想多管闲事，就是看得多了，心里头总沉甸甸的。随手写点想法，也没想着能解决什么，就当找个地方倒倒苦水。 我那哥们作为家里独苗，打小就被全家指着鼻子当顶梁柱养。因为是独生子，老的小的吃喝拉撒、家里家外人情往来，全跟座山似的压他一人肩上。里里外外全是窟窿眼；这事儿我跟他掰扯过多少回了，反复说跟家里人得讲究沟通法子，不是嘴巴张开张开就算完事的。 就好比这样说：他媳妇为了孩子择校跟老太太吵翻了天，他下班刚进门就凑上去劝，人家正火头上呢，他非扯着嗓子讲大道理，那能听得进去？人在...</summary>
    <content type="html"><![CDATA[<p>安然无恙，各位；</p>
<blockquote>
<p>最近发现，不少人和家里人都有些矛盾。明明是至亲，却过得像仇人似的。也不是想多管闲事，就是看得多了，心里头总沉甸甸的。随手写点想法，也没想着能解决什么，就当找个地方倒倒苦水。</p>
</blockquote>
<p>我那哥们作为家里独苗，打小就被全家指着鼻子当顶梁柱养。因为是独生子，老的小的吃喝拉撒、家里家外人情往来，全跟座山似的压他一人肩上。里里外外全是窟窿眼；这事儿我跟他掰扯过多少回了，反复说跟家里人得讲究沟通法子，不是嘴巴张开张开就算完事的。</p>
<p>就好比这样说：他媳妇为了孩子择校跟老太太吵翻了天，他下班刚进门就凑上去劝，人家正火头上呢，他非扯着嗓子讲大道理，那能听得进去？人在气头上的时候，血压飙得跟窜天猴似的，你就是拿八抬大轿请道理进门，人家也只当你是添堵的。这事儿我前前后后说了不下十遍，让他先冷处理，等两边气顺了再坐下来唠，可他偏不，每次都跟救火似的往上冲，最后闹得自己里外不是人。</p>
<p>说实在的，独生子难，可难就难在得学会绕弯子。硬碰硬跟家里人较劲，就跟拿鸡蛋撞石头似的，碎的只能是自己。日子就这么一天天熬着，谁不是在一地鸡毛里扒拉着过。</p>
<p>面对新旧观念这档子事，现在不少当父母的确实有点转不过弯。倒不是说他们故意跟孩子较劲，主要是上一辈人脑子里的老想法根深蒂固，那些年轻时管用的老理儿，搁现在孩子身上压根行不通。</p>
<hr>
<p>要说解决办法，我看也简单：</p>
<p>当父母的别总端着 “我吃的盐比你吃的米多” 的架子，听孩子说话时先把老脑筋松一松；</p>
<p>当孩子的也别嫌爹妈烦，想想他们当年也是摸着石头过河，多耐着性子掰扯两句。毕竟一家人过日子，不是争谁对谁错，是得让老理儿和新想法碰个头，找个都能下脚的地儿往前走。</p>
<hr>
<p>说起来也怪，现在好多家境不好的孩子，拼死拼活熬出了头，跟爹妈反倒处得跟仇人似的。反倒是那些家里条件优渥的，哪怕孩子活得平平淡淡，一家人反倒和和气气的。</p>
<p>打个例，这么个人，早年家里穷得叮当响，爹妈砸锅卖铁供他读书，后来他在大城市当上了经理，买车买房了，可每次回老家，跟他爸能吵得掀了屋顶。他爸总念叨 “你得帮衬弟弟”，他嫌老爹观念落后，俩人一说话就呛火。相对反过来，如果家里开厂子的，每天上班就是图个乐呵，跟他爸妈三天两头下馆子，朋友圈里全是一家人旅游的照片，看着就让人眼热。</p>
<p>有时候跟老伙计们唠这事儿，都觉得纳闷：按说苦日子熬出头了，该好好孝顺了，咋反倒生分了？后来琢磨着，可能穷日子过久了，爹妈心里头总揣着本经济账，觉得孩子有出息了就得 “回报” 家里，可孩子在外面见了世面，觉得爹妈那套 “养儿防老” 的理儿过时了。两边想法拧不到一块儿，可不就越处越僵？</p>
<p>反倒是家境好的，爹妈不图孩子挣多少钱，就盼着他们过得舒心，孩子也不用背着 “改变家庭命运” 的包袱，跟爹妈相处自然松快。你说这事儿闹心不闹心？钱这东西，有时候真能把人心隔开，穷人家的孩子出人头地了，却发现跟爹妈之间隔了道看不见的墙，富人家的孩子守着安稳日子，反倒能跟爹妈处成朋友。</p>
<p>反正日子就这么过着，见过太多这样的例子，心里头也没啥波澜了。就像老话说的，家家有本难念的经，有的经难在缺钱，有的经难在缺心，可真要论起来，到底是钱重要还是情重要，怕是没几个人能说得清。</p>
<hr>
<p>说到钱这事儿，不少当爹妈的都犯过糊涂；当着孩子的面掰扯家长里短的经济账，吵急了眼连锅碗瓢盆都能摔地上。 “家丑不可外扬”，给孩子整忘记了，这是生怕人家压力太小了。说穿了，钱是日子的骨头，亲情是包着骨头的肉。当着孩子面吵钱，就像拿刀子在肉上划口子，口子划多了，骨头露出来，看着硌得慌，摸着也疼。</p>
<p>这话可太实在了，跟家人呛声，十句里有八句都是这些话。前儿个还听见念叨，小孩中放学回家把书包一摔就嚷嚷：“你们就知道问考试成绩，谁问过我今天在学校开不开心？” 完了回头家长出去埋怨：“我早上五点起来熬粥，晚上盯着错题本到十点，咋就成了不考虑他感受？”</p>
<p><strong>家家都有本难念的经，有的缺铜钱响，有的缺人心暖。可在城市化狂奔的时代里，或许我们都该学学 “绕弯子” 的智慧；毕竟亲情不是撞南墙的硬刚，是明知观念有墙、时代有沟，仍愿意递过一杯温水，坐下来慢慢唠。</strong></p>
]]></content>
  </entry>
  <entry>
    <title>25年6月小结</title>
    <link href="https://koxiuqiu.cn/posts/17p2506281/" rel="alternate" type="text/html" />
    <link href="https://cn-nb1.rains3.com/kxqimage/img/20250629114919127.webp" rel="enclosure" type="image/webp" />
    <id>https://koxiuqiu.cn/posts/17p2506281/</id>
    <published>2025-06-27T16:00:00.000Z</published>
    <updated>2025-12-06T16:00:00.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="生活日志" scheme="https://koxiuqiu.cn/categories/%E7%94%9F%E6%B4%BB%E6%97%A5%E5%BF%97/" label="分类" />
    <category term="日常" scheme="https://koxiuqiu.cn/tags/%E6%97%A5%E5%B8%B8/" label="标签" />
    <category term="月度总结" scheme="https://koxiuqiu.cn/tags/%E6%9C%88%E5%BA%A6%E6%80%BB%E7%BB%93/" label="标签" />
    <summary type="text">安然无恙，各位； 这只是一篇记录文，对你可能无价值 网站方面 关于博客 把很久之前的废料和一些比较敏感的内容去除了，顺便把很久之前不懂事搞的推文和推广内容也去除了，大概也就花了一整天的时间吧… 所有资源一股脑儿都迁移到腾讯云上去了，这事儿可真是耗费了一整天工夫的主要原因，就跟搬家似的，东西多了就得一点点归置，这一整天光是盯着进度条和日志排查，眼睛都瞅得发涩，还请哪里有问题了就反馈一下。 顺便把下头修改了一下，给咱最抽象的丘盾链接安排上（访问量后面加的，之前的CN域名流量大） 顺便把一些文章做了隐藏处理，有些是觉得没必要公开发布，有些是内容上存在需要调整的...</summary>
    <content type="html"><![CDATA[<p>安然无恙，各位；</p>
<blockquote><p>这只是一篇记录文，对你可能无价值</p>
</blockquote>

<h2 id="网站方面"><a href="#网站方面" class="headerlink" title="网站方面"></a>网站方面</h2><h3 id="关于博客"><a href="#关于博客" class="headerlink" title="关于博客"></a>关于博客</h3><p>把很久之前的废料和一些比较敏感的内容去除了，顺便把很久之前不懂事搞的推文和推广内容也去除了，大概也就花了一整天的时间吧…</p>
<p>所有资源一股脑儿都迁移到腾讯云上去了，这事儿可真是耗费了一整天工夫的主要原因，就跟搬家似的，东西多了就得一点点归置，这一整天光是盯着进度条和日志排查，眼睛都瞅得发涩，还请哪里有问题了就反馈一下。</p>
<blockquote>
<p>顺便把下头修改了一下，给咱最抽象的丘盾链接安排上（访问量后面加的，之前的CN域名流量大）</p>
</blockquote>
<p>顺便把一些文章做了隐藏处理，有些是觉得没必要公开发布，有些是内容上存在需要调整的地方，还有些是因为资源修改量太大，图片的 URL 多得数不过来，内容也实在没什么可保留的价值，思来想去就先把它们隐藏起来了。这事儿就跟收拾屋子似的，总得把没用的东西归置归置，回头要是有需要再拿出来慢慢规整，现在先让页面显得清爽些。</p>
<p>噢，很早之前也隐藏了很多，前前后后都快七八十篇章了</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250629105123670.png" alt="" loading="lazy" decoding="async"></figure>

<blockquote>
<p>屏蔽的地方也全部联系处理</p>
</blockquote>
<h3 id="公益项目"><a href="#公益项目" class="headerlink" title="公益项目"></a>公益项目</h3><p>自打 “丘盾 CDN” 这个纯公益的内容分发网络加速平台诞生以来，前前后后算上之前那次停运，满打满算也有一两年的光景了。记得上回停运的时候，连域名都跟着过期了，说起来也是让人挺感慨的，毕竟这类公益项目从搭建到维护都不容易，就像看着个孩子慢慢长大，中间难免遇到些磕磕绊绊，好在这一路也算坚持下来了，里头的辛酸和不易，怕是只有真正操持过的人才能体会。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250629114229368.png" alt="" loading="lazy" decoding="async"></figure>

<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250629114241449.png" alt="" loading="lazy" decoding="async"></figure>

<blockquote>
<p>用户量蹭蹭涨，前前后后调整系统设置不下十回，什么违规访问、滥用资源、超量使用的情况全冒出来了，好在我疑心重和“闲”，盯着后台捋顺流程、堵漏洞，跟救火似的总算把这些坎儿都迈过去了。现在就盼着这平台能稳稳当当地运行下去，毕竟公益项目做到这份上，靠的就是一股子坚持，也希望用的人都能多些理解，大伙儿一起把这事儿长久地维持好。</p>
</blockquote>
<p>注册的时候系统会自动开通默认赠予的 12 个月海外订阅权益，等到期了，可以通过邮件或者其他指定方式来申请续订，操作起来也不复杂，到时候留意一下通知就行。</p>
<blockquote>
<p>群聊：1026237482 </p>
</blockquote>
<p>平时正常交流都没问题，但还请大伙儿多体谅，别去骚扰群主。毕竟现在谁没点生活压力，保不齐一时没控制住情绪失态了，大家互相理解着点图个和气，有问题按规矩来，都给彼此留点余地，这样相处着也舒服。</p>
<p>而且有事情最好是邮件，当然发起私聊是可以的，只是说有时候信息太多会被挤下去，然后莫名其妙被扣上不理人的帽子。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250629114251851.png" alt="" loading="lazy" decoding="async"></figure>

<h2 id="关于生活"><a href="#关于生活" class="headerlink" title="关于生活"></a>关于生活</h2><p>这阵子情感上的坎儿越堆越高，整个人就像被团乱麻缠着，连着几个月都闷得慌。你说怪不怪，这两天发生的事儿愣是记不清了，也正因如此，才想着写月小结；就跟家里记账似的，好歹能让自己知道这个月踩过哪些坑、遇过哪些事儿。</p>
<p>往后琢磨着调整下写小结的法子，如果某个月实在没啥可落笔的，或是忙得脚不沾地顾不上，干脆就随它去。其实啊，写小结本是为了梳理心绪，要是反过来成了负担，反倒失了本意。就像地里种庄稼，有丰收也有歉收，人这心情也跟季节似的，总有潮起潮落的时候，没必要硬逼着自己每个月都交出 “满篇干货”。</p>
<p>真要是赶上没什么可写的月份，权当给自己放个心假，哪怕拿个小本子随手记两笔碎片想法，或是拍张照片存着，回头翻看时也能知道 “哦，那个月我在好好吃饭、好好活着”，这就够了。比起硬撑着输出，先顾好自己的心神才是正经事啊。</p>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250629114300007.png" alt="" loading="lazy" decoding="async"></figure>

<blockquote>
<p>腾讯云给我刷欠费了，我这个人比较随性摆烂，设置好阈值就差不多了，低到很多人同时访问就会触发警报；早前不就写过文章说博客圈这光景，如今哪还能跟以前用 CN 域名那会儿比？就像老胡同里的茶馆，当年人挤人，现在门可罗雀才是常态。流量少，反倒落个清静，至少不用像以前似的天天盯着数据折腾。</p>
</blockquote>
<figure class="stellar-image"><img src="https://cn-nb1.rains3.com/kxqimage/img/20250629114306555.png" alt="" loading="lazy" decoding="async"></figure>]]></content>
  </entry>
  <entry>
    <title>封建派还是自由派，真的是我封建吗</title>
    <link href="https://koxiuqiu.cn/posts/16p2506131/" rel="alternate" type="text/html" />
    <link href="https://cn-nb1.rains3.com/kxqimage/img/20250629123408016.webp" rel="enclosure" type="image/webp" />
    <id>https://koxiuqiu.cn/posts/16p2506131/</id>
    <published>2025-06-12T16:00:00.000Z</published>
    <updated>2025-12-06T16:00:00.000Z</updated>
    <author><name>朽丘秋雨</name></author>
    <category term="闲聊杂谈" scheme="https://koxiuqiu.cn/categories/%E9%97%B2%E8%81%8A%E6%9D%82%E8%B0%88/" label="分类" />
    <category term="日志" scheme="https://koxiuqiu.cn/tags/%E6%97%A5%E5%BF%97/" label="标签" />
    <category term="生活" scheme="https://koxiuqiu.cn/tags/%E7%94%9F%E6%B4%BB/" label="标签" />
    <summary type="text">广东的朋友们，最近注意台风，减少外出 月小结会尽快恢复更新 偶然一现的念头，纯属虚构 还记很久很就之前的一个下午，阳光带着夏日特有的黏腻，把教学楼一楼的走廊烘得像块发酵过头的面包。健康牙齿活动的横幅在穿堂风里轻轻晃，红底白字的“爱护口腔 拥抱健康”被晒得有些褪色，底下几张蓝色折叠桌歪歪扭扭摆着，桌上堆着印着卡通牙齿的宣传单和塑料小牙杯。穿白大褂的医生正给路过的学生演示巴氏刷牙法，牙刷在牙齿模型上画出苍白的弧线，周围零星站着几个看热闹的人，手里捏着刚领的薄荷糖。 我是被喊下来要看医生的，手里攥着一叠纸，指尖被边角硌得发疼。活动区边上的柱子边下聚着几个学生，...</summary>
    <content type="html"><![CDATA[<p>广东的朋友们，最近注意台风，减少外出</p>
<blockquote>
<p>月小结会尽快恢复更新</p>
</blockquote>
<ul>
<li>偶然一现的念头，纯属虚构</li>
</ul>
<p>还记很久很就之前的一个下午，阳光带着夏日特有的黏腻，把教学楼一楼的走廊烘得像块发酵过头的面包。健康牙齿活动的横幅在穿堂风里轻轻晃，红底白字的“爱护口腔 拥抱健康”被晒得有些褪色，底下几张蓝色折叠桌歪歪扭扭摆着，桌上堆着印着卡通牙齿的宣传单和塑料小牙杯。穿白大褂的医生正给路过的学生演示巴氏刷牙法，牙刷在牙齿模型上画出苍白的弧线，周围零星站着几个看热闹的人，手里捏着刚领的薄荷糖。</p>
<p>我是被喊下来要看医生的，手里攥着一叠纸，指尖被边角硌得发疼。活动区边上的柱子边下聚着几个学生，其中一个女生让我多看了两眼。她穿件紫色的T恤，领口松松垮垮地斜挂在肩膀上，右边锁骨露了一片，皮肤在烈日中里泛着细白的光，个格外显眼。那衣服明显是好端端的圆领，领口的螺纹边都没变形，可她偏要用手指把一边衣领往下拽，拽得肩带若隐若现，布料皱巴巴地堆在锁骨下方，像是随手揉成一团又展开的抹布。</p>
<p>“你看她那样儿，”我碰了碰旁边的朋友，下巴朝那个方向扬了扬，“衣服不好好穿，非得弄成这样。”</p>
<p>顺着我目光看过去，嘴里嚼着刚领的薄荷糖，咔嚓咔嚓响了两声：“还行吧，现在挺多人这么穿的，露个肩又怎么了。”</p>
<p>“这不是露不露肩的事儿，”我捏紧了手里的东西，纸角被攥出褶皱，“你看那衣服，本来是正经领口，她偏要拽成那样，看着多随意。今天又不是什么晚会，就是楼下的健康活动，穿成这样像个学生吗？”</p>
<p>朋友把糖纸揉成一团，扔进旁边的垃圾桶，嘴角扯出个笑：“我说你是不是有点太封建了？人家衣服设计出来就是让人穿的，怎么穿是人家的自由。你看那领口，说不定本来就有点松，人家这么穿显得随性，有创意。”</p>
<p>“创意？”我有点发愣，看着那个女生抬手又把领口往下拽了拽，布料在她动作里滑得更低，“这叫创意？我看就是懒，就是不把自己当学生。你看她站那儿的样子，歪着身子靠在树上，衣服也不好好穿，哪点像个在学校里的样子？”</p>
<p>“学校里该是什么样子？”朋友挑眉，“非得穿得板板正正，头发梳得一丝不苟才算学生？现在都什么年代了，中职学校又不是高中，管那么严干嘛。人家觉得这么穿舒服，又没影响别人，你管那么多干嘛？”</p>
<p>我没话说了，可心里那股别扭劲没下去。我看着那个女生，她旁边的朋友也在笑，不知道说了什么，她低头又拽了拽衣服，露出一截更明显的肩膀。阳光从侧檐里漏下来，在她肩上投下斑驳的光影，可我怎么看都觉得那衣服穿得不对劲。那不是校服日，大家都穿便服，可便服也该有个学生的样子吧？不是说非得西装革履，可至少衣服要穿整齐，领口要正，对吧？</p>
<p>我想起上周班会，班主任还在讲台上说过，中职学生虽然学技术，但精神面貌不能丢，衣着得体是对自己的尊重，也是对校园环境的尊重。那时候我还觉得有点老生常谈，可现在看着眼前这一幕，突然觉得那些话不是没道理。这不是封建，也不是管闲事，而是我总觉得，在学校这个地方，尤其是在参加校园活动的时候，穿着打扮应该有个基本的分寸。</p>
<p>“我不是封建，”我憋了半天，又对朋友说，“你看她那件衣服，刚才她抬手的时候我看到了，领口本来是可以好好穿的，她就是故意拽成那样的。如果衣服本身设计就是露肩款，那没话说，但这明明是件正常的T恤，她偏要弄成这样，这不是随意是什么？”</p>
<p>“随意怎么了？”朋友耸耸肩，“年轻不就是要随意点吗？非得搞得像个小老头小老太太一样，把自己裹得严严实实才好？你就是太保守了，现在的审美不一样了，露个肩真没什么大不了的，你老人吗？”</p>
<p>“这不是审美问题，”我有点急了，声音不自觉提高了些，“这是态度问题。你看她站在那儿，对这个活动有没有一点在意？别人都在听医生讲怎么刷牙，她在那儿摆弄衣服，这难道不是对活动的不尊重吗？再说了，我们是学生，学生就该有学生的样子，这种样子传到外面去，别人会怎么看我们学校？”</p>
<p>“别人怎么看重要吗？”反问，“我们自己舒服最重要。再说了，穿衣服是个人自由，你不能用你的标准去要求别人。你觉得这样不得体，可人家觉得这样好看，这就是观念不同。你不能因为别人和你想法不一样，就说人家不对。”</p>
<p>我沉默了。观念不同吗？也许吧。可我看着那个女生，看着她那松垮的领口，心里那股不舒服的感觉还是挥之不去。我承认，现在的社会越来越开放，穿衣自由也被反复强调，可自由真的就等于可以完全无视场合和身份吗？在学校里，在一个面向全体学生的健康活动中，作为一个中职学生，穿着打扮是不是应该考虑一下是否合适？</p>
<p>我想起自己的衣柜，里面都是简单的T恤和牛仔裤，领口都是规规矩矩的圆领或翻领。我不是不会穿时髦的衣服，只是觉得在学校里，这样最舒服，也最“像”个学生。我不觉得这是死板，而是一种自我定位。中职学校教给我们技能，让我们以后能在社会上立足，但除了技能，难道不该也教我们如何规范自己的行为，如何在不同的场合表现出合适的样子吗？</p>
<p>那个女生还在和朋友说笑，时不时拽一下自己的领口。我看着她，突然想起以前看过的一篇文章，说现在的年轻人追求个性，喜欢用外在的打扮来表达自己。可个性真的需要通过“不好好穿衣服”来体现吗？真正的个性，难道不应该是内在的独立思考和自我修养，而不是流于表面的形式吗？</p>
<p>“我知道现在讲究自由，”我又开口，声音比刚才低了些，“可自由不是想干什么就干什么，尤其是在学校里。我们是学生，学校是学习的地方，不是时装秀场。就算不是校服日，穿衣服也该有个度。你看她那件衣服，好好穿在身上其实挺好看的，可她偏要弄成那样，显得拖拖拉拉，没精神。这不是封建，这是我觉得，作为学生，我们应该对自己的形象有点要求，这不是为了别人，是为了自己。”</p>
<p>朋友没再反驳，只是看着我笑了笑，那笑容里好像有点无奈，又有点觉得我不可理喻。我知道，她可能还是觉得我太“老派”，太在意这些“小节”。可我没法说服自己认同那种随意的态度。</p>
<p>活动快结束的时候，那个女生终于把衣服整理了一下，领口恢复了正常的位置，肩膀也遮了起来。那一刻我突然觉得，其实这样挺好的，简单、干净，看着也舒服。原来那件衣服并不是不能好好穿，只是她之前选择了一种更随意的方式。</p>
<p>阳光没那么烈了，穿堂风带着点凉意吹过走廊。我和往宿舍楼里走，谁都没再提刚才的事。可我心里还在琢磨，到底什么是合适的学生形象？是必须统一着装，还是可以有个人风格，但要把握分寸？</p>
<p>也许朋友说的有道理，观念在变化，我们不能用旧的标准去框定现在的年轻人。可我还是觉得，有些基本的东西不该变。比如对场合的尊重，对自己身份的认知。中职学校的学生，以后大多要走向职场，职场有职场的规范，校园其实就是一个小小的社会，我们在这里学习的，不仅是技能，还有如何做一个得体、有分寸的人。</p>
<p>衣服穿得是否露肩也许只是一件小事，但小事背后反映的，是一个人对自己、对环境的态度。我不觉得自己封建，我只是坚持认为，在合适的时间、合适的地点，做合适的事，穿合适的衣服，这不是束缚，而是一种基本的自我管理。</p>
<p>走到楼梯口的时候，我回头看了一眼楼下，那个女生已经走了，梧桐树下空荡荡的，只有几张被风吹散的宣传单。阳光照在地上，把树影拉得老长。我深吸了一口气，跟着上了楼，心里那点别扭劲慢慢散了；每个人都有自己的想法，我不能强求别人认同我，但我可以坚持自己认为对的东西。这不是固执，而是我作为一个中职学生，对自己的一点要求，对“学生”这个身份的一点理解。</p>
]]></content>
  </entry>
</feed>
