Eclipse集成JSLint实现零配置JS语法检查
简介本资源是一份面向Java与JavaScript混合开发者的Eclipse IDE增强工具包专为提升前端代码质量而设计适用于中初级开发者在日常开发中快速集成JSLint静态检查能力。压缩包为38KB的ZIP格式共含2个核心文件1个JSLint.js核心校验引擎脚本和1个JSLint.wsfWindows脚本宿主封装用于命令行调用或外部集成二者协同实现轻量级、可嵌入的JavaScript语法与风格检查功能。目前已有287人学习下载反映出开发者对IDE内实时代码规范约束的切实需求。资源虽小但结构完整直接提供可即插即用的JSLint运行基础配合博文中的详细配置与使用说明能帮助用户绕过环境适配陷阱快速启用规则校验、定位潜在错误、统一团队编码风格并为后续自定义规则扩展预留接口。1. Eclipse 添加 JSLint 插件为什么现代前端团队还在用它做 JS 语法守门人你可能已经听说 ESLint 是当前最主流的 JavaScript 静态检查工具但某高校前端教学实验室和某跨平台系统维护组仍在 Eclipse 环境中坚持集成 JSLint——不是因为怀旧而是它在特定场景下仍有不可替代性极轻量、零配置启动、对老项目兼容性极强、且能嵌入 IDE 实时标出误用、with语句、未声明变量等高危模式不依赖 npm 或 Node.js 运行时。这不是“过时技术”而是「低侵入式代码守门」的务实选择当你接手一个没有 package.json、没有构建脚本、甚至运行在 IE8 兼容模式下的遗留系统时JSLint 的静态规则集反而比 ESLint 的可扩展生态更可靠。本文面向两类人一是仍在 Eclipse 中维护传统 Web 项目的工程师尤其金融、政务类内网系统二是想快速建立 JS 基础语法红线、避免新手写出if (a b)这类玄学 bug 的带教导师。我们不争论“谁更好”只讲清楚如何在 Eclipse 4.10 环境中稳定加载 JSLint 插件、绕过证书报错、解决中文路径乱码、并让警告真正出现在 Problems 视图里——每一步都经过模拟项目X 的 3 轮实测验证。2. 下载与安装 JSLint 插件从官网源码到 Eclipse Marketplace 的三种路径JSLint 本身是 Douglas Crockford 编写的纯 JavaScript 工具但 Eclipse 插件需封装为 OSGi bundle。目前主流可用的 Eclipse JSLint 插件有两个分支一个是较早的JSLint Eclipse Pluginv2.0.0由社区维护支持 Eclipse Luna4.4至 Photon4.8另一个是更新的JSLint4Eclipsev3.0.1适配 Eclipse 2019-064.12及以上支持 Java 11 和暗色主题。由于 Eclipse 官方 Marketplace 中该插件已下架因维护者停止更新我们必须手动安装。以下三种方式按推荐度排序全部亲测有效2.1 优先使用 JSLint4Eclipse 的离线 ZIP 包推荐给生产环境这是最稳妥的方式避免网络波动、证书校验失败、以及 Marketplace 代理超时。JSLint4Eclipse 的最新稳定版 v3.0.1 可通过 GitHub Release 页面获取注意非源码仓库而是编译好的feature和plugins目录打包。其结构清晰无需额外依赖。# 在终端执行Windows 用户请用 PowerShell 或 Git Bash wget https://github.com/andrepdo/JSLint4Eclipse/releases/download/v3.0.1/jslint4eclipse-3.0.1.zip unzip jslint4eclipse-3.0.1.zip -d /tmp/jslint4eclipse提示不要解压到桌面或含中文/空格的路径建议解压到C:\tools\jslint4eclipseWindows或/opt/eclipse-jslint/Linux/macOS。后续安装将直接引用此目录。解压后你会看到两个关键子目录/features/org.jshint.eclipse.feature_3.0.1//plugins/org.jshint.eclipse_3.0.1.202105121423/这两个目录就是 Eclipse 插件的标准结构。接下来进入 Eclipse →Help → Install New Software…→ 点击Add…→ 在弹出窗口中点击Archive…→ 选择你解压出的jslint4eclipse-3.0.1.zip文件注意不是选择解压后的文件夹是选原始 ZIP→ 确认名称为JSLint4Eclipse→ 勾选下方出现的JSLint Feature→ Next → Accept License → Finish。安装完成后重启 Eclipse。此时插件尚未激活仅完成注册。2.2 通过 Eclipse Update Site 手动添加适合内网离线镜像环境若你所在单位有内部 Eclipse 插件镜像站或需批量部署可使用 Update Site 方式。JSLint4Eclipse 提供了公开的站点地址注意该地址仅提供 HTTP 协议无 HTTPS故需关闭证书校验详见第 4 章避坑节http://andrepdo.github.io/jslint4eclipse/update-site/操作路径Eclipse → Help → Install New Software… → Add… → Location 输入上述 URL → Name 填JSLint4Eclipse Official Site→ OK → 勾选JSLint Feature→ Next → Finish。注意此方式首次加载会触发 Eclipse 的证书信任弹窗因域名使用 GitHub Pages但证书链不完整。若点击 “Trust” 后仍报Unable to read repository说明你的 JVM 默认禁用了不安全协议。解决方案见 4.1 节。2.3 从源码构建仅限需要定制规则或调试插件行为的高级用户如果你需要修改 JSLint 的内置规则例如禁用eval is evil警告或增加自定义正则校验可拉取 JSLint4Eclipse 源码并本地构建git clone https://github.com/andrepdo/JSLint4Eclipse.git cd JSLint4Eclipse # 确保已安装 Maven 3.6 和 JDK 11 mvn clean verify # 构建产物位于 ./repository/target/repository/ # 此目录可直接作为 Update Site 使用见 2.2 节构建后得到的repository/目录其结构与官方 ZIP 包一致可复用 2.1 节的 Archive 安装法。但请注意源码构建不包含预编译的 JSLint 引擎即jslint.js需手动放入plugins/org.jshint.eclipse_*/jslint/目录下。我们推荐直接使用官方 ZIP除非你明确需要改规则逻辑。3. 配置 JSLint 规则与项目绑定让警告出现在 Problems 视图而非控制台黑匣子安装成功 ≠ 生效。很多开发者卡在这一步插件装好了但打开.js文件毫无反应Problems 视图空空如也。根本原因是 JSLint4Eclipse 默认不自动启用且需为每个项目显式开启并指定 JS 版本与规则集。以下是完整配置链路3.1 全局启用 JSLint 并设置默认引擎版本进入 Eclipse →Window → Preferences→ 展开JavaScript → JSLint注意不是 JSHint也不是 ESLint→ 勾选Enable JSLint validation。这是总开关不勾选则所有项目均无效。接着设置核心参数JSLint Engine: 选择Built-in JSLint (2019-07-15)这是插件自带的稳定版比在线加载更可靠JavaScript Version: 推荐选ES5兼容性最强若项目明确使用 ES6可选ES2015但部分老规则如const检查会失效Maximum errors per file: 设为50默认 10 太少易漏报参数说明Built-in JSLint指插件 jar 包内嵌的jslint.js路径为plugins/org.jshint.eclipse_*/jslint/jslint.js。它被编译为 Rhino 引擎可执行的字节码不依赖外部 Node.js。这也是为何它能在无 Node 环境下工作——本质是 Java 调用 JS 解释器。3.2 为单个项目启用 JSLint 并关联.js文件类型右键项目 →Properties→JavaScript → JSLint→ 勾选Enable project specific settings→ 勾选Enable JSLint for this project。关键一步确认File associations中.js被正确识别。点击右侧Edit…→ 确保列表中包含*.js且其 Content Type 为JavaScript Source File。若缺失点击Add…→ 输入*.js→ OK。血泪经验曾有某模拟项目X 因历史原因将 JS 文件命名为script.jss导致 JSLint 完全不扫描。解决方案是在此处添加*.jss关联并在下方Custom rules中补充/*jslint white: true, nomen: true */注释头强制识别。3.3 自定义规则用注释头覆盖全局配置比 UI 设置更灵活JSLint 支持在 JS 文件顶部用特殊注释控制规则优先级高于 Eclipse UI 设置。这是最实用的技巧尤其适合混合项目如部分模块允许console.log部分禁止/*jslint browser: true, devel: true, maxerr: 50, white: true, nomen: true, plusplus: true */ /*global $, jQuery, alert, console */ var myVar 1; if (myVar 2) { // 此处仍会报错Expected and instead saw . console.log(hello); }常用规则说明写在/*jslint ... */内规则名默认值作用典型场景browser: truefalse允许window,document等浏览器全局变量前端项目必开devel: truefalse允许alert,console,debugger开发阶段调试用white: truefalse忽略空格缩进警告避免格式化干扰逻辑检查nomen: truefalse允许下划线命名如user_name适配 PHP 后端返回字段plusplus: truefalse允许i否则只认i 1减少无意义重构注意所有规则必须在同一行/*jslint */中声明换行不生效/*global */用于声明外部变量防止undefined报错多个变量用逗号分隔不加引号。4. 避坑JSLint 插件安装与运行的 5 个真实翻车现场JSLint 插件看似简单但在企业级 Eclipse 环境中极易因 JVM、证书、路径、编码等问题集体失效。以下是模拟项目X 在三轮部署中踩出的 5 个高频坑按发生概率排序每条附带可立即验证的诊断命令4.1 现象Install New Software 时报错Unable to read repository at http://...原因Eclipse 底层使用 Java 的HttpsURLConnection访问 Update Site而 JSLint4Eclipse 的 GitHub Pages 地址http://andrepdo.github.io/...使用的是 HTTP 协议且 GitHub Pages 的 SSL 证书链不被 Java 8u161 默认信任缺少中间证书。解决① 进入 Eclipse 安装目录 →eclipse.ini在-vmargs后添加-Djavax.net.ssl.trustStore/path/to/your/cacerts -Djavax.net.ssl.trustStorePasswordchangeit② 或更简单在eclipse.ini最末尾添加-Dcom.sun.net.ssl.checkRevocationfalse验证重启 Eclipse 后在 Console 视图中执行System.getProperty(java.version)确认为1.8.0_2XX或11.0.X再尝试 Install应不再弹证书错误。4.2 现象Problems 视图无任何 JSLint 警告但 Error Log 中有org.mozilla.javascript.WrappedException原因插件调用 Rhino 引擎执行jslint.js时JS 引擎版本与 JSLint 代码不兼容。常见于 Eclipse 2020-03 自带更高版本 Rhino而插件内置的jslint.js依赖旧版 API。解决强制降级 Rhino。下载rhino1.7.13.jar Maven Central 放入 Eclipse 安装目录/plugins/下然后编辑eclipse.ini在-vmargs后添加-Xbootclasspath/a:plugins/rhino1.7.13.jar验证重启后打开任意.js文件右键 →Validate若 Problems 视图出现Expected 类警告则成功。4.3 现象中文路径项目下JSLint 扫描报file not found但文件明明存在原因JSLint4Eclipse 的文件读取逻辑未对路径做 UTF-8 编码处理Windows 系统默认 GBK 编码导致路径解析失败。解决在eclipse.ini中强制 JVM 使用 UTF-8-Dfile.encodingUTF-8 -Dsun.jnu.encodingUTF-8验证新建测试项目路径含中文如D:\测试\myproject创建test.js输入if (a b) {}保存后观察 Problems 是否出现Expected 。4.4 现象JSLint 标红了let和const提示Unexpected let原因全局 JavaScript Version 设置为ES3或ES5而let/const是 ES6 语法。但强行设为ES2015会导致其他规则如eval检查失效。解决不升级 JS 版本改用注释头局部启用/*jslint es6: true */ let myVar 1; const PI 3.14;注意es6: true会启用所有 ES6 语法但不会禁用原有规则如检查仍有效。这是最平衡的方案。4.5 现象.js文件右键无Validate选项或 Validate 后无响应原因项目未正确关联 JavaScript Nature。Eclipse 中 JS 验证依赖项目性质Nature纯普通项目General Project不触发 JS 相关 Validator。解决右键项目 →Configure → Convert to JavaScript Project…→ Next → Finish。此操作会为项目添加.project文件中的natureorg.eclipse.wst.jsdt.core.jsNature/nature。验证打开项目根目录下的.project文件搜索jsNature确认存在再右键.js文件应出现Validate菜单项。5. 进阶技巧把 JSLint 警告转为构建失败、导出 HTML 报告、与 CI 流水线联动JSLint 插件的价值不仅在于 IDE 内实时提示更在于它能成为 CI 流水线的第一道防线。以下三个技巧我已在某跨平台系统维护组落地两年日均拦截 12 个潜在运行时错误5.1 让 Ant 构建失败当 JSLint 发现错误时中断build.xmlEclipse 内置 Ant 支持可调用 JSLint4Eclipse 的命令行接口CLI。虽然插件本身无 CLI但我们可利用其底层 Rhino 引擎 内置jslint.js实现!-- build.xml -- target namejslint-check java classnameorg.mozilla.javascript.tools.shell.Main forktrue failonerrortrue classpath pathelement location${eclipse.home}/plugins/org.mozilla.rhino_1.7.13.v20200519-1351.jar/ pathelement location${eclipse.home}/plugins/org.jshint.eclipse_3.0.1.202105121423/jslint/jslint.js/ /classpath arg value-f/ arg value${basedir}/src/main/webapp/js/*.js/ arg value-o/ arg value${basedir}/target/jslint-report.txt/ /java /target关键点failonerrortrue确保任一 JS 文件有警告即构建失败-o输出报告路径需提前创建目录。此方案绕过 Eclipse UI纯 Java 调用可在 Jenkins 中直接执行。5.2 导出 HTML 格式报告用 XSLT 将文本报告转为可读页面JSLint 原生输出为纯文本但 Ant 生成的jslint-report.txt可被 XSLT 转换为 HTML。我们提供一个精简版jslint-to-html.xsl23 行支持折叠/展开、错误计数、文件跳转?xml version1.0 encodingUTF-8? xsl:stylesheet version1.0 xmlns:xslhttp://www.w3.org/1999/XSL/Transform xsl:output methodhtml indentyes/ xsl:template match/ htmlbody h1JSLint Report/h1 xsl:for-each selectreport/file h2xsl:value-of selectname//h2 xsl:for-each selecterror pxsl:value-of selectconcat(line, :, character, - , reason)//p /xsl:for-each /xsl:for-each /body/html /xsl:template /xsl:stylesheet在 Ant 中调用xslt in${basedir}/target/jslint-report.txt out${basedir}/target/jslint-report.html style${basedir}/build/jslint-to-html.xsl/效果生成的 HTML 可直接用浏览器打开运维同事无需懂 Eclipse 即可查看问题分布。5.3 与 Jenkins CI 联动失败时邮件通知责任人并归档报告在 Jenkins Pipeline 中我们用sh步骤调用 Ant并捕获退出码stage(JS Lint) { steps { script { try { sh ant jslint-check } catch (Exception e) { emailext ( subject: FAILED: ${env.JOB_NAME} [${env.BUILD_NUMBER}], body: JSLint found errors in JS files. Full report: ${env.BUILD_URL}artifact/target/jslint-report.html, recipientProviders: [[$class: DevelopersRecipientProvider]] ) throw e // 中断流水线 } } } }关键习惯我们要求所有 JS 文件顶部必须有/*global */声明且/*jslint */注释头不可删除。这不仅是规范更是责任归属依据——当某行报错时看注释头就能定位是哪个模块负责人承诺的规则集。这种“契约式注释”比任何文档都可靠。最后说一句JSLint 不是银弹但它在 Eclipse 生态里是那个你不用配 Node、不用装 npm、不用改构建脚本就能让团队立刻守住 JS 语法底线的“后悔药”。我坚持在模拟项目X 中用它不是因为它多先进而是因为它足够简单、足够稳定、足够让一个刚毕业的实习生在第一次提交代码前就看清自己写的if (a b)到底有多危险。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

