我们最常见的跳转方式是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. MyBatis&Spring Framrwork

    1. MyBatis 1.1 概述 MyBatis是一款优秀的持久层框架,用于简化JDBC开发 MyBatis本是Apache的一个开源项目iBatis,2010年这个项目迁移到了google cod ...

  2. LoadRunner11脚本关联+运行负载+分析结果

    一.脚本创建关联和插入检查点 脚本录制完成后,首先需运行脚本回放,验证是否可回放成功,然后找出各事务请求中的关联点! 如本例子中,录制的场景为:打开综合窗口收件-->查询事项-->窗口登记 ...

  3. hyperworks2021位安装教程

    hyperworks2021位安装教程:1.先使用"百度网盘客户端"下载hw21_EN_x64软件安装包到电脑磁盘英文路径文件夹下,并鼠标右击进行解压缩,然后在文件夹内找到hwDe ...

  4. docker中php xdebug调试开发

    docker-compose环境来自:https://github.com/zhaojunlik...原文:http://blog.oeynet.com/post/9... 说明 在开发中,断点调试是 ...

  5. 读Bilgin Ibryam 新作 《Dapr 是一种10倍数 平台》

    Bilgin Ibryam 最近加入了开发者软件初创公司Diagrid Inc,他是Apache Software Foundation 的 committer 和成员.他也是一个开源的布道师,并且是 ...

  6. C温故补缺(四):GDB

    gdb gdb是由GNU软件社区提供的C Debug工具 Pre 在调试前,需要先编译.c程序,且要加上-g使输出文件变得可调式 gcc test.c -g -o test 用gdb test来调试程 ...

  7. Java网络编程:Socket 通信 2

    client----发送数据(输出流)------------(输入)-[管道流处理数据]-(输出)------接收数据(输入流)------server 文件传输: 客户端: 创建Socket连接对 ...

  8. PHP8.1.10手动安装教程及报错解决梳理

    安装教程参考一:https://www.cnblogs.com/haw2106/p/9839655.html 安装教程参考二:https://www.cnblogs.com/jiangfeilong/ ...

  9. JavaScript入门⑨-异步编程●异世界之旅

    JavaScript入门系列目录 JavaScript入门①-基础知识筑基 JavaScript入门②-函数(1)基础{浅出} JavaScript入门③-函数(2)原理{深入}执行上下文 JavaS ...

  10. Django三大主流Web框架(django版本安装-项目创建-应用创建-django三板斧)

    目录 一:python三大主流web框架 1.python三大主流Web框架 2:三大主流web框架特点 二:正常运行Django项目所需要知道的注意事项 1.计算机的名称不能有中文,不然bug在哪你 ...