刚打开B站消息中心那一瞬间,很多人应该都体会过那种无力感:右上角堆着“999+”,回复、@、点赞和系统通知混在一起,想找一条真正重要的私信,你得在一大堆已读未读里翻好几页。更麻烦的是,B站网页端没有那种“一键全部已读”的消息整理能力,就算只清理几十条低价值动态提醒,也得手动一条条点开、标记、忽略,整个过程基本是重复劳动。
“B站消息清理助手 v0.2”这类油猴插件,解决的就是这个痛点。它不是一个独立App,也不需要在手机和电脑上反复登录账号。它是运行在浏览器里的用户脚本,跟随你当前的B站会话工作,把消息中心里那些机械操作变成自动化的批量流程。这篇文章不只讲怎么装,还会拆开来看它背后的油猴脚本原理、多端适配思路、免登录机制的实现逻辑,以及实际使用中容易踩的坑。
如果你正在被B站消息红点困扰,或者你自己想写一个针对站点页面的油猴插件,这篇内容值得看完。
1. B站消息清理到底难在哪里
先说一个判断:B站消息清理并不是“不能清理”,而是“清理成本太高”。这里的成本主要是操作次数和注意力成本。
1.1 消息类型多,处理方式不统一
B站消息中心至少包含以下几类:
| 消息类型 | 来源 | 常见处理诉求 |
|---|---|---|
| 回复消息 | 评论/弹幕被回复 | 想要知道对方说了什么 |
| @消息 | 别人在评论或动态中@你 | 需要点进去看上下文 |
| 点赞消息 | 点赞了你的评论或动态 | 基本无信息量 |
| 系统通知 | B站运营活动、公告 | 大部分不想看 |
| 私信 | 用户私聊 | 重要程度高,需保留 |
问题在于,不同消息类型的价值完全不一样。点赞消息和系统通知属于低价值消息,但又会持续产生未读红点;回复和@消息属于需要处理的消息,但处理完以后也没必要一直留在未读列表里。如果只是简单粗暴地“全部已读”,你可能会错过真正重要的内容,这才是清理脚本真正需要设计的地方。
1.2 手动清理的场景有多低效
如果你只有几十条未读,手动点也就算了。但对于长期不清理消息的用户,未读数量很容易到几百甚至上千。这时B站消息中心的交互就变得非常难受:
- 列表是分页加载的,一页一页翻效率很低;
- 部分消息需要点进去才能标记已读,不能直接在列表里批量处理;
- 每一条消息的“忽略”或“移除”操作通常都要经过菜单或弹层确认;
- 消息列表还可能在滚动加载后重新渲染,导致你找不到刚才定位的位置。
这些零碎的操作加起来,清理一次消息可能要花十几分钟,而且过程极度枯燥。一个能遍历当前列表、识别已读状态、自动执行忽略或标记操作的脚本,就能把这十几分钟压缩到几秒钟。
1.3 为什么不直接用接口或第三方客户端
有人会问,B站有API,直接用接口清理不就行了?技术上是可行的,但实际使用有门槛:
- 需要理解B站消息接口的鉴权机制,比如 Cookie、CSRF Token;
- 高频率请求可能触发风控;
- 第三方客户端或协议库未必长期维护,接口一变就失效;
- 直接在本地写脚本调用,可能需要额外处理登录态,安全性很难保证。
而油猴脚本运行在浏览器页面环境里,天然继承了当前页面的登录态,不用自己管理Cookie、不用存储密码、也不用单独做登录页面。这也是“多端免登录”含义的一部分:不是绕过B站登录,而是利用浏览器里已经存在的登录会话来完成操作。理解这一点非常重要,后面我们还会详细展开。
2. 油猴脚本的核心概念与适用边界
2.1 什么是油猴脚本
“油猴”是用户脚本管理器的通俗称呼,最早源于Greasemonkey,后来在中文社区里被泛指为Tampermonkey、Violentmonkey等用户脚本管理器。它们的作用是让用户通过一段 JavaScript 脚本,在特定网页加载后自动执行自定义逻辑。
油猴脚本和浏览器扩展(Extension)不同:
| 对比项 | 油猴脚本 | 浏览器扩展 |
|---|---|---|
| 安装成本 | 低,复制安装或打开.user.js链接即可 | 较高,需要打包、加载、审核 |
| 权限范围 | 由匹配规则限制,权限较小 | 可申请完整权限,能力更强 |
| 开发难度 | 低,适合个人小工具 | 中高,需要了解扩展API |
| 更新方式 | 可通过@updateURL或用户脚本源自动更新 | 依赖商店或手动加载 |
| 适用场景 | 页面增强、数据填充、重复操作自动化 | 需要原生能力、后台服务、多标签协同 |
“B站消息清理助手 v0.2”选择做成油猴脚本而不是浏览器扩展,核心原因就是它只依赖B站页面本身和API接口,不需要额外的后台权限。安装一个脚本管理器,再安装一个脚本,就可以在B站消息中心页面运行。
2.2 用户脚本的运行方式
用户脚本不是运行在浏览器插件后台,而是注入到匹配的页面中。简单说,当你打开message.bilibili.com时,脚本管理器会检查当前网址是否匹配脚本里的@match规则,如果匹配,就把脚本注入到页面里执行。
这里要解释一个细节:用户脚本既可以直接操作页面DOM,也可以通过GM_xmlhttpRequest发起跨域请求,或者借用页面已有的Cookie、Token向B站同域接口发送请求。大多数消息管理类脚本会选择后一种方式,因为它不依赖页面上的按钮结构,稳定性更好。
2.3 什么是“多端免登录”
“多端”通常指两件事:
第一,脚本能同时适配桌面浏览器和移动端页面。B站在不同设备上可能使用不同页面结构或跳转到不同子域名,脚本需要识别当前环境,选择合适的处理逻辑。
第二,脚本的配置和运行状态可以跟随账号,而不是绑定某一台电脑。用户脚本管理器通常支持云同步,只要你在多个设备上安装同一个管理器并登录同步账号,脚本就能在多个设备上同时生效。
“免登录”则体现在:脚本本身不保存账号密码,不诱导额外授权,也不要求你去填写任何B站凭证。它的运行过程是“借用”当前Tab页里的登录会话。也就是说,只有当你在浏览器里已经登录B站时,脚本才有权限清理消息;未登录状态下脚本只会提示或停止执行,不会偷偷尝试登录。
这个设计既降低了滥用风险,也让普通用户更容易安装使用:开一个已登录B站的标签页,刷新一下消息中心,脚本就自动就绪了。
2.4 新手最容易误解的地方
很多新手会把“免登录”理解成“不用登录B站也能清理消息”,这个理解是错的。B站消息数据属于用户私有数据,不可能在未登录状态下访问。
正确理解是:免去的是脚本侧的“额外登录流程”。只要你浏览器里已经登录B站,脚本拿起这个会话就能直接工作,不需要再输一次账号密码,也不用扫码。对于用户来说,体验上接近“打开页面就能用”,所以叫“免登录”。
3. 环境准备与安装前置条件
在安装“B站消息清理助手 v0.2”之前,需要先准备好运行环境。下面以最常见的桌面浏览器为例说明。
3.1 支持的浏览器和管理器
用户脚本的主流运行环境包括:
| 浏览器 | 推荐的脚本管理器 |
|---|---|
| Chrome / Edge | Tampermonkey、Violentmonkey |
| Firefox | Tampermonkey、Violentmonkey |
| Safari | Tampermonkey(需要使用扩展方式) |
| 移动端浏览器 | Kiwi Browser(Chrome内核)等支持扩展的浏览器可安装Tampermonkey |
安装脚本管理器本身属于浏览器扩展安装,不在本文章法不安全范围内,建议从官方应用商店搜索 Tampermonkey 或 Violentmonkey 后安装。
安装完成后,浏览器工具栏一般会出现管理器图标,点开就能看到“管理面板”入口。
3.2 获取脚本的两种常见方式
用户脚本的发布通常有两种形式:
第一种:直接打开 .user.js 链接
当开发者提供一个以.user.js结尾的安装链接时,安装了Tampermonkey的浏览器会弹出安装确认页。点击“安装”即可完成。
第二种:复制源码到管理面板
如果脚本以纯文本发布,你也可以打开Tampermonkey管理面板,新建脚本,把源码粘贴进去并保存。
由于“B站消息清理助手 v0.2”在不同渠道发布的版本可能不同,安装时应优先选择作者提供的最新.user.js文件地址。如果只找到旧版本,不要直接使用,以免B站页面更新后脚本失效。
3.3 安装后的状态检查
安装成功后,需要确认以下三个条件是否满足:
- 脚本管理器处于启用状态;
- 脚本没有因为语法错误被禁用;
- B站账号已经登录。
此时打开https://message.bilibili.com或从B站首页进入“消息”页面,如果脚本正确注入,页面右上角或自定义按钮区域会出现清理入口。如果没有出现,可以点击脚本管理器图标,查看当前页面是否匹配脚本的@match规则。
3.4 版本选择建议
v0.2 更多是功能迭代版本,而不是稳定正式版。从命名习惯看,这类“小版本号”脚本往往意味着刚解决了一个重要问题,但还没有经过大量用户验证。如果你依赖脚本处理重要消息,建议在使用前先备份B站私信等重要数据,或者先在未读消息较少的账号上测试效果。
4. 核心实现逻辑与关键代码拆解
这一节从技术角度拆解,一个类似“B站消息清理助手”的用户脚本,通常由哪些关键部分组成。下面代码是通用实现演示,用来帮助理解脚本的验证逻辑。安装时应以作者发布的完整源码为准。
4.1 用户脚本的元数据块
所有用户脚本都要在文件头声明一个元数据块,用来描述脚本名称、匹配网址、版本、权限等信息。
一个典型的元数据块如下:
// ==UserScript== // @name B站消息清理助手 v0.2(多端免登录) // @namespace bili-msg-cleaner // @version 0.2 // @description 在B站消息中心批量清理低价值消息,兼容桌面与移动端常见页面 // @author bili-msg-cleaner // @match https://message.bilibili.com/* // @match https://www.bilibili.com/* // @match https://t.bilibili.com/* // @run-at document-idle // @grant GM_registerMenuCommand // @grant GM_getValue // @grant GM_setValue // @grant GM_xmlhttpRequest // ==/UserScript==这段代码的要点是:
@match决定了脚本在哪些网址生效。消息中心的域名通常是message.bilibili.com,但有些动态消息会跳转到t.bilibili.com,所以需要一并匹配。@run-at document-idle表示页面加载完成后运行脚本。这样能避免页面结构和脚本初始化逻辑冲突。@grant声明了需要使用的油猴API。如果脚本要跨域请求或者持久化配置,就必须在元数据中列出对应权限。
4.2 判断移动端还是桌面端
“多端”不是一句空话,页面结构差异意味着选择器、点击坐标、接口调用方式都可能不同。下面是一段常见的环境识别代码。
(function () { 'use strict'; const UA = navigator.userAgent; const isMobile = /Android|iPhone|iPad|iPod|Mobile/i.test(UA); const isBiliMessagePage = location.hostname.indexOf('message.bilibili.com') !== -1; console.log('[B站消息清理助手] 当前设备:' + (isMobile ? '移动端' : '桌面端')); console.log('[B站消息清理助手] 当前页面:' + location.href); if (!isBiliMessagePage) { console.log('[B站消息清理助手] 不在消息中心,脚本不执行清理逻辑'); return; } // 后续不同端逻辑从这里分支 if (isMobile) { initMobileCleaner(); } else { initDesktopCleaner(); } })(); function initDesktopCleaner() { // 桌面端消息中心适配逻辑 console.log('[B站消息清理助手] 桌面端清理器启动'); } function initMobileCleaner() { // 移动端或响应式页面适配逻辑 console.log('[B站消息清理助手] 移动端清理器启动'); }注意:实际脚本不会只靠navigator.userAgent判断,因为很多浏览器在PC上也会伪装移动端UA。更稳妥的做法是结合页面宽度、是否存在移动端导航栏、消息区块的DOM特征综合判断。
4.3 注册一个可点击的菜单命令
用户脚本最常见的交互方式是往Tampermonkey菜单里注册一个命令。用户点击菜单项后,脚本立即执行某个清理函数。
function startClean(feedType) { // 不同消息类型可以传入不同参数 console.log('[B站消息清理助手] 开始清理,类型:', feedType || '全部'); // 这里通常会调用下一页要展示的批量处理核心逻辑 } GM_registerMenuCommand('清理全部未读消息', function () { startClean('all'); }); GM_registerMenuCommand('清理点赞/互动类消息', function () { startClean('like'); });GM_registerMenuCommand是Tampermonkey提供的菜单注册API。点击脚本管理器图标时,鼠标悬停在脚本名称上会展开菜单,用户就能看到这些自定义命令。
这种交互方式的好处是:不需要修改B站页面本身,也不容易因为B站改版导致按钮消失。缺点是不够直观,普通用户不知道去菜单里找。
4.4 处理B站单页应用的动态加载
B站消息中心属于典型的单页应用结构。页面切换、列表加载不一定触发整页刷新,而是由前端JavaScript动态更新DOM。如果脚本初始化后只绑定一次事件,很容易因为页面内容变化而失效。
一个成熟的选择是使用MutationObserver监听页面变化:
let observer; function waitForPageChange(callback) { const debounceTimer = 300; let timer = null; if (observer) { observer.disconnect(); } observer = new MutationObserver(function (mutations) { clearTimeout(timer); timer = setTimeout(function () { callback(); }, debounceTimer); }); observer.observe(document.body, { childList: true, subtree: true }); } waitForPageChange(function () { console.log('[B站消息清理助手] 页面结构发生变化,开始重新扫描消息列表'); // 建议在这里重新获取列表元素,而不是保留旧的元素引用 });使用MutationObserver有两个好处:一是能捕获前端路由切换带来的页面变化;二是不会像setInterval那样频繁执行,浪费性能。
但这里有个细节:脚本不能每次DOM变化都执行一次完整清理。一次清理操作可能触发多个DOM变化,从而引发连锁调用。所以主逻辑里通常会有“是否正在清理”的锁标记,或者用“清理按钮存在就不重复添加”的判断。
4.5 批量操作的安全节奏
清理脚本面临一个实际风险:高频请求会被B站风控拦截。比如你一次性对几十条消息调用“忽略”接口,服务器很可能返回异常状态码甚至临时封禁接口权限。
一个常见的处理是引入节奏控制,每次只处理一小批,完成后再等待几百毫秒继续下一批。
function processInBatches(items, batchSize, delayMs, callback) { const batchCount = Math.ceil(items.length / batchSize); let currentBatch = 0; function runNextBatch() { if (currentBatch >= batchCount) { callback('任务完成'); return; } const start = currentBatch * batchSize; const end = Math.min(start + batchSize, items.length); const batch = items.slice(start, end); // 处理当前批次的业务逻辑 console.log('[B站消息清理助手] 处理第 ' + (currentBatch + 1) + '/' + batchCount + ' 批,共 ' + batch.length + ' 条'); currentBatch++; setTimeout(runNextBatch, delayMs); } runNextBatch(); } // 示例调用:将100个待处理ID按每批10个处理,每批间隔800ms processInBatches([], 10, 800, function (message) { console.log('[B站消息清理助手] ' + message); });这里把items留空是为了避免与真实B站接口参数混淆。实际使用时,你需要根据自己的消息数据结构来填充这个数组。
4.6 免登录请求的基本思路
用户脚本里请求B站接口时,一般不会把用户名密码写在代码里,而是依靠浏览器在当前域名下保存的Cookie。比如消息中心页面会携带用户的登录凭证,脚本只要向同域API发起请求,请求头里就会自动带上Cookie。
在油猴环境里,如果请求的接口和当前页面同域,可以直接用fetch或XMLHttpRequest;如果需要跨域请求,通常要用GM_xmlhttpRequest,并在元数据里声明授权。
一个简化的同域请求示意如下:
async function markMessageRead(messageId) { const csrfToken = getCsrfTokenFromPage(); const formData = new FormData(); formData.append('id', messageId); formData.append('csrf', csrfToken); try { const response = await fetch('/api/msg/mark_read', { method: 'POST', credentials: 'include', body: formData }); const result = await response.json(); if (result.code === 0) { // 操作成功 } else { // 处理失败 } } catch (error) { console.error('[B站消息清理助手] 标记已读失败', error); } }这段代码不完整,因为B站具体消息接口的路径和参数并不是固定不变的,且不同版本可能有差异。这里只是想说明请求逻辑的骨架:从页面读取csrf参数、携带Cookie、用POST提交、按返回码判断成功还是失败。
如果你要自己分析真实接口,可以在B站消息中心打开浏览器开发者工具,手动点击一次“标记已读”或“忽略”,再观察Network面板中实际发起的是哪个接口、传了什么参数。
5. 桌面端和移动端的使用体验差异
5.1 桌面端消息中心
桌面端是“B站消息清理助手”最常用的场景。B站消息中心在桌面浏览器上通常有左侧分类导航和右侧消息列表。脚本可以扫描当前分类下的所有列表项,判断哪些是未读,哪些已经处理过。
用户更关心的是以下操作是否被拆分清楚:
- 只清理低价值消息;
- 保留未读的私信和重要回复;
- 提供进度提示;
- 不会误删任何消息。
理想情况下,脚本的“清理”不是删除数据,而是标记已读、忽略或从当前列表中移除。这样才能避免不可逆损失。
5.2 移动端浏览器的适配难度
很多用户希望在手机浏览器上通过Kiwi Browser等支持扩展的浏览器使用油猴脚本。然而移动端适配没有想象中简单:
- 移动端可能使用不同的路由地址;
- 部分B站页面在移动端会强制跳转到App内打开,浏览器无法正常获取信息;
- 移动端页面的DOM类名可能与桌面端完全不同;
- 小屏环境下不适合在页面插入复杂按钮,更适合用菜单命令触发。
所以如果你看到脚本标明“多端”,不要默认它一定在所有移动端App内置浏览器里都能用。通常它优先支持的是手机版Chrome内核浏览器中的消息中心网页。
5.3 配置与状态的跨端同步
“多端免登录”会给用户带来一个疑问:我在电脑上清理过的消息,在手机端还会出现吗?
这个问题的答案取决于B站消息状态是否已经同步。如果脚本通过官方接口标记了已读或忽略,那么服务端状态会变更,其他设备重新拉取消息时也会显示已处理。也就是说,脚本实现的是真正的清理操作,而不是只隐藏当前页面上的元素。
假如是纯前端隐藏,那就只是在当前浏览器里“看着没了”,服务端数据还在,换设备之后消息又会重新出现。这是判断一个清理脚本是否成熟的重要标准。
6. 脚本使用中的常见问题与排查方法
在使用类似“B站消息清理助手”的用户脚本时,你可能会遇到下面这些问题。这里整理了一份常见的排查表:
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 打开消息中心后看不到脚本按钮 | 网址不匹配脚本的 @match 规则 | 点击油猴图标查看脚本是否在当前页面生效 | 修改元数据中的 @match,添加当前域名 |
| 脚本菜单存在但点击无反应 | 页面结构变化,脚本绑定的DOM节点失效 | 打开控制台查看报错信息 | 更新脚本到最新版本,或检查B站是否改版 |
| 清理进行到一半停止 | 触发了B站风控或接口限流 | 查看Network面板中是否有非200响应 | 降低处理速度,增加批次间隔 |
| 部分消息没有被清理 | 消息类型不同,脚本没有覆盖该分类 | 检查脚本支持的消息类型列表 | 手动处理这类消息,或反馈给脚本作者 |
| 换设备后配置丢失 | 脚本配置没有开启同步或没有云同步 | 查看浏览器脚本管理器的同步状态 | 开启同步功能,或在多端手动配置 |
6.1 脚本管理器图标显示红色
有些浏览器扩展在“无痕模式”下默认禁用。如果脚本在普通页面正常,但在无痕页面失效,需要进入扩展管理页,允许Tampermonkey在无痕模式下运行。
6.2 B站页面改版后脚本失效
这是油猴脚本最常见的问题。B站只要修改了某个按钮的CSS类名、调整了消息接口的返回字段,脚本就可能失灵。遇到这种情况,请先确认你安装的脚本是否有新版本,作者通常会在评论区或发布页说明适配情况。如果找不到新版,就暂时停止使用,等待更新。
6.3 清理结果与预期不一致
使用任何消息管理工具,都要先明确一个原则:不同消息类型需要的操作不同。盲目“清理全部”可能把你还没有看过的重要回复一起标记为已读。脚本如果提供了“仅清理低价值消息”“跳过未读回复”这类选项,你最好在正式使用前理解清楚参数含义。
7. 最佳实践与安全建议
7.1 将消息分类再清理
对你的使用场景进行分类永远是最高优先级:
- 私信:不要自动清理;
- 回复/@消息:需要先查看内容,确认无价值后再清理;
- 点赞消息:可以放心批量清理;
- 系统通知:部分具有活动提醒价值,自行判断是否清理。
如果脚本只提供“全部清理”功能,建议你谨慎使用。真正的效率工具应该允许用户定义哪些消息可清理、哪些必须保留。
7.2 用小批量验证再全量执行
第一次使用脚本时,不要直接对几百条未读消息执行全量清理。建议先选择“只处理当前页”或“只处理一批”这类小范围模式。确认效果符合预期后,再执行全量操作。这样可以避免因为选择器错误或接口参数异常,造成不可预期的结果。
7.3 注意脚本来源安全
这是油猴脚本用户最容易忽视的问题。用户脚本能读取当前页面内容、模拟用户操作、甚至向接口发送请求。如果是一个恶意脚本,它可以窃取你当前网站的数据,也可能伪装成清理工具诱导你点击危险操作。
因此,安装任何用户脚本都应当遵循三个原则:
- 只从作者的官方发布渠道或可信社区获取脚本;
- 检查脚本源码,尤其注意是否有向第三方域名发送数据的代码;
- 不使用来路不明的“一键版”“破解版”脚本。
不要因为某个脚本号称“免登录”“多端”,就放松对安全性的警惕。
7.4 不要依赖脚本管理重要私信
B站私信可能包含工作沟通、朋友联系方式等重要信息。消息清理脚本的主要价值是整理低价值通知,而不是替你管理重要对话。在运行任何清理操作前,对私信等关键数据做好离线备份,始终是稳妥的工程习惯。
7.5 保持脚本更新节奏
油猴脚本的更新不像App Store那样有强制审核,很多人安装后可能几个月不更新,直到某天B站页面改版才发现脚本失效。
建议你每隔一段时间回到脚本发布页检查版本号,或者在Tampermonkey设置里开启脚本更新检查。如果你自己修改过脚本源码,更新时要注意本地修改可能会被覆盖。
8. 自己写一个消息清理脚本需要什么能力
如果你对“B站消息清理助手”的内部实现好奇,也可以把这个项目当作一个学习样本。自己写一个类似的油猴脚本,需要以下能力:
- 理解JavaScript基础语法、异步编程和DOM操作;
- 能使用浏览器开发者工具分析页面结构和网络请求;
- 熟悉用户脚本管理器的元数据规则和API;
- 了解B站消息中心的页面分类和基本交互逻辑;
- 具备一定的接口请求节奏控制和异常处理经验。
更具体地说,你首先要做的是打开B站消息中心,用开发者工具查看消息列表的HTML结构,找出每条消息的唯一定位方式。接着手动执行一次标记已读或清理操作,观察Network面板里的请求详情。当你理解了“页面上做了什么操作、底层发了什么请求”之后,再用脚本把整个过程自动化,这就是开发用户脚本的基本路径。
另外提醒一句:油猴脚本本质是浏览器前端自动化,不应当被用来绕过平台限制或批量发送恶意请求。把它用在提升自己的操作效率上,才是合理的方向。
9. 总结与下一步建议
“B站消息清理助手 v0.2(多端免登录)”并不是一个复杂到无法理解的工具。它展示了用户脚本体系的一个典型价值:在网页端的机械操作太多时,用一段JavaScript把重复劳动自动化,同时借助浏览器已有的登录态,避开复杂的账号接入流程。
对于使用层面的读者来说,你要做的准备很明确:安装Tampermonkey或Violentmonkey,从可信渠道获取脚本,在已登录B站的浏览器中进入消息中心,再通过脚本菜单触发清理。对于想深入技术原理的读者来说,这篇文章提到的元数据配置、移动端判断、MutationObserver监听、批量请求节奏控制,以及“先从页面操作和网络请求反推实现”的开发思路,都是你开始写第一个油猴脚本时可以继续深挖的方向。
最后还想补充一个实用建议:像B站这样的前端页面每隔一段时间就可能调整,旧版脚本失效是常态,不是个例。安装一个脚本后,不要把它当成永久有效的工具。每当脚本表现异常,先检查B站页面是否更新,再去看脚本作者是否发布了新版本。对于消息类数据,操作前备份重要内容,永远比事后想办法恢复数据更可靠。