避免重复的浏览器标签或窗口(window.open())

3

Javascript中,我们可以使用window.open()打开一个新的浏览器窗口或选项卡。但是如果选项卡已经打开,它应该只突出显示。它不应该打开重复的选项卡。如何实现?


可能是重复的问题:检查窗口是否已经打开window.open - Anderson Green
4个回答

5
< p > window.open(strUrl, strWindowName[, strWindowFeatures]);第二个参数是窗口名称。如果指定该参数为除 "_blank" 之外的任何其他内容,则它将引用已经打开的选项卡/窗口。

例如:

window.open('/about', 'newwindow');

window.open('/contact', 'newwindow');

会在已经打开的窗口/选项卡中打开页面。


嗯,我做到了...它可以运行...但是有没有办法如果该页面已经打开就不重新加载它呢?我只想将焦点放在那里... - Shashwat
你可以尝试使用 newwin = window.open(...')newwin.focus();。它适用于弹出窗口,但在 Firefox 中不适用于标签页。在 IE 中,我认为它默认打开新窗口,所以它可以工作。 - Candide
我已经做了那个。它正在聚焦,但仍然重新加载已经存在的窗口。有没有办法避免这种情况? - Shashwat
你可以这样做:if (newwin != null) { newwin = window.open('...'); } else { newwin.focus(); } - Candide

2
确保每次调用window.open()时提供相同的窗口名称!(第二个参数,不得为空)
您需要管理从window.open()返回的窗口对象,并检查它是否已关闭,请查看https://developer.mozilla.org/en/DOM/windowclosed属性。 您将需要一个窗口到URL列表,这将帮助您决定是使用window.open()打开新窗口(当前未打开的URL),还是使用openedWindow.focus()(openedWindow是上一次调用window.open()返回的对象)将窗口带到视图中。

嗯,我做到了...它起作用了... 但是如果页面已经打开,有没有办法不重新加载它?我只想专注于这个问题... - Shashwat

2

0

Candide的代码需要稍作修改。应该检查null条件而不是“!=”

popwin.html是您想在弹出窗口中打开的页面。我知道这已经得到了回答,只是为了以后参考而发布。

主窗口代码:

<script type='text/javascript'>
var newwin;
function popup(){

if (newwin == null) 
    { 
    window.open('popwin.html', 'newwin'); 
    } 
    else 
    { 
    newwin.focus(); 
    }
}

</script>

在同一页面的body区域中调用弹出窗口:

<a href="#" onClick="popup();">Open Window</a>

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