拓冰建站拓冰建站
首页 / 资讯中心 / 正文

思源笔记 v3.5.7 更新解析:表格导出、鸿蒙浏览器检测与超链接解析的细节修复

思源笔记 v3.5.7 更新解析表格导出、鸿蒙浏览器检测与超链接解析的细节修复【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan导读本文基于思源笔记SiYuan开源仓库中 v3.5.7 版本的官方更新记录逐条拆解该版本包含的两项功能改进合并单元格表格导出、鸿蒙端浏览器内核检测与两项缺陷修复导出预览 IFrame 块宽高缺失、超链接地址解析错误并结合前端源码app/src/protyle/util/compatibility.ts、app/src/index.ts、app/src/protyle/preview/index.ts等说明其底层实现逻辑与影响范围。读完本文你将理解这些细节变更的触发场景、修复原理以及如何在当前版本中验证对应行为。版本概述v3.5.7 是思源笔记 3.5.x 系列的一个小版本官方描述为“此版本改進了一些細節”。与动辄引入大功能的大版本不同这类小版本聚焦于提升既有功能的稳定性与一致性涉及两个维度改进功能合并单元格表格的导出效果、鸿蒙端浏览器内核提示。修复缺陷导出预览中 IFrame 块的宽高缺失、超链接地址解析错误。值得注意的是思源笔记同时支持桌面端Electron、浏览器端BROWSER与移动端Android / iOS / HarmonyOS等容器环境因此本版本的变更横跨了“导出流水线”与“多容器运行时适配”两条技术线。改进功能一合并单元格表格导出变更内容更新记录中的第一条改进为“改進合併儲存格表格匯出”对应上游 Issue #17036。即当文档中表格使用了**合并单元格跨行 rowspan / 跨列 colspan**时将其导出为 Markdown、Word、PDF 等格式后的结构与原始编辑状态不一致的问题得到改善。触发场景思源编辑器中表格通过区块Block形式存储合并单元格是其表格能力的一部分。用户在文档中制作带表头合并、跨列标题等复杂表格后通过“导出”功能输出文档时表格的合并语义需要在目标格式中正确还原否则会出现导出的表格列数、行数与编辑态不一致合并区域被拆分为多个空白单元格表格整体布局错乱。源码佐证导出预览与表格渲染链路在思源前端中文档预览与导出共用一套渲染管线。app/src/protyle/preview/index.ts中的render()方法通过调用/api/export/preview接口获取预览 HTML并依次执行processRender、highlightRender、avRender等处理见 app/src/protyle/preview/index.ts导出功能则在该预览结构基础上进一步转换。因此表格合并信息在区块数据 → 预览 HTML → 导出文件的传递链路中保持正确是本次改进的核心目标。从仓库结构看表格的合并信息主要由编辑器层维护相关实现分布在 app/src/protyle 目录下的表格区块渲染与导出相关模块中服务端导出处理则位于 kernel/model/export.go 等文件。本次修复即针对合并单元格在导出映射阶段的处理逻辑进行调整。改进功能二鸿蒙端不应提示“非 Chromium 内核浏览器”变更内容更新记录中第二条改进为“鴻蒙端不應該提示非 Chromium 核心瀏覽器”对应上游 Issue #17039。在思源的浏览器/桌面容器中存在一项针对“非 Chromium 内核浏览器”的兼容性提示但该提示在鸿蒙HarmonyOS容器环境下不应触发。源码佐证浏览器内核检测实现思源对浏览器内核的检测封装在 app/src/protyle/util/compatibility.ts 的isChromeBrowser()函数中export function isChromeBrowser(): boolean { const nav window.navigator as Navigator { userAgentData: { brands: { brand: string; version: string }[] } }; // 优先使用新版 UA Client HintsuserAgentData.brands if (nav.userAgentData Array.isArray(nav.userAgentData.brands)) { const brands nav.userAgentData.brands.map((b) b.brand); // Edge、Opera 等 Chromium 内核浏览器 brands 中同样包含 Chromium需与 userAgent 回退逻辑一致排除 if (brands.some((brand) /Edge|Opera|OPR/i.test(brand))) { return false; } return brands.some((brand) /Chrome|Chromium/i.test(brand)); } // 回退到 userAgent const ua nav.userAgent || ; const isChromium /\bChrome\/\d/i.test(ua) || /\bChromium\/\d/i.test(ua); const isEdge /\bEdg(e|A|iOS)?\/\d/i.test(ua); // Edge Chromium const isOpera /\b(OPR|Opera)\/\d/i.test(ua); return isChromium !isEdge !isOpera; }该函数的判断要点优先走 UA Client Hintsnavigator.userAgentData.brands并显式排除 Edge、Opera 等同样基于 Chromium 内核的浏览器回退到 userAgent 字符串匹配兼容不支持 Client Hints 的环境判定结果为“Chromium 内核且非 Edge / Opera”才视为 Chrome 兼容浏览器。源码佐证提示触发条件与鸿蒙容器识别兼容性提示的实际触发点在 app/src/index.ts/// #if BROWSER !MOBILE if (!isInMobileApp() !window.siyuan.config.readonly !window.siyuan.isPublish !isChromeBrowser() window.siyuan.config.appearance.notifications?.browserCompatibility ! false) { showMessage(window.siyuan.languages.useChrome, 0, error); } /// #endif即在非移动端浏览器构建中若检测为非 Chromium 内核且未在设置中关闭该通知就会弹出useChrome提示。鸿蒙端的判断则依赖容器标识见同一文件中的 isInHarmony()export const isInHarmony () { return window.siyuan.config.system.container harmony window.JSHarmony; };容器类型container的合法取值定义在 app/src/types/config.d.ts即docker | android | ios | harmony | std。鸿蒙端实际运行在基于 WebView 的运行时中其 UA 行为与桌面浏览器不同因此 v3.5.7 在判断逻辑中排除了鸿蒙容器避免在鸿蒙端误弹“请使用 Chrome 浏览器”的错误提示。同一判断函数还被 app/src/mobile/index.ts 与 app/src/mobile/util/touch.ts 使用分别服务于移动端浏览器检测与触摸事件处理。修复缺陷一导出预览 IFrame 块缺少宽高变更内容更新记录中第一条缺陷修复为“匯出預覽 IFrame 區塊缺少高寬”对应上游 Issue #17033。当文档中嵌入 IFrame 块例如嵌入网页、在线地图、视频等时导出预览中 IFrame 元素缺少明确的宽高样式导致预览或导出结果中 IFrame 显示为异常尺寸。源码佐证IFrame 块的默认尺寸处理思源在编辑器中对 IFrame 块默认尺寸的处理位于 app/src/menus/protyle.tsif (!iframeElement.style.height) { iframeElement.style.height 360px; } if (!iframeElement.style.width) { iframeElement.style.width 640px; }即编辑态中未显式设置尺寸的 IFrame 块会回退到 360px 高、640px 宽的默认值。本次修复的目标是让导出预览走/api/export/preview的预览渲染见 app/src/protyle/preview/index.ts同样继承这一默认宽高逻辑避免在预览与最终导出文件中出现“IFrame 塌陷”或尺寸异常的问题。对用户而言修复后包含网页嵌入块的文档在导出 PDF、图片等格式时IFrame 区域将保持与编辑态一致的显示比例。修复缺陷二超链接地址解析错误变更内容更新记录中第二条缺陷修复为“超連結解析錯誤”对应上游 Issue #17034。即某些包含特殊字符如空格、中文、百分号编码、锚点等的链接地址在点击跳转或导出时被错误解析导致链接无法正确打开。影响范围与验证方式超链接解析贯穿思源的编辑、预览与导出链路编辑器中通过href属性存储链接地址预览与导出时按地址生成a标签。若解析逻辑对 URL 编码、相对路径如assets/资源链接与绝对地址的处理存在边界缺陷就会表现为“点击链接跳转错误”或“导出后链接失效”。在 v3.5.7 中该解析逻辑已修正。用户可在升级后快速验证在文档中插入含空格或中文的链接地址如https://example.com/我的 文档.html点击链接确认可正常跳转导出该文档检查生成的链接地址与原文一致。更新渠道与升级建议v3.5.7 属于思源笔记 3.5.x 稳定分支的小版本升级成本低、风险小建议 3.5.x 用户直接升级。官方分发渠道包括思源笔记官网下载页GitHub Releases 发布页。桌面端升级后可在“设置 → 关于”中确认版本号浏览器端与移动端Android / iOS / HarmonyOS按各自应用商店或安装包渠道更新。若遇到本文所述问题可优先升级至该版本后复测本文涉及的相关实现文件可在仓库中进一步查阅浏览器内核与容器检测app/src/protyle/util/compatibility.ts桌面/浏览器启动流程与兼容性提示app/src/index.ts导出预览渲染app/src/protyle/preview/index.ts容器类型定义app/src/types/config.d.ts服务端导出处理kernel/model/export.go【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门