返回顶部
首页 > 资讯 > 精选 >怎么在HTML5中实现无刷新修改URL
  • 856
分享到

怎么在HTML5中实现无刷新修改URL

2023-06-09 12:06:31 856人浏览 泡泡鱼
摘要

怎么在HTML5中实现无刷新修改URL?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。window.location.href,拼接一个搜索的key值,点击搜索的

怎么在HTML5中实现无刷新修改URL?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

  • window.location.href,拼接一个搜索的key值,点击搜索的同时,刷新了页面,url改变了,功能是实现了,可是bug来了...,搜索页面闪烁后才进入结果页,而结合不跳转页面就不会发生闪烁的情况,所以当页面刷新时,Vue实例都会被重新加载。

  • window.location.hash,url中#为网页中的一个位置,当读取此url时,页面会自动滚动到锚点处。这种方法不会向服务器发送请求,也不会重载页面。可读写。读取时,可以用来判断网页状态是否改变;写入时,则会在不重载网页的前提下,创造一条访问历史记录。

新增API

百度后发现html5为window.history对象引入了两个新的apihistory.pushState()history.replaceState()方法,它们分别可以添加和修改历史记录条目。这些方法通常与window.onpopstate事件配合使用。两种api都能改变当前的url,不同的是,pushState在浏览器中创建一条新的历史记录,而history.replaceState仅仅替换当前地址为指定url。

HTML5 新增的历史记录 API 均可以实现无刷新更改地址栏链接,配合 ajax 完全可以做到无刷新跳转。他们的作用非常大,可以做到改变网址却不需要刷新页面,这个特性后来用到了单页面应用中比如:vue-router,React-router-dom里面。那么下面介绍新API的使用方法

pushState方法

上面提到的这套 API 提供一种「人为操纵」浏览器历史记录的方法。

我们可以将浏览器历史记录可以看作一个「栈」。栈是一种后进先出的结构,可以把它想象成一摞盘子,用户每点开一个新网页,都会在上面加一个新盘子,叫「入栈」。用户每次点击「后退」按钮都会取走最上面的那个盘子,叫做「出栈」。而每次浏览器显示的自然是最顶端的盘子的内容。

语法:window.history.pushState(state, title, url);

执行pushState函数之后,会往浏览器的历史记录中创建一条新记录,同时改变地址栏的地址内容。它可以接收三个参数,按语法顺序分别为:

  • 一个state对象或者字符串,用于描述新记录的一些特性。这个参数会被一并添加到历史记录中,以供以后使用。这个参数是开发者根据自己的需要自由给出的。该值是后期可以通过history.state;获取当前页面的参数,

  • 一个字符串,代表新页面的标题。当前基本上所有浏览器都会忽略这个参数。

  • 一个字符串,代表新页面的相对地址。(必须与当前页面处在同一个域。)

简单例子:假设当前页面为renfei.org/,打开控制台执行下面的 javascript 语句:

window.history.pushState({id: 1,name: "profile1"}, "My Profile", "/profile/");  //第一二参数可忽略设置为null

之后,地址栏的地址就会变成renfei.org/profile/,但同时浏览器不会刷新页面,甚至不会检测目标页面是否存在。

replaceState方法

有时,你希望不添加一个新记录,而是替换当前的记录,俩者区别在于 replaceState() 是修改了当前的历史记录项而不是新建一个。

replaceState和pushState原理一样使用也一样,最常用的方法:

window.history.replaceState({id: 1,name: "profile"},'下载','download?id=1');

特点:replaceState不会加入到历史记录里面,用history.Go(-1)会跳过当前页面相当于是history.go(-2)。

popstate事件

当页面加载时,它可能会有一个非空的state对象。这可能发生在当页面设置一个state对象(使用pushState或者replaceState)之后用户重启了浏览器。当页面重新加载,页面将收到onload事件,但不会有popstate事件。然而,如果你读取history.state属性,将在popstate事件发生后得到这个state对象

var currentState = history.state; //得到当前页面设置的history.pushState的state对象参数值

