在新窗口中打开链接,如果已经打开则关注它

时间:2012-06-11 14:56:49

标签: javascript html

我有一个链接应该在新选项卡中打开,但如果选项卡已经打开,只需切换到它。 我尝试过使用javascript,wnd = window.open()和wnd.focus(),它在Chrome 19中有效,但在FF 13或IE 9中无效。 这是我写的代码:

<script type="text/javascript">
var loadingTableWnd;
function openOrSwitchToWindow(url){
if(loadingTableWnd == undefined)
loadingTableWnd = window.open(url,'myFrame');
else
loadingTableWnd.focus();
}
</script> 
<a href='javascript:openOrSwitchToWindow("/");' >Loading Table</a>

我知道如何从每个浏览器打开或切换到它?

编辑:我需要在新标签页中打开链接,而不是一个独立的窗口。

6 个答案:

答案 0 :(得分:33)

不同的浏览器对window.open()和focus()的行为有所不同。 对于此代码window.open('www.sample.com','mywindow').focus()

  • Chrome 20 会打开一个新标签,并关注后续的open()调用,无论是否调用focus()。
  • Firefox 13 打开一个新标签,重点放在第一个open(),不关注后续的open()调用/忽略焦点()。
  • IE 8 打开一个新窗口,尊重焦点()。
  • Safari 5 会打开一个新窗口,并关注后续的open()调用,无论是否调用focus()。

使用:http://jsfiddle.net/jaraics/pEG3j/

进行测试

答案 1 :(得分:9)

你不需要任何逻辑来做这样的事情。默认情况下,为window.open()指定第二个参数会为窗口提供“名称”,浏览器会记住该名称。如果您尝试使用相同的名称(在已经打开之后)调用window.open(),则它不会打开新窗口...但您可能仍需要在其上调用.focus()。试试这个:

var a = window.open(url, "name");
a.focus();

这些应该是您函数中唯一的代码行,并且您不需要loadingTableWnd变量......

答案 2 :(得分:4)

如果窗口已经打开,如果您想要关注该窗口,可以使用

window.open('', 'NameOfTheOpenedWindow').focus();

答案 3 :(得分:1)

window.focus()受到广泛支持 - http://www.w3schools.com/jsref/met_win_focus.asp似乎在我的Internet Explorer和Firefox中运行良好,问题应该在您的代码中。我为你创建了一个简单的jsFiddle测试 - http://jsfiddle.net/Pharaon/uJy5t/

答案 4 :(得分:1)

如果您不希望保留先前打开的选项卡的状态,则可以执行以下操作:

var loadingTableWnd;
function openOrSwitchToWindow(url) {
    if (loadingTableWnd != undefined) {
        loadingTableWnd.close();
    }
    loadingTableWnd = window.open(url,'myFrame');
}

答案 5 :(得分:0)

在Firefox 66和Chrome 74中,这对我有效:

 wnd = window.wnd && window.wnd.close() || window.open(url, "wnd");

未经其他浏览器测试。感谢roberto(在MarkZ答案的评论中)为我指出了这一解决方案。 (对不起,我无法在该答案中添加评论,对不起)。

window.focus()解决方案不符合我的需求。