K2.10.3system services menu设计

系统服务菜单让功能可被其他应用直接调用而无需切换

别名: macOS 服务菜单 · Services · 就地调用

概念解释

在任意应用里选中一段字,打开「服务」菜单,选「用邮件发送所选内容」或「在词典中查找」,当前窗口不用让出前台,目标能力已经作用在这段选区上。系统服务菜单(Services)把一个应用的能力注册成可被其他应用就地调用的项,人不必复制、切换、粘贴再切回来。它不是分享面板那种「把内容送走」的出口,也不是剪贴板那种隐式缓冲;它是一条显式的、挂在系统菜单上的调用表。Windows 上相近的是「发送到」、部分「打开方式」和后来的共享目标,机制同一类:能力跟着选区走,而不是人跟着应用走。

机制

桌面把「当前选区」当成可以交给别人的参数。服务提供者声明自己吃什么类型、产出什么(改选区、打开结果窗、写回文件)。调用发生在源应用的菜单里,源不必实现那项功能,也不必知道提供者内部怎么做。省下的是一次应用切换和一次通道往返:没有「先把数据放到某处再在别处取」。失败模式也来自这张表的隐身——项太多、名字像开发模块、或当前选区类型不匹配时整项消失,人会以为系统没有词典、没有「做成新邮件」。服务若把选区送到后台处理却不改当前窗,人会以为没发生;若强行把前台抢走,又毁了「无需切换」的那一半。

边界

没有选区的命令(「立刻备份整盘」)不适合挂在服务菜单里,那是应用自己的入口。触屏和纯键盘用户若打不开那一层系统菜单,服务等于不存在,必须在源应用里另有入口。沙盒会限制提供者能读到的选区范围,声明过宽的服务会被系统直接不列出。远程或网页套壳桌面往往没有这张表,跨应用调用要退回剪贴板或分享。服务把数据交给第三方应用时,泄露范围跟剪贴板历史不是同一条问题——这里是一次有意的、点了菜单的调用。

怎么落地

  • 把「对当前选区做一件完整的事」注册成服务,类型声明写清吃文本、富文本还是文件,不要把内部模块名当作菜单名。
  • 当前选区类型不匹配时禁用并留在菜单里,或在不可用时说明要先选什么;不要让整张服务表随着选区时有时无。
  • 调用后默认把结果写回选区或在不抢前台的情况下给出结果,需要人接着编辑再才把窗口调到前台。
  • 验证:在一个不含该功能的应用里选中文本,只通过系统服务完成「查词 / 生成新邮件 / 传到指定工具」。全过程不应要求先复制再切换。再换一种选区(纯图、空选区)看菜单是否仍能解释为什么某项不可用。

延伸

  • 同组K2.10.1 剪贴板是跨应用传递数据的隐式通道,行为需要可预期 · K2.10.2 复制内容的格式(纯文本、富文本、对象)决定粘贴目标的兼容性 · K2.10.4 剪贴板历史与云同步扩大了敏感信息意外泄露的范围
  • 相邻K2.03 菜单栏 · K1.07 系统分享面板
  • 站内检索Services menu · in-place invocation · selected-content services

同组卡片

快捷操作

分享

分享当前页面

ios_share

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