小编Isa*_*man的帖子

请求持久存储权限

我的网络应用程序的用户请求“离线模式”,在互联网连接不可用时将他们的工作存储在硬盘上。他们可能会离线几分钟到几周,因此为了防止工作丢失,我需要能够持久保存数据,即使在存储压力下(在没有适当权限的情况下使用 IndexedDB 可能会导致数据丢失)。

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

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

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

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

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

有没有更清晰、用户友好的方式来获得在 Chrome 中使用持久存储的权限?

permissions google-chrome web-storage indexeddb

8
推荐指数
1
解决办法
2585
查看次数

导航取消时的Vue-Router回调

每当加载路线时,我的Vue应用程序都会显示一个加载屏幕,因为代码拆分路线有时需要花费几秒钟来加载。它使用全局beforeEach钩子执行此操作。

// App component
this.$router.beforeEach(() => { this.loading = true })
this.$router.afterEach(() => { this.loading = false })
this.$router.onError(() => { this.loading = false })
Run Code Online (Sandbox Code Playgroud)

问题是,如果我在路由定义(如beforeEnter)上创建了一个防护,调用next(false)将不会触发afterEachonError,因此它将使应用永远处于加载状态。

我尝试的一件事是使用beforeResolve而不是beforeEach。由于我的beforeEnter路由选择器是异步的,因此无法解决,并且我想在执行时显示加载屏幕。

另一种可能的解决方案是始终调用next(error),而不是next(false)使onError钩被触发。但是,当有人尝试按预期使用导航卫士API时,这是一个等待稍后发生的错误。

最后一种选择是将this.loading逻辑隔离到全局可访问的类或事件总线中,并让路由保护程序根据情况进行处理。

但是我更喜欢设置它,然后忘记它。取消导航时是否有全局钩子被调用?afterEach在这种情况下为什么不叫?

javascript hook vue.js vue-router

5
推荐指数
0
解决办法
464
查看次数

为什么Git不让我从备用遥控器中签出分支?

我正在做一个有两个遥控器的项目,一个叫origin,另一个叫vsts。默认的遥控器是origin。这是的输出git remote -v,其中一些部分匿名表示为***

$ git remote -v origin git@bitbucket.org:***/***.git (fetch) origin git@bitbucket.org:***/***.git (push) vsts ssh://***@vs-ssh.visualstudio.com:***/DefaultCollection/***/_ssh/*** (fetch) vsts ssh://***@vs-ssh.visualstudio.com:***/DefaultCollection/***/_ssh/*** (push)

我正尝试从中签出新的分支vsts。叫做release/1.4.1。我在Git 2.16.x上,因此我应该可以使用git checkout,但这是发生的情况:

$ git checkout release/1.4.1 error: pathspec 'release/1.4.1' did not match any file(s) known to git.

我想也许是我的意思origin。所以我尝试这样:

$ git checkout vsts/release/1.4.1 error: pathspec 'vsts/release/1.4.1' did not match any file(s) known to git.

我应该确保git可以找到分支。所以我git ls-remote用来获取远程分支的列表:

$ git ls-remote vsts ... …

git git-checkout git-remote

2
推荐指数
1
解决办法
1018
查看次数

为什么C#的System.Convert转换(字符串)为(int),而不是(字符串)为(int?)?

如果我运行以下代码:

(int)Convert.ChangeType("3", typeof(int))

结果是3.真棒.

如果我将其更改为:

(int?)Convert.ChangeType("3", typeof(int?))

结果是

从'System.String'到'System.Nullable`1 [[System.Int32,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]'的无效演员表.

但是,它处理这个很好:

(int?)Convert.ChangeType("3", typeof(int))

为什么它不能直接处理转换为可空的int类型?

c# casting nullable

0
推荐指数
1
解决办法
144
查看次数