概述Web Share Target 允许应用成为系统分享目标。本文展示 manifest 配置与 SW 接收处理并持久化。Manifest 配置(示例){ "share_target": { "action": "/share", "method": "POST", "enctype": "multipart/form-data", "params": { "title": "title", "text": "text", "files": [{ "name": "files", "accept": ["*/*"] }] } } } Service Worker 接收并持久化self.addEventListener('fetch', event => { const url = new URL(event.request.url); if (url.pathname === '/share' && event.request.method === 'POST') { event.respondWith((async () => { const fd = await event.request.formData(); const title = fd.get('title') || ''; const text = fd.get('text') || ''; const files = fd.getAll('files'); const db = await new Promise((res, rej) => { const r = indexedDB.open('share', 1); r.onupgradeneeded = () => { const db = r.result; if (!db.objectStoreNames.contains('items')) db.createObjectStore('items', { autoIncrement: true }); }; r.onsuccess = () => res(r.result); r.onerror = () => rej(r.error); }); const tx = db.transaction('items','readwrite'); tx.objectStore('items').add({ title, text, ts: Date.now() }); for (const f of files) tx.objectStore('items').add({ fileName: f.name, type: f.type, size: f.size, ts: Date.now() }); await new Promise((res, rej) => { tx.oncomplete = res; tx.onerror = () => rej(tx.error); }); db.close(); return new Response('', { status: 201 }); })()); } });

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
1.921506s