我们最常见的跳转方式是location.href = "http://www.baidu.com", 这种是最常见的,但是常常使用location.replace,location.assign,,window.open,history.replaceState,location.reload等,这些跳转或者说与跳转相关的代码有什么作用?用在什么场合,会有那些坑吗?本文就围着跳转相关的JavaScript api和html技术来了解一下浏览器跳转。

1.location.href

最常见的一种跳转,location.href是一个可读写的属性,直接给它赋值就可以实现跳转。此外window.location.href和document.location.href都可以对当前窗口进行重定向。

location提供当前窗口文档相关信息,还提供导航功能,一般情况下location对象是window对象的属性也是document对象的属性,当服务器未发生重定向时,window.location和document.location等效,但是当服务器发生了重定向,就不一样了,如下:

  • document.location包含的是已经装载的URL
  • window.location.href包含的则是原始请求的文档的URL

2.window.top,window.parent,window.self

当页面有frameset或者iframe页面,并且有嵌套的情况,parent是父窗口,top是最顶层父窗口,self是当前窗口。

window.self是当前窗口自身的引用,它和window对象是等价的。window,self,window.self属性是等价的。

window.top返回顶层窗口,即浏览器窗口,如果窗口本身就是浏览器窗口,top属性返回的是对自身的引用。

window.parent返回父窗口,如果窗口本身是顶层窗口,parent属性返回对自身的引用。

他们都有location属性,并且可以跳转。

3.window.location.href

最常见的一种跳转方式

3.location.replace

location.replace(url)方法用给定的url参数替换当前的页面资源,调用后当前页面不会保存到会话历史中,例如history,session,调用location.replace之后用户点击回退按钮时将不会再跳转到当前页面。

4.location.assign

location.assign会添加记录到浏览历史,点击后退可以返回之前页面。触发窗口加载并显示指定的url内容,和location.href不同的是如果location.assign(url)的参数和页面当前url属于不同的域的时候,会抛出一个安全错误AECURITY_ERROR。

4.history

从浏览器打开一个页面开始,history对象保存用户的上网记录。由于安全原因,浏览器不会暴露用户浏览过的url地址,但是借助history,可以在不知道实际url的情况下实现页面前进和后退。

history.go

使用history.go方法可以在用户的历史记录中任意跳转。方法接收一个整数值参数,标识向前或向后跳转的页面的个数。负数标识向后跳转,类似后退按钮,正数表示向前跳转,类似前进按钮,0或者不传参数可以刷新当前页面。

history.back

back方法用于模拟浏览器后退按钮,相当于history.go(-1)

history.forward

forward方法用于模拟浏览器的前进按钮,相当于history.go(1)

注意:使用以上三个方法时如果移动的位置超出history边界,并不报错,而是静默失败。使用历史记录时,页面从浏览器缓存中加载,不是要求服务器重重新发送新的网页。

history.pushState

HTML5为history对象添加了两个新的方法,history.pushState,history.replaceState,用来在浏览器中添加和修改history记录,而window.onpopstate用来监听history对象的变化。

pushState方法用来向浏览器历史中添加一个记录,它有三个参数:一个对象,一个标题,一个可选的URL地址:

history.pushState(state, title, url)
  • state:状态对象是一个由pushState方法创建的,与历史记录相关的JavaScript对象。当用户导航到新状态时,会触发popstate事件,并且该事件的状态属性包含历史记录条目的对象的副本。状态对象可以是任何可以序列化的对象。

    firefox会把状态对象保存到用户的磁盘上,这样用户重启浏览器之后可以将其还原,所以这个对象的序列化结果又2MB的大小限制。

  • title:大多数的浏览器都忽略这个参数,传递空字符串可以防止将来对方法的更改。

  • url:新的URL。注意在调用pushState之后浏览器不会尝试加载此URL,但是可能会在用户重启浏览器后重新加载这个URL。新的URL不必是绝对地址,如果是相对的,则相对于当前的URL进行解析。新的URL需要和当前的URL的origin相同,否则会抛出异常。如果未指定此参数,则将其设置为当前的URL。