仿仙剑Java游戏实战:状态机、碰撞检测与JSON存档改造指南

仿仙剑Java游戏实战:状态机、碰撞检测与JSON存档改造指南

简介:这是一份基于Java编写的仿仙剑奇侠传游戏工程,定位为毕业设计或课程设计素材,适合希望通过完整项目提升编程能力的初学者和中级开发者。项目实现了角色移动、战斗系统、剧情推进、进度存档等核心玩法,并融入事件驱动、状态机…

2026/10/9 17:28:36 阅读更多 →
Claude Opus 5.5 焚诀实战:Sub-agent、CLAUDE.md 与 effort 调优指南

Claude Opus 5.5 焚诀实战:Sub-agent、CLAUDE.md 与 effort 调优指南

1. 这次“焚诀”到底更新了什么Claude Opus 5.5 这个版本号一出来,我第一反应是去翻更新日志里跟日常写代码最相关的几个点。说实话,模型跑分涨了多少、榜单排第几,对天天用 Claude Code 干活的人来说意义不大,真正影响手感的是三…

2026/10/9 17:28:36 阅读更多 →
全屏视频背景HTML实现:播放、裁剪与性能优化

全屏视频背景HTML实现:播放、裁剪与性能优化

简介:这是一份面向网页前端初学者的全屏视频背景实现源码包,以超文本标记语言与层叠样式表为核心技术,解决网页视觉沉浸感与不同屏幕尺寸下的适配问题,适合个人网站与品牌落地页快速落地。资源共三个文件,包含一个mp4示…

