简体中文

开发者工具 · HTML WYSIWYG 编辑器

剪贴板上的富文本:格式如何在应用程序之间传输

· 背景

html 剪贴板 内容可编辑

HTML 和纯文本剪贴板表示在编辑器中采用不同的路径
原始 ToolAcre 矢量图

解释富文本副本放置在剪贴板上的多种格式、每个应用程序如何选择一种格式,以及为什么粘贴的标记永远不完全是复制的内容。

相同的副本,三种不同的粘贴 - 打开时内容粘贴到浏览器、终端和邮件客户端

一个复制的段落可以作为浏览器编辑器中的格式化内容到达,而在终端中作为未格式化的字符到达,因为目的地请求不同的表示形式。 ToolAcre 的粘贴处理程序向剪贴板请求 HTML 和纯文本,然后遵循固定分支,而不是信任浏览器的默认插入。

如果存在 HTML,则原始丰富片段永远不会直接进入表面。它首先通过消毒剂。如果不存在 HTML,则插入纯文本。该本地规则解释了该编辑器的行为,但没有说明每个邮件客户端、操作系统或办公套件如何优先考虑剪贴板数据。

此粘贴处理程序读取文本/html 和文本/plain; 更广泛的剪贴板风格不在证据范围内

剪贴板可以包含一个选择的多个表示。此实现显式处理 `text/html` 和 `text/plain`。它不枚举 RTF、图像、文件引用或特定于应用程序的格式,因此不应将这些暗示为支持的输入。

这两个字符串可以编码不同的信息。纯文本包含字符和换行符,而 HTML 可以包含段落、列表、强调和链接以及不需要的属性。 ToolAcre 在可用时倾向于结构,但在插入之前通过其元素、属性和 URL 策略缩小结构范围。

谁编写了 HTML 风格 - 解释了源应用程序生成它,这就是为什么 Word 和 Google 文档粘贴看起来如此不同

源应用程序创建 HTML 表示形式,这就是为什么两个视觉上相似的副本可以提供不同的包装器和表示形式。 ToolAcre 不识别生产者。它应用一个通用规则:无论来源如何,不支持的包装器和属性都会被删除。

这可以防止 Word 或 Google Docs 内部的无源目录成为产品声明。删除列表准确地告诉作者这个解析器拒绝了什么。如果对源应用程序的保真度很重要,请从支持的环境中捕获真实的固定装置并对其进行测试,而不是依赖于通用的文章示例。

目的地如何选择 - 包括偏好顺序和粘贴为纯文本快捷方式

目的地通过代码选择。在这里,非空 HTML 获胜;否则使用纯文本。没有用于“粘贴为纯文本”的工具栏开关,并且存储库源没有定义键盘快捷键行为。浏览器和操作系统可以独立提供此类手势。

删除处理与 DataTransfer 的想法相同:防止默认、读取 HTML 和纯值、在 `insertHTML` 之前清理 HTML,或通过 `insertText` 发送纯字符。与粘贴不同,放置路径不会显示相同的详细删除计数,但刷新仍会更新可见文档。

此实现未显式解析平台片段元数据

某些平台将 HTML 剪贴板片段包装在元数据或标记中,但 ToolAcre 不包含针对指定平台格式的显式解析器。它的标记生成器看到 `getData("text/html")` 返回的字符串并处理识别的标记。因此,本文省略了标头语法、偏移量和特定于操作系统的保证。

如果包装显示为注释,则注释将被删除。如果元数据到达可识别的 HTML 之外,则应测试行为。定性的可能性不足以声明对代码从未命名的平台协议的支持或拒绝。

工作示例:将丰富的剪贴板有效负载与纯纯有效负载进行比较

复制包含强文本、简短列表和 https 链接的非敏感段落。丰富的粘贴可以保留那些允许的结构,删除源样式并将 rel 添加到链接。检查来源和删除警告。然后通过不提供 HTML 的环境粘贴纯文本表示形式。

普通结果包含在选择处插入的字符;任何块结构都是由浏览器编辑主机决定的,而不是从原始 HTML 中恢复的。与元素分开比较单词和行边界。该练习演示了表示之间的转换,而不是逐字节复制。

这不包括什么 - 剪贴板 API、图像、平台快捷方式或权限矩阵

本文不涉及 navigator.clipboard 编程、权限提示、剪贴板图像、文件、RTF、移动快捷方式或跨平台首选项矩阵。它还没有声称拦截的丰富粘贴可以使任意恶意 HTML 安全发布。

ToolAcre 的清理工具很窄并且承认解析器差异。它的沙箱会阻止本地预览中的执行,但复制的 HTML 会离开该环境。接收服务器需要适当的基于解析器的清理程序和输出策略,而用户应避免将机密粘贴到任何未经审查的页面中。

要点:粘贴是翻译,而不是副本 — 总结了模型以及 ToolAcre 的 HTML WYSIWYG 编辑器如何让您检查翻译生成的内容

丰富的粘贴是一种翻译:源写入表示形式,目标选择一个表示,ToolAcre 在插入之前过滤所选的 HTML。了解该顺序可以解释为什么格式可以消失而不将剪贴板视为损坏。

使用代表性装置,检查生成的源并在清理可能消除意义时保留原始内容。普通粘贴对于重置演示很有用,而丰富的粘贴可以保留结构。这两条路径都不能减轻目的地的卫生、兼容性测试或编辑审查的负担。