PAYATHON 2026

Chrome 在 Windows 11 中调用 getInstalledRelatedApps() 为何为空?

数据小陈

结论

根据问题中的修复备注,本例的解决办法是将 related_applications 条目中的 url 从 "/_new/manifest.json" 改为 "/",其他字段保持原样。

这一修复针对当前案例,不能据此推断所有 PWA 都必须使用 "/"。现有材料也不足以确定 assetlinks.json 是否为当前检测场景的必要条件。

先修改已指出的问题配置

在 https://www.swisswebcams.ch/_new/manifest.json 中,将对应配置改为:

{
  "related_applications": [
    {
      "id": "https://www.swisswebcams.ch/",
      "platform": "webapp",
      "url": "/"
    }
  ]
}

这是需要合并到原 Manifest 中的配置片段。Manifest 文件仍位于 /_new/manifest.json,无需移动;这里修改的是 related_applications[0].url。

原示例包含这一行:

"url": "/_new/manifest.json" // Using just "/" solved the issue

注释记录了修复线索。实际发布的 Manifest 必须是合法 JSON,不能保留 // 注释。如果注释只是在提问时添加的说明,就无需将其视为线上故障原因。

为什么存在这个 API,结果却仍然为空?

原调用中的判断:

'getInstalledRelatedApps' in navigator

只能确认当前 navigator 暴露了这个属性,不能保证调用结果包含应用。

返回 [] 表示本次调用没有返回应用条目,不能据此判断 Web App 没有安装,也不能认定这是 Chrome 的缺陷。

根据修复记录,related_applications 的 URL 配置是本例最直接的排查线索。材料没有提供修改前后的完整检测结果或浏览器内部匹配记录,因此无法确定具体是哪条匹配规则导致了差异。

修改后如何验证?

先确认浏览器实际获取到的 Manifest 已包含新的 url,再重新打开 Web App 并执行检测。下面的代码可以区分接口不存在、返回空数组和调用失败:

async function checkInstalledRelatedApps() {
  if (!('getInstalledRelatedApps' in navigator)) {
    console.warn('当前环境未提供 getInstalledRelatedApps');
    return;
  }

  try {
    const apps = await navigator.getInstalledRelatedApps();
    console.log('返回的应用数量:', apps.length);
    console.log(apps);
  } catch (error) {
    console.error('getInstalledRelatedApps 调用失败:', error);
  }
}

checkInstalledRelatedApps();

为便于比较,先只修改 related_applications[0].url,并在相同浏览器、相同调用位置下记录修改前后的结果。如果仍然返回空数组,再检查页面实际关联的 Manifest 是否就是这份文件,以及已安装应用是否来自当前测试的站点。

assetlinks.json 是否需要修改?

所给文件声明了 delegate_permission/common.handle_all_urls,目标是 https://www.swisswebcams.ch。仅凭这段配置,无法确定它是否满足当前 API 检测所需的关联条件,也无法认定它导致了空数组。

原始材料指出的修复发生在 Manifest 的 url 字段,没有提供修改 assetlinks.json 后产生效果的记录。因此,本例应先验证给出的 Manifest 修复。是否需要 assetlinks.json,应结合具体检测场景确认;文件存在本身不能保证检测成功。

备注:内容仅供参考。