飞书登录怎么接:Web、桌面客户端、飞书内 H5 与移动端方案对比
给企业内部系统接入飞书登录时最容易出现的误区是看到“飞书免登”四个字就以为所有客户端都能用同一套接口。实际上普通 Web 网站、独立桌面客户端、飞书客户端内嵌的 H5 应用以及 Android、iOS原生应用运行环境完全不同。它们都可以完成飞书身份认证但获取授权凭证、接收回调和保存登录状态的方式并不一样。下面从应用形态出发梳理几种常见方案的工作原理、适用场景、优缺点以及开发时容易踩到的坑。先判断什么独立桌面端普通 Web飞书内 H5原生移动端运行位置操作系统安装的独立应用普通浏览器飞书客户端网页容器Android/iOS App谁接收 OAuth 回调后端、Loopback 或操作系统协议Web 后端/回调页H5 先从 JSAPI 取 codeApp SDK 回调是否依赖安装飞书否否是视 SDK 和降级策略而定首选方案系统浏览器 OAuth浏览器 OAuthrequestAccess飞书移动授权 SDK需要特别注意在飞书 PC 客户端里打开的网页仍属于“飞书内 H5”不能因为它运行在电脑上就把它当作独立桌面客户端。先明确一件事客户端不负责“证明用户是谁”无论采用哪种方式授权码code都只能算一张短期凭证不能直接当作业务系统的登录结果。不同场景中code可能由前端 SDK 收到也可能由用户浏览器直接送到后端redirect_uri。完整的信任链应该是应用把用户引导到飞书授权环境或者在飞书客户端内调用免登 JSAPI。飞书签发临时授权码code由前端提交给业务服务端或由浏览器重定向到服务端。服务端使用 App ID、App Secret 和code换取飞书user_access_token再获取用户身份信息。服务端在明确的应用和租户范围内匹配本地账号。服务端建立自己的登录会话例如设置 HttpOnly Cookie或者签发业务系统 Token。这里最重要的原则是App Secret 只能保存在服务端不能打包到网页、Electron 或移动客户端中。客户端负责发起授权飞书负责证明身份业务服务端负责建立“飞书用户”和“本地账号”的对应关系并决定这个用户最终能不能进入系统。账号映射不能只存一个含义模糊的“飞书用户 ID”。open_id是应用维度的用户标识需要跨同一开发主体下的多个应用识别用户时才考虑相应作用域下的union_id。多租户系统还要保存tenant_key或等价租户标识并把它纳入唯一约束不能把不同租户、不同应用的 ID 当成可互换主键。方案一系统浏览器 OAuth适合独立桌面客户端这是独立 Windows、macOS 或 Electron 客户端更符合 OAuth 原生应用安全实践的方案。RFC 8252 推荐原生应用使用系统浏览器等外部 User-Agent而不是应用可控制的 WebView。登录流程桌面客户端请求业务服务端生成飞书授权地址 ↓ 客户端使用系统默认浏览器打开授权地址 ↓ 用户在飞书页面登录并确认授权 ↓ 飞书携带 code、state 回调业务服务端 ↓ 服务端用 code 换取飞书用户身份并匹配本地账号 ↓ 服务端生成短时、一次性的登录 Ticket ↓ 浏览器跳转 com.example.desktop:/oauth/callback?ticketxxx ↓ 操作系统唤起桌面客户端 ↓ 客户端用 Ticket 换取业务系统 Token这里通常会注册一个自定义协议例如com.example.desktop:/oauth/feishu/callback飞书的重定向地址仍然配置成业务服务端的 HTTPS 地址而不是直接配置自定义协议。服务端完成身份校验后再跳转到自定义协议唤起客户端。为什么要增加一次性 Ticket服务端当然可以把业务系统的 Access Token 直接拼在com.example.desktop:/地址里但不建议这样做。URL 可能出现在浏览器历史记录、系统日志、代理日志或者崩溃报告中。私有协议名最好使用自己持有域名的反向形式降低与其他应用冲突的概率。更安全的做法是签发一个高熵、有效期只有一两分钟、使用一次后立即失效的随机 Ticket。客户端拿到 Ticket 后再通过 HTTPS 请求换取真正的业务 Token。服务端最好只保存 Ticket 哈希并采用原子操作完成消费。这样有几个好处飞书 Token 不会进入客户端。业务 Access Token 不会暴露在浏览器地址栏。Ticket 即使泄露也有很短的攻击窗口。服务端可以原子消费 Ticket防止重复兑换。不过“短时、一次性”并不能解决所有问题。私有协议可能被其他应用抢先注册恶意应用如果截获 Ticket 后先完成兑换真正的客户端仍然会失败。因此 Ticket 还应绑定登录发起端持有的随机verifier使用类似 PKCE challenge 的方式证明“兑换者就是发起者”。操作系统支持且部署条件允许时也可以优先考虑经过域名所有权验证的 HTTPS App Link/Universal Link。标准 OAuth 原生客户端流程如果支持 PKCE应使用 S256。优点使用系统浏览器的现有登录状态用户往往不需要再次输入飞书密码。飞书登录页面运行在用户信任的浏览器中客户端接触不到账号密码。不要求电脑必须安装飞书客户端。不限定 ChromeEdge 或其他系统默认浏览器都可以。同一套后端 OAuth 逻辑可以复用到 Windows、macOS 和 Linux。缺点登录时会短暂离开桌面客户端。需要正确注册自定义协议并处理应用未启动、已经启动和重复唤起等状态。Electron 应用通常还要实现单实例锁否则回调可能启动第二个客户端进程。回调 URL 必须登记在飞书开放平台并且能被用户浏览器访问生产环境通常使用 HTTPS。如果产品形态是独立桌面客户端我更推荐这一方案。它的交互不是最“无感”的但身份页面和客户端处于不同安全上下文兼容性也更好。这里的 Ticket Bridge 是业务系统自己的衔接设计不是飞书提供的现成组件。方案二飞书客户端内 H5 免登飞书 V6.9 及以上客户端应优先使用requestAccess获取免登授权码window.tt.requestAccess({appID:your_app_id,scopeList:[],success(res){// 将 res.code 发送给业务服务端}})scopeList为空时用于获取登录身份需要增量授权时再按最小权限原则填写。requestAuthCode是 V6.9 之前使用的旧接口目前已经停止维护只应在确有旧客户端兼容要求时使用。两者返回的 code 有效期也不同不能混用。这类接口属于飞书客户端提供的 JSAPI依赖飞书 H5 容器和正确引入的 JSSDK。开发时还要检查客户端最低版本、应用可见范围、网页应用能力和主页 URL 配置。登录流程用户从飞书工作台打开 H5 应用 ↓ H5 调用 tt.requestAccess ↓ 飞书客户端返回临时 code ↓ H5 将 code 提交给业务服务端 ↓ 服务端向飞书校验身份、匹配本地账号 ↓ 服务端签发业务系统 Token飞书客户端本身已经知道当前登录用户是谁所以不需要再次弹出完整的浏览器登录页。这也是它看起来更像“免登”的原因。优点用户从飞书工作台进入应用时体验很顺畅。通常不需要打开外部浏览器。可以直接复用飞书客户端当前登录的企业身份。适合审批、报表、内部管理系统等飞书工作台应用。缺点必须运行在飞书客户端环境中。普通 Chrome 页面和独立 Electron 页面没有window.tt。应用入口、JSAPI 权限和飞书客户端版本会影响实际行为。系统与飞书客户端耦合较深脱离飞书后不能独立完成登录。判断环境时不要只看“页面是不是 Web 技术写的”。Electron 的页面也是 HTML、JavaScript但它不是飞书提供的 H5 容器因此不会凭空拥有tt.requestAuthCode。方案三普通 Web 网站的 OAuth 登录普通 Web 网站同样适合使用标准 OAuth 授权码模式。它与桌面客户端方案的前半段基本一致区别主要出现在授权完成之后。Web 页面请求授权地址 ↓ 浏览器进入飞书授权页 ↓ 飞书回调业务服务端 ↓ 服务端校验用户并建立登录会话 ↓ 服务端重定向到 Web 首页对于传统 Web 系统登录状态可以放在安全的 HttpOnly Cookie 中对于前后端分离系统也可以让回调页携带一次性 Ticket再由前端兑换 Token。不建议把长期 Access Token 直接放在 URL 查询参数中。除了浏览器历史记录页面引用的第三方资源还可能通过 Referer 等途径造成信息泄露。优点OAuth 是标准流程浏览器兼容性好。不要求用户安装飞书客户端。服务端用户匹配逻辑可以和桌面端共用。适合后台管理系统、企业门户和 SaaS Web 应用。缺点需要处理重定向地址、Cookie、CSRF 和跨域问题。登录完成后只建立当前浏览器会话不能自动把结果交给另一个桌面应用。前后端域名配置不一致时容易出现回调成功但前端仍然未登录的情况。方案四在 Electron 内嵌授权页面有些产品不希望登录时跳出客户端于是考虑使用 ElectronBrowserWindow或 WebView 打开飞书授权页。从协议上看它仍然是标准 OAuth只是把系统浏览器换成了应用内嵌浏览器。实现上没有解决服务端校验问题App Secret 依旧必须放在后端。优点用户视觉上没有离开当前应用。窗口样式和关闭逻辑可以由客户端控制。缺点内嵌浏览器通常不共享系统浏览器 Cookie用户可能还要重新登录。用户难以确认当前登录页面是否真的是飞书官方页面。WebView 的 Cookie、重定向、窗口生命周期和安全策略都需要额外处理。身份平台可能限制或调整嵌入式浏览器的登录行为。页面注入、导航劫持带来的风险高于系统浏览器。除非产品有非常明确的交互要求并且团队有能力长期维护嵌入式浏览器的安全否则不建议把它作为默认登录方式。方案五Android、iOS 原生授权 SDK原生移动应用可以在开放平台启用对应的移动应用登录能力并接入飞书授权登录 SDK。应用调用 SDK 后拉起飞书用户确认授权SDK 再把临时凭证返回给移动应用。具体支持的平台版本、应用签名配置以及未安装飞书时的行为应以接入时的官方 SDK 文档和实机测试为准。移动 App 调用飞书授权 SDK ↓ 拉起飞书 App由用户确认授权 ↓ SDK 返回临时 code ↓ 移动 App 将 code 交给业务服务端 ↓ 服务端校验身份并签发业务 Token优点符合移动端使用习惯App 间跳转比浏览器跳转自然。可以利用手机上已经登录的飞书账号。授权交互由飞书 SDK 处理。缺点Android 和 iOS 需要分别接入和测试。通常要配置包名、应用签名、Universal Link 等平台信息。如果产品要求覆盖未安装飞书的用户需要根据 SDK 当前行为设计并验证网页授权等降级方案。不能直接用于 Windows Electron 客户端。方案六二维码扫码登录二维码登录适合公共电脑、大屏终端或者不方便在电脑上登录飞书的场景。二维码本身不具备认证能力。可落地的方式一般有两类使用飞书当前正式提供的 OAuth 二维码能力或者让二维码指向一个登录落地页扫码后仍然执行标准 OAuth。确认完成后桌面端再通过轮询、WebSocket 或服务端推送取得与当前会话绑定的结果。不能只生成一个自定义二维码然后假设“用飞书扫码”就会自动得到飞书用户身份。接入前还要确认所参考的二维码 SDK 或接口不是已经废弃的历史版本。优点用户不需要在电脑上输入飞书密码。适合共享设备和临时终端。不依赖电脑浏览器中是否已经登录飞书。缺点必须额外使用手机。要处理二维码过期、重复扫码、会话绑定、轮询和重放攻击。整体实现复杂度明显高于浏览器 OAuth。飞书相关接口存在版本演进接入前要确认当前开放平台提供的正式能力不要直接照搬旧版二维码登录示例。它更适合作为补充入口而不是企业桌面客户端的首选登录方式。常见的几个坑1. 把通讯录权限和登录权限混为一谈通讯录同步、用户登录和事件回调是三套不同的能力。通讯录同步通常使用应用身份访问部门和员工数据。用户登录使用用户授权码确认当前操作人身份。事件回调用于接收部门变更、员工变更等通知。通讯录权限审批通过不代表 OAuth 登录配置一定正确OAuth 登录成功也不代表应用可以读取整个组织通讯录。2. App ID、App Secret 配好不等于能读取整个组织App ID 和 App Secret 只能证明“这是哪个应用”。应用究竟能读取哪些部门和员工还取决于应用申请了哪些通讯录权限。权限是否已经审批并发布生效。应用的通讯录可见范围是不是整个组织。当前企业管理员是否限制了部门访问范围。出现no dept authority一类错误时重点应检查通讯录可见范围而不只是看 API 权限列表。3. 重定向 URL 必须完全一致协议、域名、端口、路径甚至结尾斜杠都可能影响校验。例如下面两个地址并不相同https://example.com/api/feishu/callback https://example.com/api/feishu/callback/本地和生产环境应该分别登记准确的回调地址。OAuth 回调本质上是飞书让用户浏览器跳转到redirect_uri本机开发时可以使用127.0.0.1它指向正在操作浏览器的那台电脑生产方案如果由后端处理回调就应该配置用户浏览器可访问的 HTTPS 服务地址。4.state不能省略state不只是一个随便生成的字符串。它至少应该满足足够随机不能被猜到。有较短的有效期。使用一次后失效。能和发起登录的客户端、租户或登录上下文对应。服务端收到回调时必须验证state否则容易产生登录 CSRF 或账号串联问题。用户拒绝授权时还会返回失败结果回调页和客户端都应给出可恢复的提示而不是统一显示“系统异常”。5. 授权码不能重复使用OAuthcode通常有效期很短而且只能兑换一次。刷新回调页面、浏览器重复提交或者服务端重试处理不当都可能导致“第一次成功第二次失败”。回调接口应该做幂等和重放保护同时避免前端反复加载同一个 callback URL。6. 不要把飞书 Token 当成业务系统 Token飞书 Token 用于访问飞书能力业务 Token 用于访问自己的系统。二者用途和生命周期都不同。客户端完成飞书认证后应该拿到业务服务端签发的 Token而不是长期持有飞书user_access_token。这样权限撤销、租户隔离和本地角色控制都更容易管理。7. 本地端口被占用与服务端没有直接关系Electron 客户端可能会启动一个本地 HTTP 服务用来承载页面、代理接口或接收回调。如果提示某个127.0.0.1端口被占用这是客户端本地进程或开发服务器的问题不代表远程认证服务一定不可用。排查时要分别确认本地客户端页面是否正常启动。客户端实际请求的是本地 API还是生产 API。生产 HTTPS 服务是否可访问。飞书回调地址是否指向了正确环境。8. 浏览器回调成功不代表客户端已经登录成功对于桌面 OAuth至少存在两个阶段飞书成功回调业务服务端。浏览器成功通过自定义协议唤起客户端客户端再兑换 Ticket。如果浏览器已经显示成功但客户端没有反应应检查自定义协议注册、单实例处理和 Ticket 兑换而不是继续修改飞书权限。怎么选应用形态推荐方式主要原因独立 Windows/Electron 客户端系统浏览器 OAuth 一次性 Ticket安全边界清楚兼容性最好不依赖飞书客户端普通 Web 网站浏览器 OAuth Cookie 或 Ticket标准 Web 登录流程后端逻辑容易复用飞书工作台 H5 应用tt.requestAccess能复用飞书客户端当前身份交互最顺畅Android、iOS 原生应用飞书授权 SDK符合移动端体验可直接拉起飞书公共电脑或共享终端二维码扫码避免在公共设备输入账号密码管理员紧急入口受控的 break-glass 账号不依赖飞书但必须启用强 MFA、最小权限、凭据托管轮换、网络限制和完整审计选型时不要只盯着“能不能少弹一个窗口”。身份认证首先要保证凭证不落入不可信环境其次才是交互体验。对于独立桌面客户端系统浏览器 OAuth 看起来多了一次跳转但它使用成熟的浏览器登录环境客户端不接触飞书密码服务端也能完整控制账号绑定和业务 Token 签发。配合严格的state校验、PKCE 或等价的发起端绑定以及短时一次性 Ticket通常是安全性、开发成本和用户体验之间更均衡的选择。如果未来还要提供飞书工作台入口可以在同一个服务端账号体系上增加 H5 免登但应把它视为另一种客户端入口而不是用一套前端认证代码强行兼容所有运行环境。参考资料飞书网页应用免登概述飞书 OAuth 授权码获取说明飞书 H5 应用介绍飞书客户端内网页应用免登流程飞书 requestAccess API飞书应用类型与能力介绍OAuth 2.0 for Native AppsRFC 8252

相关新闻

三维内容创作平台MAYA:从节点架构到行业应用的全方位解析

三维内容创作平台MAYA:从节点架构到行业应用的全方位解析

1. 从“工具”到“生态”:重新认识MAYA如果你在影视、游戏或者建筑可视化行业待过,哪怕只是听说过,大概率都绕不开“MAYA”这个名字。很多人对它的第一印象,可能是一个功能复杂、界面密密麻麻、让新手望而生畏的“建模软件”或者“…

2026/10/13 3:20:40 阅读更多 →
商业摄影最佳实践:从前期到后期的专业流程解析

商业摄影最佳实践:从前期到后期的专业流程解析

1. 摄影行业最佳实践的深度剖析作为一名从业12年的商业摄影师,我经常被同行问到一个问题:"为什么同样的设备,有些人拍出来的作品就是更有质感?"这让我意识到,摄影行业的真正差距不在于器材,而在于…

2026/9/29 12:21:16 阅读更多 →
基于SpringBoot的乡村振兴旅游服务网站设计与实现源码+文档

基于SpringBoot的乡村振兴旅游服务网站设计与实现源码+文档

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/10/10 10:23:21 阅读更多 →

最新新闻

PS5通用调校指南:从HDR发灰、下载慢到手柄断连的排查与优化

PS5通用调校指南:从HDR发灰、下载慢到手柄断连的排查与优化

最近一位朋友新入手了PS5,连着问了我好几个问题:电视开HDR之后画面发灰,下载一个游戏等了一夜还没好,手柄玩到一半断连,重连又要重新匹配。我一边远程指导一边发现,这些疑难杂症其实跟“哪一台PS5”没什么关…

2026/10/13 3:19:47 阅读更多 →
接口自动化测试实战:Excel用例管理+unittest+xlrd+xlsxwriter

接口自动化测试实战:Excel用例管理+unittest+xlrd+xlsxwriter

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 3:19:47 阅读更多 →
AnyPS5实战:基于官方链路的PS5游戏串流全攻略

AnyPS5实战:基于官方链路的PS5游戏串流全攻略

如果你家里的 PS5 只能老老实实待在客厅电视下面,那这台机器一大半的潜力其实都没被用上。AnyPS5 是我这段时间集中折腾的一个项目,思路特别直接:把 PS5 的画面和操作,通过游戏串流的方式,送到你手边任何一块屏幕上——…

2026/10/13 3:19:47 阅读更多 →
PMI参数的解读与应用分析

PMI参数的解读与应用分析

PMI是宏观经济的重要指标,这里尝试对PMI参数进行解读和分析。 1 定义与特征 1.1 定义 采购经理指数(PMI)通过对企业采购经理的月度问卷调查结果统计汇总、编制而成的指数, 涵盖企业采购、生产、流通等各个环节,包括制造业和非制造业领域&…

2026/10/13 3:19:47 阅读更多 →
Simulink风光储并网系统建模与协调控制策略详解

Simulink风光储并网系统建模与协调控制策略详解

1. 项目概述与整体系统方案选择风电和光伏是当前电力系统中发展最快的两类清洁能源,但两者的出力特性完全不同——风电随风速波动,光伏则受辐照度和温度制约,两者叠加后仍然存在天然间歇性。储能系统的加入就是用来弥补这种波动,把…

2026/10/13 3:19:47 阅读更多 →
小白程序员必备:收藏!从零开始掌握 Codex 大模型核心技术

小白程序员必备:收藏!从零开始掌握 Codex 大模型核心技术

本文深入解析 Codex 大模型的六层架构,涵盖模型、Runtime、Context、Tool、Sandbox 和 Environment 的功能与关系。通过分析 Agent Loop 的工作原理,揭示 Token 的计量方式以及 Context Window 与 Memory 的关联。文章还探讨了长任务中出现的“忘记”现象…

2026/10/13 3:18:47 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →