将渐进式 Web 应用与 Windows 共享集成

本文介绍如何将渐进式 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请求。 共享数据作为查询参数 titletexturl 传递。 发出以下请求: /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 共享工作表与其他应用共享徽标。

另请参阅