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

Posted

技术标签:

【中文标题】window.open 目标_self v window.location.href?【英文标题】:window.open target _self v window.location.href? 【发布时间】:2011-06-16 09:06:31 【问题描述】:

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

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

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

【问题讨论】:

第一个不是打开一个新窗口吗?实际上我不确定。 @Gunner,不,它会在同一个窗口中打开它,因此"_self" 那里... 如果将_self替换为_blank,则会在新窗口中打开 【参考方案1】:
window.location.href = "webpage.htm";

【讨论】:

【参考方案2】:

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

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

【讨论】:

Jacob 提供了比 Or W. Frédéric Hamidi 更好的解释,也添加了答案,我想将答案授予你们两个,但看来我必须选择一个。既然雅各布首先回答,那么答案就交给你了。 值得注意的是,在使用这种方法时,使用../../folder/page.aspx?Source=abcd之类的链接是行不通的。我需要使用其他方法来使我的链接工作,即使那样也不能使用“_self”。 函数调用的开销?函数调用肯定是有代价的,但我不确定这是否有任何相关性,我曾经期望现在的函数调用与所有实际目的的属性访问一样有效。在 JVM 上是这样,随着 V8 的性能飞跃,我在这里期望相同。我这里的分析有问题吗? 如果浏览器通过设置它而采取动作,显然这不是一个简单的属性。此外,与浏览器实际加载页面所做的任何事情相比,调用函数的开销是九牛一毛。所以我不买这个论点。【参考方案3】:

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

然而,两个代码 sn-ps 并不完全等价:第一个实际上将window.opener 设置为窗口对象本身,而第二个将保持原样,至少在 Firefox 下是这样。

【讨论】:

【参考方案4】:

您可以省略window,而只使用location.href。例如:

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

【讨论】:

【参考方案5】:

希望通过阅读本文可以拯救其他人。

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

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

如果我们有太多的 DOM 节点,浏览器就会死机。当我们将代码切换为遵循以下公认答案时:

location.href = "webpage.html";

一切都很好。我们花了一段时间才弄清楚导致问题的原因,因为不清楚是什么导致我们的页面定期无法加载。

【讨论】:

我自己也遇到过这个。非常惊讶,一开始无法弄清楚问题所在。 airbnb linter 不喜欢 location.herf。必须在开头提及窗口。【参考方案6】:

请使用这个

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

【讨论】:

这个答案与建议的答案直接相反,可能导致浏览器崩溃。请参阅我在此线程中的回复。此外,这并没有说明为什么人们会选择使用这种方法,它只是说要使用它。

以上是关于window.open 目标_self v window.location.href?的主要内容,如果未能解决你的问题,请参考以下文章

window.open怎么打开多个窗口

window.open使用方法总结

打开新窗口(window.open) 用法

Cordova window.open _self 不工作但 _blank 工作

在 Chrome 中使用目标“_blank”打开 window.open

window.opener = null 的问题...