在新窗口中打开链接,或者聚焦到它(如果已经打开)

Open link in new window or focus to it if already open

本文关键字:如果 链接 或者 聚焦 在新窗口中打开      更新时间:2023-09-26

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

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

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

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

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

摆弄测试:http://jsfiddle.net/jaraics/pEG3j/

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

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

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

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

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

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

如果您对保留以前打开的选项卡的状态不感兴趣,可以执行以下操作:

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

它将始终重定向到具有焦点的新选项卡:

const redirectBlank = function(url) {
  return window.open(url, Date.now()).focus();
};