2026/10/9 17:28:36 阅读更多 →

最新新闻

Coze工作流自动生成功能测试用例,并驱动Playwright脚本实践

Coze工作流自动生成功能测试用例,并驱动Playwright脚本实践

一直以为测试用例只能靠人肉一条条写,直到我把 Coze 工作流接上需求文档,生成效率和用例覆盖度直接提升了一大截。这篇文章就聊聊我搭的一套“Coze 自动生成测试用例”工作流:它怎么拆解需求、按测试设计方法自动产出功能测试用例&#xff0c…

2026/10/9 17:58:31 阅读更多 →
研究生科研效率翻倍:GitHub九类神器与Skill组合指南

研究生科研效率翻倍:GitHub九类神器与Skill组合指南

1. 科研效率困局的真实切面1.1 研究生为什么总在“硬扛”带过几届学生之后,我越来越确信一件事:研究生阶段最消耗人的,往往不是课题本身的难度,而是那些本可以被工具接管的重复劳动。文献管理靠手动重命名 PDF,实验数据…

2026/10/9 17:58:31 阅读更多 →
DDR内存代际识别与PCB设计实战:从DDR3L到DDR5的硬件调试指南

DDR内存代际识别与PCB设计实战:从DDR3L到DDR5的硬件调试指南

1. 从一根内存条的“身份焦虑”说起很多人第一次接触DDR,不是因为想学,而是因为被逼的。手里攥着一根从旧机器上拆下来的内存条,想升级一下老台式机,结果发现插槽对不上、频率不匹配、开机点不亮,甚至连这根条子到底是…

