修改当前网址(盖茨比/到达路由器)

时间:2019-07-13 19:28:59

标签: javascript gatsby reach-router

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

要具体,我要修改用户可见的网址;我不想触发导航。 (我有一个Gatsby应用,而Gatsby正在使用Reach Router。)

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

替换仅是可视的,因此,如果用户要复制URL以与朋友共享,则可以操纵他们看到并复制的URL。

Assign会加载一个新文档,就像您传递的URL是获取该文档的URL一样。

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

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

编辑:比较

Difference between window.location.assign() and window.location.replace()