K2.10.1clipboard as implicit inter-app channel设计研究

剪贴板是跨应用传递数据的隐式通道,行为需要可预期

别名: 隐式剪贴板 · 复制粘贴通道 · system clipboard

概念解释

复制没有把一条看得见的管子接到另一个窗口上,粘贴却能把刚才的内容送过去。剪贴板作为隐式通道(clipboard as implicit inter-app channel)指数据经过一块全系统共享、默认不可见的缓冲区,在应用之间搬家。人预期的是:刚复制的就是将要贴上的,全机只有这一块缓冲,贴上会替换当前选区,复制不改源。拖放是一条看得见的跨应用通道;这里只谈这条看不见的,以及它的行为必须能被事先猜到。格式谈兼容,历史和云同步谈泄露,都不在这条。

机制

隐式的代价是状态外置且无界面:人看不见缓冲里现在是什么、是谁写进去的、会不会在贴之前被别的程序改掉。可预期性靠几条默认契约撑着——后写覆盖先写、粘贴读取当前值、源应用退出不应让已经复制的内容凭空消失。契约一破,通道还在工作,人却无法建模:有的应用把复制做成「等到粘贴才向源取数」,源一关就贴空;有的在退出时清空剪贴板,跨应用搬家失败;有的拦截粘贴改写成自己的对象,人以为贴的是文本。拖放至少在手指或指针下有一条可见轨迹,失败还能松手取消;剪贴板的失败发生在另一扇窗口、另一个时刻,因果被时间切开。

怎么研究

做跨应用搬家任务:在 A 里复制,切到 B 里粘贴,插入「源退出」「中间又复制了别的」「B 改写了贴入物」等干扰。

自变量:源在粘贴前是否退出、是否存在第二次复制、目标是否声明自己处理剪贴板、系统是否在锁屏或退出时清空。 因变量:贴入物是否等于最后一次有意复制、失败时人能否说出原因、是否改用拖放或保存文件作为退路。

实验室里两扇窗口并排,时间间隔太短,测不到「过了一小时再贴」的预期。要加延迟条件。不要把「贴出来的格式不对」算进这条——那是格式协商,只要人仍能指出「这就是我刚复制的那份东西」,通道行为仍算可预期。

边界

应用内的私有剪贴板(只在自己窗口之间搬)不走系统通道,预期可以另定,但不要静默覆盖系统缓冲,否则跨应用那一次会丢。多剪贴板工具把「最近一次」扩展成列表,契约从「只有一块」变成「可选一块」,必须让当前将要贴上的那一条可见,否则比系统默认更不可预期。远程桌面和虚拟机有时有两套剪贴板,人分不清贴的是本机的还是远端的。无障碍开关里「从焦点读出剪贴板」会把隐式变显式,验证时要当作另一条可见通道。

怎么落地

  • 复制立刻把数据交给系统缓冲,不要做成粘贴时再回头问源;源退出后,已经复制的内容仍应可贴。
  • 不要在应用退出、切换账号时悄悄清空系统剪贴板,除非安全场景并明确告诉人。
  • 拦截粘贴并改写时,让人能贴回「原来那份」(例如普通文本),不要只剩改写后的对象。
  • 验证:在记事本里写一句话并复制,关掉源应用,到目标里粘贴,内容必须还在。再开一个会改写粘贴的应用,确认人能得到未改写的退路。任何「只有源还开着才能贴」都把隐式通道做成了未声明的活连接。

延伸

  • 同组K2.10.2 复制内容的格式(纯文本、富文本、对象)决定粘贴目标的兼容性 · K2.10.3 系统服务菜单让功能可被其他应用直接调用而无需切换 · K2.10.4 剪贴板历史与云同步扩大了敏感信息意外泄露的范围
  • 相邻K2.05 跨应用拖放 · K1.07 系统分享面板
  • 站内检索system clipboard · implicit data transfer · copy-paste

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/K2.10.1