如何利用pushState开发无刷页面切换

实现目标

页面的跳转(前进后退,点击等)不重新请求页面

页面URL与页面展现内容一致(符合人们对传统网页的认识)

在不支持的浏览器下降级成传统网页的方式

使用到的API

history.state

当前URL下对应的状态信息。如果当前URL不是通过pushState或者replaceState产生的,那么history.state是null。

history.pushState(state, title, url)

将当前URL和history.state加入到history中,并用新的state和URL替换当前。不会造成页面刷新。

state:与要跳转到的URL对应的状态信息。

title:不知道干啥用,传空字符串就行了。

url:要跳转到的URL地址,不能跨域。

history.replaceState

用新的state和URL替换当前。不会造成页面刷新。

state:与要跳转到的URL对应的状态信息。

title:不知道干啥用,传空字符串就行了。

url:要跳转到的URL地址,不能跨域。

window.onpopstate

本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/tools/

history.go和history.back(包括用户按浏览器历史前进后退按钮)触发,并且页面无刷的时候(由于使用pushState修改了history)会触发popstate事件,事件发生时浏览器会从history中取出URL和对应的state对象替换当前的URL和history.state。通过event.state也可以获取history.state。

支持性判断

if ('pushState' in history) {...}

实现思路

用户通过“点击触发”,“操作历史”,“直接访问URL”的方式修改当前URL。这三种触发方式会使浏览器做出不同的行为。如果页面做无刷跳转,那么页面具体显示什么内容需要js来控制,js则需要根据一些信息来知道当前应该显示什么内容,这个信息就是history.state。这样我们只要保持URL和history.state一一对应,就能保证URL和内容一一对应。大部分情况下URL和history.state都是一一对应的,但通过直接URL访问页面的方式进入页面,history.state是null,所以我们需要把URL转换成对应的history.state写入。我们不能直接写入history.state,需要通过replaceState的方式写入。对于不支持pushstate的浏览器,一律修改href跳转页面,等同于直接访问URL。示意图如下。

开发无刷页面切换-pushstate">

作者:cnblogs Clifford

时间: 2024-08-29 11:32:35

如何利用pushState开发无刷页面切换的相关文章

Android 实现无网络页面切换的示例代码

本文介绍了Android 实现无网络页面切换的示例代码,分享给大家,具体如下: 实现思路 需求是在无网络的时候显示特定的页面,想到要替换页面的地方,大多都是recyclerview或者第三方recyclerview这种需要显示数据的地方,因此决定替换掉页面中所有的recyclerview为无网络页面 实现过程 1 在BaseActivity中,当加载布局成功以后,通过id找到要替换的view,通过indexOfChild()方法,找到要替换的view的位置,再通过remove和add view来

pushState实现Ajax无刷新页面切换_AJAX相关

前言 这样的需求很常见:点击页码局部更新页面(非整体刷新),并且产生历史管理.局部刷新很容易实现,ajax可以满足我们的需要,但是这并不会产生历史管理,好在html5给我们提供了几个好用的api方便解决这个问题,见下文. 正文 一.API 1.pushState pushState()有三个参数:一个状态对象.一个标题(现在会被忽略),一个可选的URL地址. state:与要跳转到的URL对应的状态信息. title:空字符串(以后可能有用). url:要跳转到的URL地址,不能跨域. 作用:将

pushState实现Ajax无刷新页面切换

前言 这样的需求很常见:点击页码局部更新页面(非整体刷新),并且产生历史管理.局部刷新很容易实现,ajax可以满足我们的需要,但是这并不会产生历史管理,好在html5给我们提供了几个好用的api方便解决这个问题,见下文. 正文 一.API 1.pushState pushState()有三个参数:一个状态对象.一个标题(现在会被忽略),一个可选的URL地址. state:与要跳转到的URL对应的状态信息. title:空字符串(以后可能有用). url:要跳转到的URL地址,不能跨域. 作用:将

静态页中利用AJAX.NET实现无刷新页面

ajax|静态|刷新|无刷新|页面 一. 导言 我们知道,ASP.net应用程序事实是在服务器上运行的,用户的请求要不断地送往远程的服务器,服务器执行完本地的程序后把重新装载页面再发送客户端.所以就出现了不断刷新的问题,页面不断闪烁.用户不厌其烦,运行效率也大大4降低,服务器的负荷加重.事实,客户端的请求在某一时刻只是通过向 Web 服务器提交新的请求来检索对用户输入所做的响应.这种情况下,开发人员可以使用 JavaScript 在客户端上加载所有响应,从而提供更好的用户体验.遗憾的是,在很多情

.NET 2.0正式版中无刷新页面的开发

刷新|无刷新|页面 在已经发布的 ASP.NET2.0 中,无刷新页面开发相关部分同 beta2 有不少改动.而且在越来越多的 Ajax 开发包被开发出来的情况下, ASP.NET2.0 自带的无刷新页面技术没有被很多人了解,甚至不少人认为该功能有些"鸡肋".但如果我们仅仅是在程序中加入很少部分的 Ajax 特性, Atlas . Ajax.Net 等就显得有些"杀鸡用牛刀"的感觉了.而且,我认为使用 ASP.NET2.0 提供的方法进行开发并不很复杂,相反,使用很

“ASP.NET 2.0 正式版中无刷新页面的开发”中示例代码与Firefox兼容的解决

asp.net|解决|示例|刷新|无刷新|页面 这几天正着手开始写毕业设计,因为发生了一些事情,所以一直拖到现在才开始.其实我准备做一个ASP.NET 2.0并且使用AJAX的Web项目,于是到博客园到处寻着AJAX的文章,恰好翻到了Leon.Zhou的ASP.NET 2.0 正式版中无刷新页面的开发按照代码示例和讲解做了一个页面,确实不错啊.因为俺平时几乎都用Firefox,所以就顺手测试了一下Firefox下的效果,结果发现点了Button之后没有反应--于是打开Javascript控制台,

Android开发中ViewPager实现多页面切换效果_Android

ViewPager用于实现多页面的切换效果,该类存在于Google的兼容包里面,所以在引用时记得在BuilldPath中加入"Android-support-v4.jar" 首先必须知道:要使用ViewPager,必须要使用PagerAdapter为其提供数据,也就必须实现下面四个方法: 1, getCount():ViewPager需要显示的页面个数 2,isViewFromObject(View view, Object object):view 是某个位置的页面,Object是

Android开发中ViewPager实现多页面切换效果

ViewPager用于实现多页面的切换效果,该类存在于Google的兼容包里面,所以在引用时记得在BuilldPath中加入"Android-support-v4.jar" 首先必须知道:要使用ViewPager,必须要使用PagerAdapter为其提供数据,也就必须实现下面四个方法: 1, getCount():ViewPager需要显示的页面个数 2,isViewFromObject(View view, Object object):view 是某个位置的页面,Object是

利用ICallbackEventHandle实现类似AJAX的无刷新页面

ajax|刷新|无刷新|页面 先看MSDN Library 2005上的这个例子!------ ClientCallback.aspx ------<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ClientCallback.aspx.cs" ­ Inherits="ClientCallback" %> <!DOCTYPE html PUBLIC