记录一个iframe嵌套页面的跳转问题

629 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

问题

项目中A页面用iframe嵌套了B页面,当token失效时B页面用 window.location.href = "url" 跳转到C页面 0dd624ea7ccc0c32d3e20a2a6718af0.png

结果出现了这种情况,C页面直接嵌套在A页面当中了,而我希望的是完全跳转到C页面,不发生嵌套 c744c47ece8fb8ed7180a5bc9b949c3.png

解决方案

解决这个问题,需要了解下面这些跳转方法的定义

window.location.hreflocation.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.locationwindow对象的属性
    window.openwindow对象的方法

    根据使用方法可以发现其区别 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不会被窗口拦截

    出现这个符号时便是新打开的窗口被拦截

image.png