一种输入标题导致运行时错误的情况

问题表现就是输入标题之后回车下一行也是标题,之后报运行时错误,直接贴操作过程了

  1. 首先在编辑器中正常输入(本次复现条件是输入列表)

  2. 输入列表,之后通过回车返回到段落块

  3. 输入 #Ctrl+Alt+1建立标题

    PixPin20250324092425.png

  4. 输入文本。注意到此时大纲列表中并不正常刷新当前标题文本

    PixPin20250324092446.png

  5. 按下删除键会直接删除当前整个标题,重建标题仍然报错

  6. 重建索引有概率解决问题,不过我在未报运行时错误时重建索引之后仍然出现问题

  7. 如果输入标题后出现当前问题:

    1. 已经输入回车出现第二个标题块,则只能删除整个标题块
    2. 未输入回车,光标仍在当前标题块
      1. 通过Ctrl+Alt+0可以转换回段落块

      2. 通过Ctrl+Alt+1可以转换回标题块

      3. 此时标题块文本右侧可能出现 <protyle-html> 标签,也可能没有

        PixPin20250324092523.png

      4. 不过此时大纲中显示当前标题名称,可以正常继续输入不会触发运行时错误

本次复现条件是主题,默认主题下没有测试,不过不容易观察也不容易复现,暂且认为是使用第三方主题都能复现。复现并不局限于单个文档,也不局限于某个主题 ,甚至不局限于输入法

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    26467 引用 • 110086 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 可以试试把主题的 JS 都注释掉再重启思源测试

    还能复现,不过这次的条件细致到列表有第二项开始,只有一项的时候没有复现
    EmptyLight
    @EmptyLight 那就再一块一块排查一下 CSS,看看什么 CSS 会出问题
    JeffreyChen
    @JeffreyChen 以 VSCE 主题为测试对象,在主题添加了::before 或::after 之后会出现,表现在标题前面的那个图标。Savor 如果能复现就可能和标题后面那些点有关
    EmptyLight
  • EmptyLight

    目前复现情况:

    • VSCode Lite Edit 主题在启用标题图标开关后可复现
    • Savor 主题可复现,但此时出问题的标题后未显示当前标题级别的那些点

    预计问题是主题修改主题样式导致的,对于 VSCode Lite Edit 主题是 ::before,Savor 未知,不是 ::before::after,但是可以复现问题,并且在出现问题时不显示标题后的点

    2 回复
  • 如果有能稳定重现问题的 CSS 片段,麻烦发一下看看

    1 回复
  • EmptyLight

    siyuan-vscodelite-edit/src/block/title-icon.scss at scss · emptylight370/siyuan-vscodelite-edit 编译得到,图标为单独 svg,这里由于长度限制只取一到三级标题

    @charset "UTF-8"; /* 用于修复显示图标之后标题会显示在下一行的问题 */ [data-node-id].h1 div:nth-child(1), .protyle-preview h1 div:nth-child(1) { display: inline-block; word-wrap: break-word; overflow-wrap: break-word; } [data-node-id].h2 div:nth-child(1), .protyle-preview h2 div:nth-child(1) { display: inline-block; word-wrap: break-word; overflow-wrap: break-word; } [data-node-id].h3 div:nth-child(1), .protyle-preview h3 div:nth-child(1) { display: inline-block; word-wrap: break-word; overflow-wrap: break-word; } /* h1标签基本样式 */ [data-node-id].h1[fold="1"][data-type=NodeHeading]::before, .protyle-preview h1[fold="1"]::before, [data-node-id].h1::before, .protyle-preview h1::before { content: ""; display: inline-block; position: relative; width: 1.75rem; height: 1.75rem; mask: url(../../resources/h1.svg) no-repeat center center; mask-size: contain; background-color: var(--mk-block-header-h1); top: 0.2rem; margin-right: 0.2rem; } /* h1标签 */ [data-node-id].h1[fold="1"][data-type=NodeHeading]::before, .protyle-preview h1[fold="1"]::before { height: 1.75rem !important; border-radius: unset; margin-top: unset; left: unset !important; top: 0.2rem !important; } /* h2标签基本样式 */ [data-node-id].h2[fold="1"][data-type=NodeHeading]::before, .protyle-preview h2[fold="1"]::before, [data-node-id].h2::before, .protyle-preview h2::before { content: ""; display: inline-block; position: relative; width: 1.55rem; height: 1.55rem; mask: url(../../resources/h2.svg) no-repeat center center; mask-size: contain; background-color: var(--mk-block-header-h2); top: 0.2rem; margin-right: 0.2rem; } /* h2标签 */ [data-node-id].h2[fold="1"][data-type=NodeHeading]::before, .protyle-preview h2[fold="1"]::before { height: 1.55rem !important; border-radius: unset; margin-top: unset; left: unset !important; top: 0.2rem !important; } /* h3标签基本样式 */ [data-node-id].h3[fold="1"][data-type=NodeHeading]::before, .protyle-preview h3[fold="1"]::before, [data-node-id].h3::before, .protyle-preview h3::before { content: ""; display: inline-block; position: relative; width: 1.38rem; height: 1.38rem; mask: url(../../resources/h3.svg) no-repeat center center; mask-size: contain; background-color: var(--mk-block-header-h3); top: 0.2rem; margin-right: 0.2rem; } /* h3标签 */ [data-node-id].h3[fold="1"][data-type=NodeHeading]::before, .protyle-preview h3[fold="1"]::before { height: 1.38rem !important; border-radius: unset; margin-top: unset; left: unset !important; top: 0.2rem !important; } /*# sourceMappingURL=title-icon.css.map */
  • VSCode Lite Edit 主题在启用标题图标开关后可复现

    我重现不了,你安装 https://github.com/siyuan-note/siyuan/releases/tag/v3.1.26-dev3 试一下,还能重现的话录屏看看

    2 回复
  • EmptyLight

    正常是明天发版了,我明天再测吧

  • EmptyLight 1 评论

    还是复现了,这次有录屏,感觉基本上把我遇到的问题差不多都复现了

    摆烂喽,网盘链接:网盘链接

    1 回复
    1 操作
    EmptyLight 在 2025-03-25 14:40:04 更新了该回帖
    小水管有点勉强,好像限速写错了,视频过两天换成网盘
    EmptyLight
  • 我这里实在重现不了,你从新建工作空间开始录屏看看

    1 回复
  • EmptyLight

    视频更大了,这次是网盘:网盘链接。从一开始就可以复现这个问题,有点怪怪的

    1 回复
  • 你创建标题块大纲不显示的那一步我就重现不了

    1 回复
  • EmptyLight

    那我是没辙了,总不能是 Windows 有问题?

  • EmptyLight 1 评论

    自行进行了多种测试,实在是没办法弄明白这个东西,不管通过什么方式,只要通过 CSS 向标题中加入了图片,就会在输入时导致一些问题,然后思源无法识别标题结构,导致运行时错误。

    简单解释一下我的思考过程:

    正常的标题结构:

    <div data-subtype="h1" data-node-id data-node-index data-type="NodeHeading" class="h1" updated> <div contenteditable="true" spellcheck="false">标题文本</div> <div class="protyle-attr" contenteditable="false">&ZeroWidthWhiteSpace;</div> </div>

    在输入时,所有文本都会进入 标题文本 部分,并且正常显示。在大部分情况下都是如此。

    如果主题通过 CSS 为标题添加了一些东西(如 VSCode Lite Edit),比如通过 ::before 添加了一个标题前的图标,或者通过 background-image 和对应样式添加了标题前(或后)的图标,在输入时,输入的文字仍然正常去到 标题文本 部分,但是会出现一些意外,比如:

    <div data-subtype="h1" data-node-id data-node-index data-type="NodeHeading" class="h1" updated> ::before <!--其实不限于这种情况,只是我前面发的代码是这样工作的--> <div contenteditable="true" spellcheck="false">出问题时的状态</div> <br> <div class="protyle-attr" contenteditable="false">&ZeroWidthWhiteSpace;</div> </div>

    意外出现一个 <br> 标签,并且大纲面板中不能显示刚输入的标题文本。这时候及时使用CTRL+ALT+0(或CTRL+ALT+1)可以将这个一级标题转为段落块,之后又使用CTRL+ALT+1可以转换成一级标题。这时候就是正常的一级标题,不会出现运行时错误。不过转换之后会有一些遗留的问题,如下:

    <div data-subtype="h1" data-node-id data-node-index data-type="NodeHeading" class="h1" updated> ::before <!--依旧是主题添加的元素,内含图片--> <div contenteditable="true" spellcheck="false"> <span data-type="text" style="white-space-collapse: break-spaces;">标题文本</span> "<protyle-html>&ZeroWidthWhiteSpace;" </div> <div class="protyle-attr" contenteditable="false">&ZeroWidthWhiteSpace;</div> </div>

    这里会凭空冒出来一段文本 <protyle-html>&ZeroWidthWhiteSpace;,并且大纲面板中会显示为 标题文本<protyle-html>,手动删除后面的 <protyle-html> 可以恢复成刚才输入的标题文本。

    在进行上述测试之后,我将 ::before 方式添加的图片换成了 background-image 方式添加图片(显示效果仍与 VSCode Lite Edit 主题宣传图一致),仍然会导致运行时错误弹窗。在这个时候的 HTML 结构仅为上述 HTML 结构中去掉 ::before

    1 回复
    测了这么久之后我的思源卡的要死,内存占用最高只到 1.2G,干点什么都要等两秒,可能是后台开多了,毕竟浏览器,VSCode 什么都开着,16G 内存吃到 85% 了
    EmptyLight
  • 我这里也无法重现。

    正常的结构应该是这样的,看上去是 rang 不对,导致使用了浏览器默认的输入行为。

    image.png

    目前只能逐一排查问题。

    用伺服使用浏览器打开试试;关闭鼠标指针样式试试。

    不行的话在鼠标点击编辑器后和输入 # 及每一个字符后都在控制台输入 getSelection().getRangeAt(0) 并回车,查看一下日志。以上每一步并把 Dom 记录一下。

    谢谢。

    1 回复
  • EmptyLight 2 评论

    我自己的主题因为不知道什么修改暂时无法复现(希望以后也不要复现了),目前暂时切换到 Savor 录制问题。

    在浏览器伺服可以复现问题。复现的录屏附在下方。(含 getSelection()

    因链滴限制还是放网盘了

    还是无法重现,range 也是正常的,换个输入发试试,或者输入数字再试试。
    Vanessa
    @Vanessa 感谢 V 大指点,最新测试中发现问题限制到小狼毫输入法复现了,之前微软拼音也会的,今天测试不出来了,我准备检查一下触发情况,去那边反馈问问
    EmptyLight 1
请输入回帖内容 ...
EmptyLight
就地开摆,有事邮件,爱发电:https://afdian.com/a/tingyuting

推荐标签 标签

  • danl
    181 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 234 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 80 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    37 引用 • 157 回帖
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 138 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖 • 1 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    207 引用 • 1450 回帖 • 1 关注
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 650 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    500 引用 • 1396 回帖 • 253 关注
  • OnlyOffice
    4 引用 • 20 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 681 关注
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖 • 1 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 614 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖 • 1 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 443 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    76 引用 • 258 回帖 • 624 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 672 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    134 引用 • 1127 回帖 • 111 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 3 关注
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    84 引用 • 414 回帖
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    186 引用 • 1021 回帖 • 2 关注
  • 导航

    各种网址链接、内容导航。

    45 引用 • 177 回帖