`documentId` 可以理解为一份 Mindraw 文档的“永久身份证”。它不是文件名,也不是磁盘路径,而是写在 `.mindraw` 文档包内部 `manifest.json` 里的唯一标识。 例如: ```json { "documentId": "mdoc_fxt_minimal_empty_7P2J9K4M8R1T6V3X" } ``` ### 为什么需要 documentId 文件路径并不稳定。比如: ```text /Users/ar/Desktop/实验-ob-tag-page/26.0828-01.mindraw ``` 之后可能被: - 改名; - 移到另一个文件夹; - 移进 Obsidian 仓库; - 从其他电脑同步回来。 如果链接直接保存绝对路径,移动文件后链接就会失效。因此 Mindraw 用 `documentId` 表示“这是哪一份文档”,用 `elementId` 表示“要定位到文档里的哪个对象”。 完整链接类似: ```text mindraw://localhost ?documentId=mdoc_ABC123 &elementId=sS0GXWYigG9i42EMEC7yW ``` 其中: - `mindraw://`:要求 macOS 调起 Mindraw。 - `documentId`:找到具体的 `.mindraw` 文档。 - `elementId`:在文档中找到具体 Frame、图形或文字元素。 ### 它和文件路径有什么区别 | 标识 | 表示什么 | 是否容易改变 | |---|---|---| | 文件名 | 文档当前叫什么 | 会改变 | | 文件路径 | 文档当前放在哪里 | 会改变 | | `documentId` | 这究竟是哪一份文档 | 原则上不变 | | `elementId` | 文档里的哪一个对象 | 对象未删除时通常不变 | 可以类比为: - 路径是住址; - `documentId` 是身份证号; - `elementId` 是房间号。 住址可以变化,但身份证不应随之变化。 ### Mindraw 如何使用它 Mindraw正常打开一个 `.mindraw` 包时,会: 1. 读取包内的 `manifest.json`; 2. 获得 `documentId`; 3. 将这个 ID 与当前磁盘路径关联; 4. 复制对象链接时,把 `documentId` 和 `elementId` 写进链接; 5. 以后打开该链接时,根据 `documentId` 找回文档,再定位到对应元素。 如果文档移动过,Mindraw 本机记录的旧路径可能失效。这时合理行为应当是让用户重新选择对应的 `.mindraw` 包,验证其 `documentId` 后重新建立关联。 ### 它是不是隐私或密钥 不是。`documentId`: - 不是密码; - 不是授权令牌; - 不能让别人远程读取你的文件; - 一般只是随机生成的文档标识。 别人只有这个链接,但电脑上没有相应 `.mindraw` 文件,仍然打不开文档内容。 ### 复制文档时应该怎么办 这里需要区分两种语义: - 只是移动、改名或同步同一份文档:应该保留原 `documentId`,旧链接才能继续指向它。 - 创建一份真正独立的新文档:原则上应生成新的 `documentId`,避免两份文件都声称自己是同一文档。 如果直接在 Finder 里复制整个 `.mindraw` 包,两份包可能暂时拥有相同 `documentId`。这会造成链接目标歧义,需要 Mindraw在“另存为副本”场景中明确处理。 ### 这次错误说明了什么 你的 Frame 本身有正常的元素 ID: ```text sS0GXWYigG9i42EMEC7yW ``` 但复制时,Mindraw前端没有拿到当前文档的 `documentId`,于是错误地退回了: ```text tauri://localhost?element=... ``` 所以问题不在 Frame,也不是你操作错了;问题是 Mindraw 在当前运行状态中没有正确携带文档身份,并且错误地把内部兜底地址暴露给了你。