调用 history.pushState() 或者 history.replaceState() 不会触发 popstate 事件。 popstate事件只会在浏览器某些行为下触发, 比如点击后退、前进按钮(或者在JavaScript中调用history.back()、history.forward()、history.go()方法)。

例子:假设当前页面地址是Http://example.com/index.html

window.onpopstate = function(event) {  alert("location: " + document.location.href + ", state: " + JSON.stringify(event.state));//拿到history.state对象值};//绑定事件处理函数. history.pushState({page: 1}, "title 1", "?page=100");    //添加并激活一个历史记录条目 http://example.com/index.html?page=100,条目索引为1    //history.state为{page: 1}history.pushState({page: 2}, "title 2", "?page=200");    //添加并激活一个历史记录条目 http://example.com/index.html?page=200,条目索引为2history.replaceState({page: 3}, "title 3", "?page=300"); //修改当前所在页面激活的历史记录条目 http://ex..?page=200 变为 http://ex..?page=300,条目索引为3history.back(); // 弹出 "location: http://example.com/index.html?page=100, state: {"page":1}"history.back(); // 弹出 "location: http://example.com/index.html, state: nullhistory.go(2);  // 弹出 "location: http://example.com/index.html?page=300, state: {"page":3}

pushState方法与设置hash值的区别

在某种意义上,调用 pushState() 与 设置 window.location = "#foo" 类似,二者都会在当前页面创建并激活新的历史记录。但 pushState() 具有如下几条优点:

新的 URL 可以是与当前URL同源的任意URL 。而设置 window.location 仅当你只修改了哈希值时才保持同一个文件。如果需要,可以不必改变URL就能创建一条历史记录。而设置 window.location.hash = "#foo";只有在当前哈希不是 #foo 的情况下, 才会创建一个新的历史记录项。我们可以为新的历史记录项关联任意数据。而基于哈希值的方式,则必须将所有相关数据编码到一个短字符串里。

需要注意的是通过history.pushState修改网页的URL地址,在配合相关代码显示隐藏相应界面便可以实现单页面多界面相互操作。该方法比直接访问URL地址速度快,执行效率高,UI体验好,但会增加页面的复杂性及耦合性,要视实际情况而定,一般都用在dialog弹出框上。

应用:全站 AJAX,并使浏览器能够抓取 AJAX 页面

这个可以干啥用?一个比较常用的场景就是,配合 AJAX。

假设一个页面左侧是若干导航链接,右侧是内容,同时导航时只有右侧的内容需要更新,那么刷新整个页面无疑是浪费的。这时我们可以使用 AJAX 来拉取右面的数据。但是如果仅仅这样,地址栏是不会改变的,用户无法前进、后退,也无法收藏当前页面或者把当前页面分享给他人;搜索引擎抓取也有困难。这时,就可以使用 HTML5 的 History API 来解决这个问题。

思路:首先绑定click事件。当用户点击一个链接时,通过preventDefault函数防止默认的行为(页面跳转),同时读取链接的地址(如果有 Jquery,可以写成$(this).attr('href')),把这个地址通过pushState塞入浏览器历史记录中,再利用 AJAX 技术拉取(如果有 jQuery,可以使用$.get方法)这个地址中真正的内容,同时替换当前网页的内容。

为了处理用户前进、后退,我们监听popstate事件。当用户点击前进或后退按钮时,浏览器地址自动被转换成相应的地址,同时popstate事件发生。在事件处理函数中,我们根据当前的地址抓取相应的内容,然后利用 AJAX 拉取这个地址的真正内容,呈现,即可。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: 怎么在HTML5中实现无刷新修改URL

本文链接: https://lsjlt.com/news/255922.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么在HTML5中实现无刷新修改URL
    怎么在HTML5中实现无刷新修改URL?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。window.location.href,拼接一个搜索的key值,点击搜索的...
    99+
    2023-06-09
  • Html5怎么实现无刷新修改browser Url
    本篇内容介绍了“Html5怎么实现无刷新修改browser Url”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2024-04-02
  • HTML5怎么无刷新改变当前url
    这篇文章将为大家详细讲解有关HTML5怎么无刷新改变当前url,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。window.history.back();//后退windo...
    99+
    2024-04-02
  • HTML5中History API如何实现无刷新跳转
    这篇文章将为大家详细讲解有关HTML5中History API如何实现无刷新跳转 ,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。有一次在上**网的时候,发现登陆、注册动画效果非常华丽,但让我感到震惊的是页...
    99+
    2023-06-09
  • ASP.NET中怎么实现无刷新分页
    本篇文章给大家分享的是有关ASP.NET中怎么实现无刷新分页,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。新建一个分页存储过程:CREATE procedure&nb...
    99+
    2023-06-17
  • 图片上传——html5+PHP实现无刷新上传
    本篇向大家介绍一种全新的上传图片的方式,利用html5的FileReader读取图片文件,然后将数据传输到服务器再使用PHP进行处理。实现过程如下(带图片预览功能) 前端html代码 upload,...
    99+
    2024-02-27
  • HTML5之pushstate、popstate操作history以及无刷新改变当前url的示例分析
    这篇文章主要为大家展示了“HTML5之pushstate、popstate操作history以及无刷新改变当前url的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究...
    99+
    2024-04-02
  • 如何使用ajax实现无刷新改变页面内容和地址栏URL
    本篇内容主要讲解“如何使用ajax实现无刷新改变页面内容和地址栏URL”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用ajax实现无刷新改变页面内容和地址...
    99+
    2024-04-02
  • ajax中怎么实现无刷新分页功能
    本篇文章给大家分享的是有关ajax中怎么实现无刷新分页功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。html页<html> &...
    99+
    2024-04-02
  • Ajax中怎么实现页面无刷新功能
    Ajax中怎么实现页面无刷新功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。ajax (ajax开发)AJAX即“Asynchronous ...
    99+
    2024-04-02
  • php中怎么利用ajax实现无刷新分页
    本篇文章为大家展示了php中怎么利用ajax实现无刷新分页,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。<php Header("Cont...
    99+
    2024-04-02
  • AJAX怎么实现无刷新登录功能
    这篇文章主要为大家展示了“AJAX怎么实现无刷新登录功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“AJAX怎么实现无刷新登录功能”这篇文章吧。最近学习了如何...
    99+
    2024-04-02
  • AJAX怎么实现无刷新搜索功能
    这篇文章主要介绍“AJAX怎么实现无刷新搜索功能”,在日常操作中,相信很多人在AJAX怎么实现无刷新搜索功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”AJAX怎么实现无刷...
    99+
    2024-04-02
  • 怎么利用HTML5实现不刷新文件上传
    本篇内容主要讲解“怎么利用HTML5实现不刷新文件上传”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么利用HTML5实现不刷新文件上传”吧!之前朋友说的不刷新...
    99+
    2024-04-02
  • AjaxPro中怎么实现无刷新数据检测功能
    本篇文章给大家分享的是有关AjaxPro中怎么实现无刷新数据检测功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用AjaxPro实现无刷新数据检测Ajax(Asynchro...
    99+
    2023-06-17
  • Ajax怎么实现WEB无刷新提交数据
    这篇文章主要介绍“Ajax怎么实现WEB无刷新提交数据”,在日常操作中,相信很多人在Ajax怎么实现WEB无刷新提交数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Ajax...
    99+
    2024-04-02
  • pushState怎么实现Ajax无刷新页面切换
    要实现Ajax无刷新页面切换,可以使用pushState方法来改变浏览器的URL,并通过Ajax加载新的内容。以下是一个简单的示例:...
    99+
    2023-08-15
    pushState Ajax
  • ajax如何实现改变状态和删除无刷新
    这篇文章给大家分享的是有关ajax如何实现改变状态和删除无刷新的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 01.php为主程序,调用smarty模板遍历输出:<php  incl...
    99+
    2023-06-08
  • pushState中怎么利用Ajax实现无刷新页面切换
    pushState中怎么利用Ajax实现无刷新页面切换,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、API1、pushSt...
    99+
    2024-04-02
  • Ajax中怎么利用smarty实现无刷新分页功能
    这篇文章将为大家详细讲解有关Ajax中怎么利用smarty实现无刷新分页功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。类:  (function(){ ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作