1

问题:是否可以修改浏览器地址栏和浏览器历史记录中显示的当前 URL?

具体来说,我只想修改用户可见的URL;我不想触发导航。(我有一个 Gatsby 应用程序,而 Gatsby 正在使用 Reach Router。)

动机:我有一个图片库,用户可以单击并导航到 URL,例如/images/?id=52. 这种方法的优点是/images/可以预取以启用页面的即时呈现。但是,这种方案对禁用 JS 的用户不友好,因为他们在使用查询参数导航时根本看不到任何图像。所以我也预渲染/images/52/了没有 JS 的页面。所以我想做的是使用查询参数导航 JS 用户,然后将他们看到的 URL 修改为可以与包括非 JS 用户在内的任何人共享的 URL。

4

2 回答 2

1

我认为您正在寻找的是window.location.replace()或者window.location.assign()

替换只是视觉上的,因此如果用户要复制 URL 以与他们的朋友分享,您可以操纵他们看到和复制的那个 url。

分配加载一个新文档,就好像您传递给它的 URL 是获取该文档的 URL。

https://developer.mozilla.org/en-US/docs/Web/API/Location/replace

https://developer.mozilla.org/en-US/docs/Web/API/Location/assign

编辑:比较

window.location.assign() 和 window.location.replace() 的区别

于 2020-02-12T04:01:38.443 回答
0

我相信您需要创建一个 NodeJs 服务器来处理此类操作。它可以从 URL ('images/?id=52') 获取查询参数,然后将用户返回到 URL 'images/52'。

或者您可以使用“gatsby-source-filesystem”包。

于 2020-02-12T03:43:47.753 回答