38

我有一个应该在新标签中打开的链接,但如果标签已经打开,只需切换到它。我尝试过使用 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>

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

编辑:我需要在新选项卡中打开链接,而不是独立窗口。

4

5 回答 5

42

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

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

小提琴测试:http: //jsfiddle.net/jaraics/pEG3j/

于 2012-07-05T12:27:36.687 回答
18

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

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

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

于 2012-06-11T17:39:06.670 回答
9

如果窗口已经打开并且您想专注于该窗口,您可以使用

window.open('', 'NameOfTheOpenedWindow').focus();
于 2015-06-10T14:11:16.617 回答
2

window.focus()受到广泛支持,并且对我来说似乎在 Internet Explorer 和 Firefox 中都可以正常工作,问题应该出在您的代码中。我创建了一个简单的jsFiddle供您测试。

于 2012-06-11T15:12:08.783 回答
2

如果您对保留先前打开的选项卡的状态不感兴趣,可以这样做:

var loadingTableWnd;
function openOrSwitchToWindow(url) {
    if (loadingTableWnd != undefined) {
        loadingTableWnd.close();
    }
    loadingTableWnd = window.open(url,'myFrame');
}
于 2018-09-06T07:44:50.173 回答