JavaScript五花八门的跳转方式
我们最常见的跳转方式是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五花八门的跳转方式的更多相关文章
- Javascript实现页面跳转的几种方式
概述 相信很多Web开发者都知道,在开发Web程序的时候,对于页面之间的跳转,有很多种,但是有效的跳转则事半功倍,下面就是我在平时的开发过程中所用到的一些JavaScript跳转方式,拿出和大家共享一 ...
- JSP页面跳转方式
JSP页面跳转方式 1.利用按钮+javascript进行跳转 <input type="button" name="button2" value=&qu ...
- JSP常用跳转方式
常用的跳转方式有以下几种: (1)href超链接标记,属于客户端跳转 (2)使用JavaScript完成,属于客户端跳转 (3)提交表单完成跳转,属于客户端跳转 (4)使用response对象,属 ...
- vue的跳转方式(打开新页面)
vue的跳转方式(打开新页面) 2018年11月22日 10:43:21 浊清... 阅读数 2043 版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和 ...
- ios中的界面跳转方式
ios中,两种界面跳转方式 1.NavgationController本身可以作为普通ViewController的容器,它有装Controller的栈,所以可以push和pop它们,实现你所说的跳转 ...
- JS页面打开方式丶对话框及页面跳转方式
一.js页面的三种打开方式 1. window.open 2. window.navigate("url") 跳转到目标页面 3. window.location.href=&qu ...
- JAVAEE学习——struts2_02:结果跳转方式、访问servletAPI方式、获得参数以及封装和练习:添加客户
一.结果跳转方式 <action name="Demo1Action" class="cn.itheima.a_result.Demo1Action" m ...
- JSP的几种跳转方式的异同
1 <jsp:foward page="url" /> 服务端跳转,立即跳转,后续语句不会执行: 2 <% response.sendRedirect(" ...
- js---BOW---页面打开方式,跳转方式 2017-03-24
BOM ( browse object model) 一.js页面的三种打开方式 1. window.open 格式: window.open("第一部分", "第二部 ...
- 微信小程序 页面跳转方式
// 保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面. // 注意:调用 navigateTo 跳转时,调用该方法的页面会被加入堆栈,但是 redirectT ...
随机推荐
- 机器学习中in-domine, out-domine的区别
in-domine 为域内数据,即为训练模型时使用的数据: out-domine 为域外数据,即为检验模型时使用的数据.
- 1.python基础使用
1.git简介 git是一个免费的开源的分布式版本控制系统,可以快速高效的处理从小型到大型项目的所有事务 在实际工作中可以保留项目的所有版本,可以快速的实现版本的回滚和修改 git整体可以分为4个区域 ...
- Vue3 企业级优雅实战 - 组件库框架 - 4 组件库的 CSS 架构
在前一篇文章中分享了搭建组件库的基本开发环境.创建了 foo 组件模块和组件库入口模块,本文分享组件库的样式架构设计. 1 常见的 CSS 架构模式 常见的 CSS 架构模式有很多:OOCSS.ACS ...
- Jenkins发版通知企业微信机器人
1)开始通知 在Jenkins发版过程的第一步添加下面内容,调用下面脚本实现机器人发版通知(注意脚本路径和传参) ${BUILD_USER}是Jenkins内置变量,执行发布的用户名,需要安装插件-B ...
- Kubeadm搭建kubernetes集群
Kubeadm搭建kubernetes集群 环境说明 | 角色 | ip | 操作系统 |组件 | | – | – | – | | master | 192.168.203.100 |centos8 ...
- MediatRPC - 基于MediatR和Quic通讯实现的RPC框架,比GRPC更简洁更低耦合,开源发布第一版
大家好,我是失业在家,正在找工作的博主Jerry.作为一个.Net架构师,就要研究编程艺术,例如SOLID原则和各种设计模式.根据这些原则和实践,实现了一个更简洁更低耦合的RPC(Remote Pro ...
- Atlas人工智能基础知识
目录 一. AI基本概念 1.人工智能是什么 2.人工智能.机器学习.深度学习的关系是什么 2.监督学习.无监督学习.半监督学习和强化学习是什么 3.什么是模型和网络 4.什么是训练和推理 5.什么 ...
- qtCreator警告解决
警告 qtCreator Warning: QT_DEVICE_PIXEL_RATIO is deprecated. Instead use: QT_AUTO_SCREEN_SCALE_FACTOR ...
- 【SQL进阶】【REPLACE/TIMESTAMPDIFF/TRUNCATE】Day01:增删改操作
一.插入记录 1.插入多条记录 自己的答案: INSERT INTO exam_record(uid, exam_id, start_time, submit_time, score) VALUES ...
- CountDownLatch闭锁源码解析(基于jdk11)
目录 CountDownLatch闭锁源码解析(基于jdk11) 1.1 CountDownLatch概述 1.2 CountDownLatch原理 1.2.1 基本结构(jdk11) 1.2.2 a ...