window.location.href和top.location.href的区别

104

有人能告诉我window.location.hreftop.location.href之间的区别吗?

还有,在什么情况下使用哪一个。

在MVC中进行AJAX调用后重定向时,哪一个更好?


我忘了提到我在 .net MVC 中需要重定向到一个新的 URL.. 当我使用 top.location.href 时它起作用,而 window.location 则不行.. 你能告诉我原因吗? - Egalitarian
4个回答

138

window.location.href返回当前页面的位置。

top.location.href(它是window.top.location.href的别名)返回窗口层次结构中最上层窗口的位置。如果一个窗口没有父级,top是对自身的引用(换句话说,window === window.top)。

top在处理框架和打开其他页面的窗口时非常有用。例如,如果你有一个名为test.html的页面,并具有以下脚本:

var newWin=window.open('about:blank','test','width=100,height=100');
newWin.document.write('<script>alert(top.location.href);</script>');

弹出的提示会包含test.html的完整路径,而不是about:blank,使用window.location.href将返回about:blank。

至于重定向问题,可以使用window.location.assign(url);


3
top.location.href 称为 window.top.location.href别名 是否准确?我认为所谓的“全局”变量实际上是 window 对象的一种缩写,而 别名 意味着它是一个指向相同位置的独立变量。 - just.another.programmer

29

top 对象在框架内更容易理解。 在框架内,window 指的是当前框架的窗口,而 top 指的是包含框架的最外层窗口。 因此:

window.location.href = 'somepage.html'; 表示在框架内加载 somepage.html

top.location.href = 'somepage.html'; 表示在主浏览器窗口中加载 somepage.html

另外两个有趣的对象是selfparent


11

第一个方法会向您的浏览器历史记录中添加一个条目,您可以(或应该能够)单击“后退”按钮并返回到当前页面。

第二个方法会替换当前的历史记录项,因此您无法返回到它。

请参见window.location

  • assign(url):加载提供的URL处的文档。

  • replace(url):用提供的URL处的文档替换当前文档。与assign()方法的不同之处在于,使用replace()后,当前页面将不会保存在会话历史记录中,这意味着用户将无法使用“后退”按钮导航到该页面。

window.location.href = url;

被青睐于:

window.location = url;

对于CORS问题,它无法正常工作...如何解决? - PAA

9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接