pushState有一个很常见的用法是在后台管理项目中,如果经常会有tab页展示的情况,例如:每次点击左侧的菜单栏新增一个tag,同时使用pushState添加一条状态,这样点击浏览器后退的时候就会从当前tab页回退到上一个tab页。

history.replaceState

把当前页面的历史记录替换掉,它最大的特点是添加或者替换历史记录之后,浏览器会变成你指定的地址,而页面并不会重新载入或跳转。

例如,假设当前页面地址是foo.com/1.html, 且history中只有一条当前页面的记录。当执行history.pushState(null, null, '2.html')后,浏览器的地址将会变成foo.com/2.html, 但是并不会跳转2.html,甚至不会去检查2.html是否存在,只是加入一个最新的历史记录。此时history中会有2条记录。假如点击页面上的一个超链接跳转到另外一个页面后,点击后退按钮,url会变成foo.com/2.html, 如果此前在浏览器缓存中有1.html的话,会显示1.html的内容,否则会向服务器发起foo.com/2.html 的请求。如果再次点后退,url会变成foo.com/1.html

而如果执行history.replaceState('foo.com/2.html')的话,浏览器地址也会显示foo.com/2.html, 区别是history中只有当前2.html的记录,而1.html的记录已经被替换掉。

6.window.navigate

window.navigate("http://www.baidu.com/") 这个方法是只针对IE的,不适用于火狐等其他浏览器,在HTML DOM Window Object中,根本没有列出window.navigate这个方法,所以这个方法尽量少用。

9.html超链接

这也是一种很常见的跳转方式,用法如下:

简单的链接:

<a href="http://www.baidu.com" title="百度">百度</a>

外部链接,点击时,会新开一个tab页

<a href="http://www.baidu.com" title="百度" target="_blank">百度</a>

除此之外,还可以使用超链接实现其他的功能,例如下载,打开电话拨号,打开email等。

下载图片:

<a href="https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png" download>下载</a>

打开电话

<a href="tel:+86177******">打电话给张三</a>

发送email

<a href="mailto:zhangsan@qq.com" cc="李四@gmail.com">发邮件给张三并抄送给李四</a>

10.meta标签

html文档的头部meta标签中有个属性http-equiv="Refresh",有两种用途:一是网页定时刷新,而是自动跳转到指定页面,不需要调用js,也不需要点击超链接。

自动刷新实用性不强,一般会使用setInterval或者websocket技术实现。

自动跳转在一些网站中很常见,例如进入网站先显示一个欢迎页面,3秒后跳转到另外一个页面,如下代码:

<meta http-equiv="refresh" content="3;url=http://www.baidu.com">

使用meta标签3秒后跳转到百度。

