复制内容的格式(纯文本、富文本、对象)决定粘贴目标的兼容性
别名: 剪贴板格式 · 粘贴兼容 · pasteboard UTI
概念解释
源应用往剪贴板里同时放 HTML、富文本、纯文本和一张图,目标只认识纯文本,贴进去就只剩字。格式决定兼容性(clipboard format negotiation)说的是:复制不是一份东西,是一组表示;目标按自己能吃的最富的那种来取,取不到就贴空、贴乱码、或带上一堆源的样式。通道行为可不可预期是另一件事;这里只谈表示集合如何决定「贴得上、贴得像、贴得干净」。
机制
系统剪贴板是多槽的:同一份逻辑内容可以登记若干类型(纯文本、RTF、HTML、文件 URL、私有对象)。目标按自己声明的清单从富到贫挑选。源若只登记私有对象,除了自己谁都贴不上。源若只登记富文本,纯文本编辑器要么拒绝,要么吃进控制字符。反过来,源把三种都登记了,目标仍可能选错槽——有的编辑器默认贴 HTML,把源的字体、颜色、条件批注一起带进一份本该是纯文字的草稿。协商失败看起来像「复制坏了」,其实通道是通的,只是两端没有交集,或交集不是人想要的那一层。拖放也有类型声明,但拖的过程里还可以用目标高亮来谈;剪贴板的协商发生在人已经切到另一扇窗口之后,没有第二次选择。
怎么研究
固定一份内容,改变源登记的类型集合和目标接受的类型集合,看贴出物。加入「粘贴并匹配样式」作为对照。
自变量:源登记的类型(仅富文本 / 富+纯 / 仅私有对象)、目标接受集、是否提供「只贴文字」的显式命令。 因变量:贴入成功率、是否带入源样式、人是否认为失败在复制还是在粘贴、改用「贴为纯文本」的比例。
用「成功贴上」当唯一指标会掩盖样式污染:字在,格式是错的。要把「有内容」和「内容层级符合目标情境」分开编码。不同操作系统的类型名不可互换,跨平台结论要按系统分别报。
边界
两端都是同一应用时,私有对象是优势而不是障碍,协商可以走内部类型。纯文本终端、代码编辑器把「带样式」一律视为污染,兼容性应偏向贫的那一层。图像和文件引用不是文本的贫富阶梯,而是另一条类型支路:目标若不声明收图,登记了图也没用。网页内容复制常带大量 HTML 壳,桌面端「看起来像字」其实是结构化标记,目标若按 HTML 吃,会贴进表格和脚本残留。
怎么落地
- 复制时至少同时登记目标群体真正会用的贫表示(通常是纯文本)和需要保真的富表示,不要只丢私有对象。
- 提供「粘贴并匹配样式 / 只贴文字」,让人在协商选错槽时有一条显式退路,不要只靠目标的默认挑选。
- 作为目标,声明你真正能处理的类型;不认识的富格式宁可取纯文本,不要把控制字符或残缺 HTML 画到正文里。
- 验证:从带样式的页面复制一段,分别贴进纯文本字段、富文本草稿、只接受图像的画布。纯文本处应无标签、无颜色;画布上若不是图应明确失败而不是贴进一串 URL 垃圾。任何「有的窗口能贴、有的完全没反应」都要列出两端的类型交集。