请求永久存储权限

时间:2018-08-02 15:32:23

标签: google-chrome permissions indexeddb web-storage

我的Web应用程序的用户已请求“离线模式”,该模式将其工作存储在硬盘驱动器上,而互联网连接不可用。他们可能会离线几分钟到几周,因此,为了防止丢失他们的工作,即使在存储压力下,我也必须能够持久存储数据(使用IndexedDB可能没有适当的权限数据丢失)。

我读到on Google Developers可以使用异步navigator.storage.persist()方法来请求用户存储文件的权限,但这在Chrome上不起作用-诺言总是返回false而没有提示用户。

然后,我读到here,Chrome可能会决定不显示权限弹出窗口,而是根据预先计算的决定授予或拒绝持久性存储权限。这似乎是基于以下情况:

  • 该网站已添加书签(用户拥有5个或更少的书签)
  • 该网站具有很高的网站参与度
  • 该网站已添加到主屏幕
  • 该网站已启用推送通知

如果以上任何条件为真,则该权限已被授予,否则,该权限将被自动拒绝。这意味着在Chrome中,navigator.storage.persist()navigator.storage.persisted()之间没有区别,即使第一个应该是权限请求,第二个应该是权限检查。

我已经构建了用于请求持久存储权限的应用内用户界面,因此,我所需要的就是确保权限弹出窗口显示在Chrome中的可靠方法,以便用户可以授予或拒绝该权限。由于我无法控制前三个条件,或者无法合理地要求用户满足它们,因此,我似乎唯一的选择是请求显示推送通知的权限,这很不幸,因为这不是 我需要的许可,我对显示推送通知没有兴趣。这样的权限请求可能会使用户感到困惑。

是否有更清晰,用户友好的方法来获得在Chrome中使用持久性存储的权限?

2 个答案:

答案 0 :(得分:3)

  

如果以上任何条件为真,则该权限已被授予,否则,该权限将被自动拒绝。

这是不正确的;仍然必须请求许可。在请求/授权之前,原产地仍将被视为“尽力而为”。该站点必须明确请求权限。您可以在从未请求过许可的网站上致电persisted()之前先致电persist()来观察到这一点。

  

我所需要的是确保权限弹出窗口显示在Chrome中的可靠方法,以便用户可以授予或拒绝该权限

Chrome对此权限没有权限弹出窗口,因此没有这种方法。

首选模型是在授予许可之前不提供有关脱机功能的保证;也就是说,要求获得许可,并且在授予后仅显示任何形式的“您的数据绝对绝对可以脱机使用”保证。

答案 1 :(得分:0)

Joshua所述,Chrome没有此权限的权限弹出窗口。

我所做的是在网站的网站设置中手动启用了推送通知。

Way to manually enable push notification in Chrome

这足以让Chrome授予我的网站持久性存储权限。