支持与禁止的能力清单
基于纯本地不联网这一总约束,GenUI 规范(development-rules)明确列出了「支持什么、禁止什么」。这份清单是 genui check 的主要判据,也是开发时最常对照的红线表。
支持的能力
在本地范围内,你可以自由使用:
- 本地计算与渲染:任意 HTML/CSS/JS,canvas 绘图,SVG。
- 内置资源:把图片、字体(woff/woff2)、JSON 数据打进产物包。
- 剪贴板写入:
navigator.clipboard.writeText(...)是合规的(注意:读取剪贴板才被禁,写入允许)。 - 官方组件与图标:照搬
assets/components/里的控件,使用cos-icon字体图标。 - 打点:通过
window.genui.sendLog上报交互事件。 - 离线算法:如二维码编码、个税公式、混色计算等。
禁止的能力(红线)
以下任何一项出现在产物里都会被判违规:
- 产物外网络:运行时联网、外链图、远程接口。
- 运行时生成代码:
eval、new Function、动态执行字符串。 - 本地存储:
localStorage、IndexedDB、Cookie 持久化。 - 用户设备访问:读取通讯录、文件、定位等。
- 越出展示区:内容超出规定的小工具展示画布。
- 后台二进制:Worker、WASM、后台大量二进制处理。
- 第三方脚本 / CDN:任何外部 script 标签(src 外链)、外部样式、外部字体。
- iframe / 跳转:套外部站、打开外部网站。
- 系统弹窗:
alert/confirm/prompt。
两个最容易被忽视的坑
坑一:剪贴板「写」可以,「读」不行
很多工具需要「复制结果给用户」。navigator.clipboard.writeText(url) 写入剪贴板是允许的——万象云档速查正是用它在用户点书目时把直达链接写进剪贴板,再由用户去浏览器粘贴打开。但反过来,主动读取剪贴板内容是被禁的。方向别搞反。
坑二:「直接打开网站」是头号雷
想把已有网站做成小工具,直觉是「套个 iframe 或直接跳转」。这在 GenUI 里明确被禁。正确姿态是:把网站的核心数据/功能重新实现为本地小工具,而不是套壳。
小结
记住一句口诀:本地能算的都行,往外伸手的全禁。开发时每用一个 API,先对照这张清单问一句「它往外伸手了吗?」——没伸手,就安全。
