开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情
问题
项目中A页面用iframe嵌套了B页面,当token失效时B页面用 window.location.href = "url" 跳转到C页面
结果出现了这种情况,C页面直接嵌套在A页面当中了,而我希望的是完全跳转到C页面,不发生嵌套
解决方案
解决这个问题,需要了解下面这些跳转方法的定义
window.location.href
、location.href
===> 本页面跳转
parent.location.href
===> 上一层页面跳转
top.location.href
===> 最外层的页面跳转
至此,问题便可以迎刃而解了,由于A页面嵌套了B页面,而我在B页面中使用了window.location.href = "C页面" ,自然 B页面跳转到C页面还是被A页面所嵌套,这里我们使用parent.location.href或top 跳转都可以,如果涉及到三层及更多层嵌套我们可以使用top.location.href进行跳转。
扩展
用到window.location.href,总免不了提及window.open,二者有什么区别呢?
-
区别一
window.location
是window
对象的属性
window.open
是window
对象的方法根据使用方法可以发现其区别
window.location.href = ''
window.open()
-
区别二
window.location.href
是用新的地址替换当前页, 也就是重新定位当前页
window.open
是打开一个新窗口 注意window.open中除了第一个参数为地址url外,第二个参数有以下值- _blank - URL加载到一个新的窗口。这是默认
- _parent - URL加载到父框架
- _self - URL替换当前页面
- _top - URL替换任何可加载的框架集
- name - 窗口名称
-
区别三
window.open
可能会被浏览器拦截
window.location.href
不会被窗口拦截出现这个符号时便是新打开的窗口被拦截