window.open目标_self v window.location.href?


71

我需要使用JavaScript重定向用户。首选方法是?

window.open("webpage.htm", "_self");

要么

window.location.href = "webpage.htm";

第一个没有打开新窗口吗?我不确定。
Shamim Hafiz

@ Gunner,Nope,它将在同一窗口中打开它,因此在"_self"那里...
Jacob Relkin 2011年

如果将_self替换为_blank,它将在新窗口中打开
DOK 2013年

Answers:


83

绝对首选第二种方法,因为您没有其他函数调用的开销:

window.location.href = "webpage.htm";

1
雅各比Or W.FrédéricHamidi也提供了更好的解释,我想将答案授予你们俩,但看来我必须选择一个。自从雅各布首先回答以来,答案就交给了你。
丽贝卡

值得注意的是,当使用此方法时,使用like之类的链接../../folder/page.aspx?Source=abcd不起作用。我需要使用其他方法来使我的链接正常工作,即使那样也不能使用“ _self”。
Christine268

4
函数调用的开销?函数调用肯定要付出代价,但是我不确定这是否有任何意义,我曾经一次期望当今的函数调用在所有实际用途上都与属性访问一样有效。在JVM上,随着V8的性能飞跃,我期望在这里也是如此。我的分析这里有问题吗?
faizan

1
显然,如果浏览器通过设置动作来执行操作,这并不是一个简单的属性。此外,与浏览器实际加载页面的操作相比,调用函数的开销实在是杯水车薪。所以我不赞成这种说法。
nafg

31

希望其他人可以通过阅读本文得到保存。

我们在使用基于Webkit的浏览器时遇到了一个问题:

window.open("webpage.htm", "_self");

如果我们有太多的DOM节点,浏览器将锁定并死亡。当我们将代码切换为遵循以下可接受的答案时:

location.href = "webpage.html";

一切都很好。我们花了一段时间才找出造成问题的原因,因为尚不清楚是什么原因使我们的页面无法定期加载。


我自己才遇到这个问题。感到非常惊讶,一开始无法解决问题。
安东尼

airbnb的linter不喜欢location.herf。首先必须提到窗口。
Kick Buttowski

21

正如其他人所说,第二种方法通常是首选。

但是,这两个代码段并不完全相同:第一个实际上设置window.opener为window对象本身,而第二个则至少在Firefox下将其保持不变。


6

您可以省略window并仅使用location.href。例如:

location.href = 'http://google.im/';


-2

请用这个

window.open("url","_self"); 
  • 第一个参数“ url”是您要打开哪个页面的完整路径。
  • 第二个参数“ _self”,用于同一选项卡中的打开页面。您要在另一个标签中打开页面,请使用“ _blank”。

3
此答案与建议的答案直接相反,并且可能导致浏览器崩溃。在此线程中查看我的回复。而且,这并不能说明为什么选择使用此方法,而只是说要使用它。
Garry Polley
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.