我的网络应用程序的用户请求“离线模式”,在互联网连接不可用时将他们的工作存储在硬盘上。他们可能会离线几分钟到几周,因此为了防止工作丢失,我需要能够持久保存数据,即使在存储压力下(在没有适当权限的情况下使用 IndexedDB 可能会导致数据丢失)。
我在 Google Developers 上读到,异步navigator.storage.persist()方法可用于请求用户存储文件的权限,但这在 Chrome 上不起作用 - 承诺总是返回false而不提示用户。
然后我在这里读到Chrome 可能决定不显示权限弹出窗口,而是根据预先计算的决定授予或拒绝持久存储权限。这似乎是基于以下几点:
如果上述任何一项为真,则已授予该权限,否则将自动拒绝。navigator.storage.persist()这意味着在 Chrome 中,和之间没有区别navigator.storage.persisted(),尽管第一个应该是权限请求,第二个应该是权限检查。
我已经构建了用于请求持久存储权限的应用程序内 UI,因此我需要的是一种可靠的方法来让权限弹出窗口显示在 Chrome 中,以便用户可以授予或拒绝该权限。由于我无法控制前三个条件,或合理地要求用户满足它们,似乎我唯一的选择是请求显示推送通知的权限,这很不幸,因为这不是我需要的权限,而且我拥有没有兴趣显示推送通知。类似的权限请求可能会让用户感到困惑。
有没有更清晰、用户友好的方式来获得在 Chrome 中使用持久存储的权限?
每当加载路线时,我的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)将不会触发afterEach或onError,因此它将使应用永远处于加载状态。
我尝试的一件事是使用beforeResolve而不是beforeEach。由于我的beforeEnter路由选择器是异步的,因此无法解决,并且我想在执行时显示加载屏幕。
另一种可能的解决方案是始终调用next(error),而不是next(false)使onError钩被触发。但是,当有人尝试按预期使用导航卫士API时,这是一个等待稍后发生的错误。
最后一种选择是将this.loading逻辑隔离到全局可访问的类或事件总线中,并让路由保护程序根据情况进行处理。
但是我更喜欢设置它,然后忘记它。取消导航时是否有全局钩子被调用?afterEach在这种情况下为什么不叫?
我正在做一个有两个遥控器的项目,一个叫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
... …
如果我运行以下代码:
(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# ×1
casting ×1
git ×1
git-checkout ×1
git-remote ×1
hook ×1
indexeddb ×1
javascript ×1
nullable ×1
permissions ×1
vue-router ×1
vue.js ×1
web-storage ×1