问题:是否可以修改浏览器地址栏中显示的当前URL和浏览器历史记录?
要具体,我仅要修改用户可见的网址;我不想触发导航。 (我有一个Gatsby应用,而Gatsby正在使用Reach Router。)
动机:我有一个图片库,用户可以单击该图片库并导航到诸如/images/?id=52
之类的URL。这种方法的优点是可以预取/images/
以启用页面的即时呈现。但是,此方案对禁用JS的用户不友好,因为他们在使用查询参数进行导航时根本看不到任何图像。因此,我还预渲染了/images/52/
之类的页面,这些页面无需使用JS。因此,我想做的是使用查询参数导航JS用户,然后将他们看到的URL修改为可以与包括非JS用户在内的任何人共享的URL。
答案 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()