我们正在运行启用Chrome和Samsung Internet推送通知的渐进式Web应用程序,并鼓励我们的用户将其添加到主屏幕。我们会仔细记录和监控浏览器异常,以保持高质量的服务。
自2018年5月22日起,我们注意到突然出现了令人困惑的JavaScript异常,这些异常源于调用先前从未失败过的标准、特征检测的Web API。
例如,尽管“push”明显是Permissions.query() specs规范中的有效值,但以下代码将产生以下错误:
这个未知的来自Google的客户端是什么?
它的目的是什么?
开发者应该如何检测它们,并采取什么措施?
2018年8月更新:上述描述的请求似乎已经完全消失了...但它们可能是某种类似于我们现在看到的请求的原型。这些新类型的请求仍然源自Google服务器,似乎专门针对我们PWA的Web清单,因此不再触发JavaScript错误。它们都带有Chrome/59+用户代理字符串,明显后缀为
自2018年5月22日起,我们注意到突然出现了令人困惑的JavaScript异常,这些异常源于调用先前从未失败过的标准、特征检测的Web API。
例如,尽管“push”明显是Permissions.query() specs规范中的有效值,但以下代码将产生以下错误:
const permissionStatus = await navigator
.permissions
.query({ name: 'push', userVisibleOnly: true });
TypeError: 无法从'Permissions'读取'query'属性:提供的值“push”不是PermissionName类型的有效枚举值。
仔细检查后,我们发现所有此类错误都发生在非实际客户端执行脚本的用户代理中。相反,我们看到一个未知客户端在我们的用户访问后查询我们的应用程序:
- 用户访问我们的PWA,没有报告错误
- 用户使用“添加到主屏幕”(大多数情况下),没有报告错误
- 未知客户端访问我们的PWA,报告错误。
此未知客户端执行 HTTP 请求,具有特征模式:
- URL与用户访问的完全相同
- 起始IP地址分配给Google公司(66.102.0.0/20或66.249.64.0/19范围)
- 引用者是“https://www.google.com/”
- 用户代理字符串与用户的某些匹配:Android版本相同,设备构建相同,浏览器不同,但浏览器版本不同,始终来自以下列表:
- Chrome/66.0.3359.126(5月22日→5月30日)
- Chrome/66.0.3359.158(6月11日→6月25日)
- SamsungBrowser/3.0 Chrome/38.0.2125.102(6月25日→6月27日)
- SamsungBrowser/6.4 Chrome/56.0.2924.87(5月22日→5月30日、6月25日)
- SamsungBrowser/7.0 Chrome/59.0.3071.125(5月22日→5月30日、6月25日)
此外,这些请求仅间歇性发生,以看似受控的方式反映在上述日期和下面的图表中:
这一事实,以及我们在大多数情况下检测到“添加到主屏幕”的使用,使我们想知道这是否与WebAPKs有关的实验。然而,这是未经记录的,因此非常令人困惑。这个未知的来自Google的客户端是什么?
它的目的是什么?
开发者应该如何检测它们,并采取什么措施?
2018年8月更新:上述描述的请求似乎已经完全消失了...但它们可能是某种类似于我们现在看到的请求的原型。这些新类型的请求仍然源自Google服务器,似乎专门针对我们PWA的Web清单,因此不再触发JavaScript错误。它们都带有Chrome/59+用户代理字符串,明显后缀为
(via Google-Chrome-WebAPK)
。其他浏览器,如三星Internet,尚未被发现。