HTML JavaScript打开新窗口并关闭当前窗口

9
我有一个弹出窗口,在该页面的正文中有以下代码:

<a href="http://www.example.com" target="_blank" onClick="javascript:window.close()"><img src="...something"/></a>

目的是当用户点击图片链接时关闭此弹出窗口,并打开一个新页面并跳转到http://www.example.com

它在IE和Chrome中有效,但在Firefox中无效。弹出窗口关闭了,但没有打开新窗口。

有什么想法吗?


1
这个问题之前已经被问过了:https://dev59.com/ZHRA5IYBdhLWcg3w_C8w - user123444555621
1
@Pumbaa80 - 这不是 OP 所问的。那个问题是关于为什么窗口无法关闭。OP 的窗口会关闭,但不会打开一个新的窗口。 - Ender
好的。抱歉,我没有仔细阅读。 - user123444555621
3个回答

14

好的,我可以复现这个问题 - 很有趣。 setTimeout 可以解决它:

onClick="javascript: setTimeout(window.close, 10);"

我只能猜测一旦窗口关闭(发生在超链接被点击前),Firefox 就停止处理该页面。

编辑:最好将延迟时间设置为10毫秒 - 如果是1毫秒,Chrome 不会关闭窗口。


它可以工作,谢谢。我猜你是对的,一旦它关闭,它可能只停止执行其他操作。有道理~ - Eatdoku
它对我没有起作用,我尝试了“<a href="http://www.google.com" target='_blank' onClick="javascript: setTimeout(window.close, 10);" >直接点击</a>”,我该怎么办?如果打开新窗口,窗口将被关闭吗? - Karthic G
2
在控制台中显示:脚本不能关闭未由脚本打开的窗口。 - J4GD33P 51NGH

3

这个问题实际上解决了打开者的问题,但是没有帮助到我(不希望:在Firefox下新窗口保持与当前弹出窗口相同的大小)。

因此,我找到了以下解决方案:

function whenClicked() 
{
    window.close();
    opener.location.href = "http://www.example.com";

}

如果该页面应在新标签页中打开,则使用以下代码:

function whenClicked() 
{
    window.close();
    opener.open(http://www.example.com, '_blank');
}

简单而优雅的修复方法,不会影响超时时间。时间延迟持续时间很难猜测以适应所有环境。 - AbelSurace

2
当您通过JavaScript向元素的点击事件添加一些功能时,该功能会在默认的点击事件之前执行(在此情况下,打开一个新页面),以便拦截和覆盖默认事件。仅当事件返回true布尔值时,才会执行默认行为。
在这种情况下,附加功能将关闭窗口,我猜Firefox选择将其解释为“我们已完成所有操作”,因此点击事件从未返回true,因此新页面永远不会打开。
Evgeny建议使用短暂的超时,以允许点击事件在关闭窗口之前返回true,从而允许新窗口打开。

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