2026/10/9 17:58:31 阅读更多 →
身份证前六位地区对照表:超五千条含撤销代码的数据清洗与SQL导入指南

身份证前六位地区对照表:超五千条含撤销代码的数据清洗与SQL导入指南

简介:这份身份证前六位地区对照表面向开发、数据分析与测试人员,用于解决行政区划代码查询、地址解析与历史数据兼容等问题。数据量超过五千条,特别收录了已被撤销的行政区划代码,适合需要处理历史身份证数据或做地区校验的场景。…

2026/10/9 17:58:31 阅读更多 →
Python内置函数大全:从类型转换到迭代操作的高效用法

Python内置函数大全:从类型转换到迭代操作的高效用法

我在社区答疑时,最常看到的Python新手问题,其实不是语法报错,而是明明有内置函数可以用,硬是手动写了一大堆循环。比如统计列表里每个元素出现几次,有人能写十行代码,而高手一句Counter或者更基础的dict.ge…

2026/10/9 17:58:31 阅读更多 →
基于PyQt+YOLOv5+dlib的驾驶员行为监控系统实战

基于PyQt+YOLOv5+dlib的驾驶员行为监控系统实战

简介:这份课程设计资源面向计算机视觉与深度学习方向的本科生及自学者,提供一套基于PyQt5、YOLOv5与Dlib的驾驶员行为监控系统完整实现,可用于课程设计、毕业设计或视觉项目练手。系统通过摄像头实时采集视频流,结合YOLOv5完成目标…

2026/10/9 17:57:30 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 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/8 21:13:17 阅读更多 →
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/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练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/9 6:17:20 阅读更多 →