SvelteKit:用户 404 后恢复状态

问题描述 投票:0回答:0

如何在 SvelteKit 上进行稳健的导航,以在用户欺骗浏览器 URL 栏时出现 404 时保持应用程序状态值?

我的游戏应用程序中有一个复杂的导航。

(编辑 3:删除/简化了一些段落)

现实世界的例子将近 30 页!

我将游戏竞技场板组合直接放在布局中,以便可以轻松显示主菜单等模态页面;堆在它们上面。

我编写了一个组件“GotoView”及其关联的商店,具有即时(按钮)和预定(计时器)导航功能。

我只是担心两个不好的用例:

  • 手机:不小心点击了“后退导航按钮”
  • desktop:手动重写 URL 栏(作弊)

...两者都可能搞乱应用程序状态并导致崩溃。

是否可以简单地阻止后退导航,并从 404 页面中恢复?

问候。

编辑:

是的!

  1. 后退导航:使用

    goto(url, { replaceState: true })
    并可能从
    $app/navigation

    无效
  2. 错误404:如果真正的404出现在

    src/routes/game/arena/game-arena-splash/+page.svelte
    中,我知道捕获404的唯一方法是
    /src/routes/game/arena/+error.svelte
    ,上一级

编辑(2)

顺便说一下,我试图嵌套更深的错误链接以模拟作弊 URL:

src/routes/
    +error.svelte
    +layout.svelte
    game/
       +error.svelte
       arena/
          +error.svelte
          /game-arena-splash
             +error.svelte
             +page.svelte

在最嵌套的页面中使用此链接:

< a href = "/game/arena/this-is-404" > BOOM !!! </ a >

...但没办法!无法捕获 404,直到它冒泡到根级别 (/src/routes) 加上布局重新加载,将恢复 404 的机会减少到零......并丢失存储的数据状态!!!

我之前也试过Navigate inside layouts ...

我应该考虑改用服务器、cookie 还是快照?

感谢回复!享受编码。

javascript routes uinavigationbar sveltekit robustness
© www.soinside.com 2019 - 2024. All rights reserved.