JavaScript五花八门的跳转方式的更多相关文章

  1. Javascript实现页面跳转的几种方式

    概述 相信很多Web开发者都知道,在开发Web程序的时候,对于页面之间的跳转,有很多种,但是有效的跳转则事半功倍,下面就是我在平时的开发过程中所用到的一些JavaScript跳转方式,拿出和大家共享一 ...

  2. JSP页面跳转方式

    JSP页面跳转方式 1.利用按钮+javascript进行跳转 <input type="button" name="button2" value=&qu ...

  3. JSP常用跳转方式

      常用的跳转方式有以下几种: (1)href超链接标记,属于客户端跳转 (2)使用JavaScript完成,属于客户端跳转 (3)提交表单完成跳转,属于客户端跳转 (4)使用response对象,属 ...

  4. vue的跳转方式(打开新页面)

    vue的跳转方式(打开新页面) 2018年11月22日 10:43:21 浊清... 阅读数 2043   版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和 ...

  5. ios中的界面跳转方式

    ios中,两种界面跳转方式 1.NavgationController本身可以作为普通ViewController的容器,它有装Controller的栈,所以可以push和pop它们,实现你所说的跳转 ...

  6. JS页面打开方式丶对话框及页面跳转方式

    一.js页面的三种打开方式 1. window.open 2. window.navigate("url") 跳转到目标页面 3. window.location.href=&qu ...

  7. JAVAEE学习——struts2_02:结果跳转方式、访问servletAPI方式、获得参数以及封装和练习:添加客户

    一.结果跳转方式 <action name="Demo1Action" class="cn.itheima.a_result.Demo1Action" m ...

  8. JSP的几种跳转方式的异同

    1 <jsp:foward page="url" /> 服务端跳转,立即跳转,后续语句不会执行: 2 <% response.sendRedirect(" ...

  9. js---BOW---页面打开方式,跳转方式 2017-03-24

    BOM  ( browse object model) 一.js页面的三种打开方式 1. window.open 格式: window.open("第一部分", "第二部 ...

  10. 微信小程序 页面跳转方式

    // 保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面. // 注意:调用 navigateTo 跳转时,调用该方法的页面会被加入堆栈,但是 redirectT ...

随机推荐

  1. 【第5篇】AI语音简介

    1.3  AI语音简介 AI语音既人工智能语音技术,以语音识别技术为开端,实现人机语言的通信,包括语音识别技术(ASR).自然语言处理技术(NLP)和语音合成技术(TTS).通俗点说就是通过语音这个媒 ...

  2. 优化if、elif过多

    优化if ,elif过多的场景 字典的成员运算,是判断字典的key 思路:把函数的内存地址存到字典当中 def login():    pass def scan(): pass def transf ...

  3. Codeforces Round #809 (Div. 2)C.Qpwoeirut And The City

    题目大意: 当一栋楼比旁边两栋楼都高的时候,这栋楼为cool,对除了1和n以外的所有楼可以增加任意层,问在满足使最多的楼cool的前提下的花费最小. 当n为奇数的情况下: cool的楼实际上是固定的, ...

  4. 【深入浅出 Yarn 架构与实现】2-2 Yarn 基础库 - 底层通信库 RPC

    RPC(Remote Procedure Call) 是 Hadoop 服务通信的关键库,支撑上层分布式环境下复杂的进程间(Inter-Process Communication, IPC)通信逻辑, ...

  5. XTDrone和PX4学习期间问题记录(一)

    XTDrone和PX4学习期间问题记录(一) Written By PiscesAlpaca 前言: 出现问题可以去官方网站http://ceres-solver.org/index.html查看文档 ...

  6. Sqoop的介绍和安装

    sqoop下载地址:https://share.weiyun.com/woVbfnfS 或者 https://archive.apache.org/dist/sqoop/1.99.7/ Sqoop简介 ...

  7. 《MySQL必知必会》知识汇总一

    一.使用MYSQL 展示所有数据库 show databases; 选择数据库 use crashcourse; 展示该数据库中所有的表 show tables; 还可以展示表列的shema约束 sh ...

  8. 3A锂电池充电管理芯片PW4035

    PW4052 是一颗适用于单节锂电池的.具有恒压/恒流充电模式的充电管理 IC.该芯片采用开关型的工作模式, 能够为单节锂电池提供快速. 高效且简单的充电管理解决方案. PW4052 采用三段式充电管 ...

  9. 有状态软件如何在 k8s 上快速扩容甚至自动扩容

    概述 在传统的虚机/物理机环境里, 如果我们想要对一个有状态应用扩容, 我们需要做哪些步骤? 申请虚机/物理机 安装依赖 下载安装包 按规范配置主机名, hosts 配置网络: 包括域名, DNS, ...

  10. SQL注入漏洞原理与利用

    SQL注入漏洞原理与利用 SQL注入漏洞流程 判断注入类型 判断字段个数 查询回显位 查询数据库名 查询表.字段名 查询内容 判断注入类型 1.数字型注入点判断 当要输入的参数x为数字型时,后端脚本中 ...