1

我有一个用例,其中显示带有一些帮助文本的黑色叠加层,以允许或拒绝 Web 推送通知。

this.showOverlay();
Notification.requestPermission().then((permission) => {
   ...
   this.hideOverlay();
   ...
})

早些时候,我没有在隐身模式下执行此代码。但是现在由于谷歌已经关闭了所有检测隐身模式的漏洞,我得到了几秒钟的覆盖,然后它就自动消失了。
实际上,在隐身模式中,Chrome 并不是在等待用户允许或拒绝它,而是在延迟几秒钟后自行拒绝它。

所以问题是:
1.我可以停止在隐身模式下请求权限吗?(似乎不可能) 2. Chrome 拒绝许可后是否有固定的持续时间?

您可以在任何显示覆盖的网站中看到此问题,同时在隐身模式下请求通知权限。例如,https://www.facebook.com

4

1 回答 1

1

不幸的是,让它工作的唯一方法是在请求权限之前取消使用自定义弹出窗口。或者做一些时间,比如需要许可,如果承诺在几秒钟内没有解决,则显示自定义弹出窗口。

浏览器不想让你知道你处于隐身状态,所以这确实是个问题。这是一个问题,例如我们想向用户解释我们将向他发送什么通知。由于许多网站提供新闻通知和一些毫无价值的更新,许多用户只要看到权限弹出窗口就点击“阻止”。...并且不会收到有关我们网站上传入消息或任何其他重要信息的通知。在这种情况下,自定义弹出延迟不会有太大帮助,但它主要取决于用户。因此,在某些有限的情况下可能是一种解决方案。

至于持续时间,我没有注意到任何区别:它不会立即解决承诺,而是需要时间,就好像用户拒绝了一样。它也可能受到不同原因的影响,例如用户设备性能等。

于 2020-06-03T11:27:42.250 回答