2010-09-09 193 views
9

我有一个弹出窗口,并在该页面中我有以下代码在正文中。html javascript打开新窗口,并关闭当前窗口

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

的目的是当用户点击了图片的链接有这个弹出窗口关闭,并打开一个新的页面,被定向到http://www.somesite.com

它适用于IE和Chrome,但不适用于Firefox。弹出窗口关闭,但没有打开新窗口。

任何想法?

+1

这已经被问过:http://stackoverflow.com/questions/760422/ – user123444555621 2010-09-09 23:13:48

+1

@ Pumbaa80 - 这不是OP要求的。这个问题是关于为什么一个窗口不会关闭。 OP的窗口将关闭,但不会打开一个新窗口。 – Ender 2010-09-09 23:25:57

+0

对。对不起,我没有仔细阅读。 – user123444555621 2010-09-10 06:55:48

回答

12

是的,我可以重复这个 - 有趣。 setTimeout作品围绕它:

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

我只能猜测,一旦窗口关闭(超链接之前,这恰好是遵循)的Firefox将停止处理该页面。

编辑:最好使它延迟10ms - 1ms Chrome不关闭窗口。

+0

它的工作原理,谢谢,我想你是对的,它可能只是停止执行其他操作,一旦它关闭。有意义〜 – Eatdoku 2010-09-09 23:23:30

2

当您通过javascript向某个元素的click事件添加某些功能时,该功能会在默认的单击事件(在本例中,打开一个新页面)之前执行,以允许拦截并覆盖默认事件。只有当事件返回布尔值true时,才会执行默认行为。

在这种情况下,附加功能是关闭窗口,我的猜测是Firefox选择将此解释为“我们都在这里完成”,所以click事件从不返回true,因此新页面永远不会被打开。

Evgeny建议使用短暂超时将允许click事件在窗口关闭前返回true,从而允许打开新窗口。

2

这个问题实际上是解决了开瓶器,但它没有帮助我的问题(不希望:在Firefox下的新窗口保持与当前弹出相同的大小)。 所以我觉得以下解决方案:

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

} 

或本如果PPAGE应在新标签中打开:

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

简单而优雅的解决方案,不会影响暂停。延迟时间很难猜测以适应所有环境。 – AbelSurace 2017-09-05 16:49:13