本文介绍如何将渐进式 Web 应用(PWA)与 Windows 共享 功能集成。 此功能允许用户将内容从一个 Windows 应用共享到另一个 Windows 应用。 PWA 注册为 共享目标 ,以接收和处理应用中的共享文件。
什么是共享目标?
共享目标是 Windows 8 中引入的功能,它允许应用从另一个应用接收数据。 共享目标的工作方式类似于剪贴板,但具有动态内容。
共享 PWA 的内容
若要共享内容,PWA 会生成内容(如文本、链接或文件),并将共享内容移交给作系统。 操作系统允许用户选择用来接收该内容的应用程序。 PWA 可以使用 Web 共享 API 触发在 Windows 中显示共享工作表。 Microsoft Edge 和其他基于 Chromium 的浏览器支持 Web 共享 API。
有关如何从 PWA 共享内容的完整示例,请参阅 Microsoft Edge 文档中的 共享 内容。
在 PWA 中接收共享文件
若要接收内容,PWA 充当内容目标。 必须将 PWA 注册为操作系统的内容共享目标。
该 share_target
成员必须包含系统将共享内容传递到您的应用所需的信息。 请考虑以下示例清单文件 share_target
配置:
"share_target": {
"action": "./share_target_path/?custom_param=foo",
"method": "POST",
"enctype": "multipart/form-data",
"params": {
"files": [
{
"name": "mapped_files",
"accept": ["image/jpeg"]
}
]
}
},
当用户选择应用作为共享内容的目标时,将启动 PWA。 对由属性GET
指定的URLaction
发出HTTP请求。 共享数据作为查询参数 title
、text
和 url
传递。 发出以下请求: /handle-shared-content/?title=shared title&text=shared text&url=shared url
以下示例演示如何注册作用域内服务辅助角色:
navigator.serviceWorker.register('scoped-service-worker.js',
{ scope: "./share_target_path/" })
服务辅助角色根据需要处理共享数据,然后满足请求,也可以将请求重定向回自定义路径。 以下示例说明如何将请求重定向离开自定义路径:
self.addEventListener('fetch', (event) => {
event.respondWith((async () => {
// Read the shared data here, then
// Redirect back out of the share_target_path to the actual site
return Response.redirect(event.request.url.replace("share_target_path/", ""));
})());
return;
});
有关详细信息,请参阅 Microsoft Edge 文档中的 “接收共享内容 ”示例。
性能注意事项
如果只为共享支持添加提取处理程序,则当请求被服务辅助角色中断时,可能会出现潜在的延迟问题。 若要解决此问题,请考虑将 share_target
设置为伪子路径,并注册专门限定为该路径的服务工作者。 此方法允许为共享目标使用 提取 处理程序,而无需为其他调用注册相同的 提取 处理程序。
示例 PWA 应用
GitHub 上的 PWA 徽标打印机 示例应用演示如何将 PWA 与 Windows 共享工作表集成。 该应用允许用户将 PWA 徽标打印到打印机。 该应用使用 Windows 共享工作表与其他应用共享徽标。