Manifest share_target
一句话: share_target 将已安装的 PWA 注册到系统原生分享菜单,让其他应用可以直接向你的应用分享 URL、文本、标题与文件。在 Android 和 Windows 上,系统以 GET 或 POST 请求的形式将分享数据发送到你指定的 URL——再由你的 Service Worker 或页面处理器处理。
语法——分享文本、URL 与标题(GET)
Section titled “语法——分享文本、URL 与标题(GET)”{ "share_target": { "action": "/app/share-handler", "method": "GET", "params": { "title": "title", "text": "text", "url": "url" } }}当用户将内容分享到你的应用时,浏览器会导航至:
/app/share-handler?title=<分享标题>&text=<分享文本>&url=<分享URL>语法——分享文件(POST)
Section titled “语法——分享文件(POST)”{ "share_target": { "action": "/app/share-handler", "method": "POST", "enctype": "multipart/form-data", "params": { "title": "title", "text": "text", "url": "url", "files": [ { "name": "media", "accept": ["image/*", "video/mp4"] } ] } }}文件分享需要 "method": "POST" 和 "enctype": "multipart/form-data"。files 数组列出接受的 MIME 类型。
| 属性 | 是否必填 | 说明 |
|---|---|---|
action |
是 | 接收分享数据的域内 URL,必须位于 scope 之内。 |
method |
否 | "GET"(默认)或 "POST"。文件分享须用 POST。 |
enctype |
否 | POST 请求体的编码方式。设置 files 时必须为 "multipart/form-data"。 |
params.title |
否 | 分享标题字符串的查询参数名。 |
params.text |
否 | 分享文本字符串的查询参数名。 |
params.url |
否 | 分享 URL 的查询参数名。 |
params.files |
否 | 定义接受文件类型的 {name, accept} 对象数组。 |
Scope 约束
Section titled “Scope 约束”action 必须位于清单 scope 之内。若不满足,浏览器会完全忽略 share_target。
处理分享数据
Section titled “处理分享数据”GET 处理器(文本/URL)
Section titled “GET 处理器(文本/URL)”页面加载时从 URL 读取查询参数:
const params = new URLSearchParams(location.search);const sharedUrl = params.get('url');const sharedText = params.get('text');POST 处理器(文件)
Section titled “POST 处理器(文件)”在 Service Worker 中拦截 POST 请求并将数据传递给客户端:
self.addEventListener('fetch', (event) => { if (event.request.method === 'POST' && event.request.url.includes('/share-handler')) { event.respondWith((async () => { const data = await event.request.formData(); const files = data.getAll('media'); // 缓存或转发文件,然后重定向到应用 return Response.redirect('/app/editor', 303); })()); }});| 平台 | 支持情况 |
|---|---|
| Android(Chrome 76+) | GET 与 POST(含文件) |
| Windows(Edge 79+) | GET;POST 文件支持有限 |
| iOS(Safari) | 不支持 |
| macOS(Chrome/Edge) | 不支持 |
-
actionURL 位于清单scope之内。 - 文本/URL 分享时,查询参数名与页面读取的参数名一致。
- 文件分享时,
method为"POST",enctype为"multipart/form-data",且已列出接受的 MIME 类型。 - Service Worker 能处理 POST 请求并在处理完成后进行重定向。
- 已在 Android 上测试从其他应用(如系统浏览器)分享到 PWA 的流程。
- 当查询参数缺失或文件列表为空时,处理器能优雅降级。