网站首页 > 技术文章 正文
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,如果我们不小心,可能会导致安全问题。
猜你喜欢
- 2024-11-25 浅谈SPA单页面应用原理
- 2024-11-25 一起学Vue:路由(vue-router)
- 2024-11-25 vue:vue-router相关
- 2024-11-25 「Burpsuite练兵场」CSRF(二)
- 2024-11-25 一文让你彻底搞懂 vue-Router
- 2024-11-25 Html5监听返回事件
- 2024-11-25 具名插槽使用出现空白
- 2024-11-25 手把手教你快速升级将React Router v5 路由器更新到v6
- 2024-11-25 深度:从零编写一个微前端框架
- 2024-11-25 路由的两种模式:hash模式和 history模式
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-