碎片时间学编程「27]:如何在不重新加载页面的情况下使用 JavaScript 修改 URL?

API 使用历史

HTML5 History API 绝对是现代网站的必经之路。它完成了手头的任务,同时还提供了额外的功能。我们可以使用history.pushState()或history.replaceState()修改浏览器中的 URL,具体取决于我们的需要:

// Current URL: https://my-website.com/page_a

const nextURL = 'https://my-website.com/page_b';

const nextTitle = 'My new page title';

const nextState = { additionalInformation: 'Updated the URL with JS' };

// This will create a new entry in the browser's history, without reloading

window.history.pushState(nextState, nextTitle, nextURL);

// This will replace the current entry in the browser's history, without reloading

window.history.replaceState(nextState, nextTitle, nextURL);


两种方法的参数是相同的,允许我们传递一个自定义的可序列化state对象作为第一个参数,一个自定义的title(尽管大多数浏览器会忽略这个参数)和URL我们想在浏览器的历史记录中添加/替换的。请记住,History API 仅允许同源 URL,因此我们无法导航到完全不同的网站。

使用位置 API

较旧的 Location API 并不是完成这项工作的最佳工具。它会重新加载页面,但仍允许我们修改当前 URL,并且在使用旧版浏览器时可能很有用。我们可以使用 location.assign() 或 location.replace() 修改Window.location.hrefURL :

// 当前URL: https://my-website.com/page_a

const nextURL = 'https://my-website.com/page_b';

// 这将在浏览器的历史记录中创建一个新条目,然后重新加载

window.location.href = nextURL;

// 这将替换浏览器历史记录中的当前条目,然后重新加载

window.location.assign(nextURL);

// 这将替换浏览器历史记录中的当前条目,然后重新加载

window.location.replace(nextURL);

如我们所见,所有三个选项都会导致页面重新加载,这可能是不可取的。与 History API 不同,我们只能设置 URL,没有任何附加参数。最后,Location API 不会限制我们使用同源 URL,如果我们不小心,可能会导致安全问题。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 以下内容主要参考自 深入理解 react-router 路由系统react-router的实现原理前端路由实现与 ...
    zhulichao阅读 1,802评论 0 1
  • 在实现该操作之前首先要清楚,当前的url是哪种模式:a:history b:hash 模式。模式不同对应的操作不同...
    九下下阅读 2,414评论 0 3
  • 前言 金九银十,又是一波跑路。趁着有空把前端基础和面试相关的知识点都系统的学习一遍,参考一些权威的书籍和优秀的文章...
    WEB前端含光阅读 795评论 0 2
  • JS的单线程模型和事件循环机制 JS的单线程模型意味着,在执行JS时只有一个主线程,每个任务必须顺序执行。如果当前...
    hyy_1754阅读 537评论 0 0
  • 1、 HTML语义化 根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开发者阅读和写出更优雅的代码...
    5e8294296ff4阅读 781评论 0 0

友情链接更多精彩内容