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";
【讨论】:
Jacob 提供了比 Or W. Frédéric Hamidi 更好的解释,也添加了答案,我想将答案授予你们两个,但看来我必须选择一个。既然雅各布首先回答,那么答案就交给你了。 值得注意的是,在使用这种方法时,使用../../folder/page.aspx?Source=abcd
之类的链接是行不通的。我需要使用其他方法来使我的链接工作,即使那样也不能使用“_self”。
函数调用的开销?函数调用肯定是有代价的,但我不确定这是否有任何相关性,我曾经期望现在的函数调用与所有实际目的的属性访问一样有效。在 JVM 上是这样,随着 V8 的性能飞跃,我在这里期望相同。我这里的分析有问题吗?
如果浏览器通过设置它而采取动作,显然这不是一个简单的属性。此外,与浏览器实际加载页面所做的任何事情相比,调用函数的开销是九牛一毛。所以我不买这个论点。【参考方案2】:
希望通过阅读本文可以拯救其他人。
我们在使用基于 webkit 的浏览器时遇到了问题:
window.open("webpage.htm", "_self");
如果我们有太多的 DOM 节点,浏览器就会死机。当我们将代码切换为遵循以下公认答案时:
location.href = "webpage.html";
一切都很好。我们花了一段时间才弄清楚导致问题的原因,因为不清楚是什么导致我们的页面周期性地无法加载。
【讨论】:
我自己也遇到过这个。非常惊讶,一开始无法弄清楚问题所在。 airbnb linter 不喜欢 location.herf。必须在开头提及窗口。【参考方案3】:正如其他人所说,通常首选第二种方法。
然而,两个代码 sn-ps 并不完全相同:第一个实际上将window.opener
设置为窗口对象本身,而第二个将保持原样,至少在 Firefox 下是这样。
【讨论】:
【参考方案4】:您可以省略window
,而只使用location.href
。例如:
location.href = 'http://google.im/';
【讨论】:
【参考方案5】:window.location.href = "webpage.htm";
【讨论】:
【参考方案6】:请使用这个
window.open("url","_self");
第一个参数“url”是你要打开哪个页面的完整路径。 第二个参数“_self”,用于在同一个标签页中打开页面。您想在另一个标签页中打开页面,请使用“_blank”。
【讨论】:
这个答案与建议的答案直接相反,可能导致浏览器崩溃。请参阅我在此线程中的回复。此外,这并没有说明为什么要选择使用这种方法,它只是说要使用它。以上是关于window.open 目标_self v window.location.href?的主要内容,如果未能解决你的问题,请参考以下文章
Cordova window.open _self 不工作但 _blank 工作