如果您打开一个窗口,例如:
window.open ("url","winName","location=0,width=300,height=214");
如果winName
已经打开它只是更改窗口中的 URL。这没问题,但如果该窗口在当前窗口后面,大多数用户不会意识到这一点,并认为它只是没有打开。
有没有办法,如果窗户已经打开,它会把它带到前面?
如果您打开一个窗口,例如:
window.open ("url","winName","location=0,width=300,height=214");
如果winName
已经打开它只是更改窗口中的 URL。这没问题,但如果该窗口在当前窗口后面,大多数用户不会意识到这一点,并认为它只是没有打开。
有没有办法,如果窗户已经打开,它会把它带到前面?
更新:自 Chrome(21 岁以上)起此方法无效。解决方法是关闭/重新打开。
的window.open()方法返回表示新窗口中的对象。你只需要window.focus()它:
var w = window.open ("url","winName","location=0,width=300,height=214");
w.focus();
或者干脆:
window.open("url","winName","location=0,width=300,height=214").focus();
建议使用任何形式的各种答案.focus()
可能不适用于所有浏览器。
这曾经在当天有效,但不再有效,主要是由于浏览器努力积极阻止可疑广告网络将其弹出式广告推送到前台。
特别是在 Mozilla Firefox 中(取决于您的版本),默认情况下会启用一个配置设置,以阻止其他窗口(例如弹出窗口)聚焦自身。
您可以在about:config
页面中找到此设置(请仔细阅读!)
dom.disable_window_flip: true
如果我没记错的话,这个设置曾经被称为 ~"allow_raise_or_lower_windows*
其他浏览器可能会实现类似的东西,但很简单,如果主要浏览器之一.focus()
默认阻止使用,那么尝试调用它就没有多大用处。
因此,我见过的唯一可行的解决方案是查看窗口是否存在,并且尚未关闭……如果关闭,则加载所需的窗口。
function closePopupIfOpen(popupName){
if(typeof(window[popupName]) != 'undefined' && !window[popupName].closed){
window[popupName].close();
}
}
打开弹出窗口时,如果它有可能已经打开(并隐藏在其他窗口后面),那么您可以在尝试打开弹出窗口之前调用此函数。
closePopupIfOpen('fooWin');
var fooWin = window.open('someURL', 'foo', '...features...');
当然,缺点是如果该窗口中有任何“重要”的东西(例如部分填写的表格),它就会丢失。
更新:自 Chrome(21 岁以上)起此方法无效。解决方法是关闭/重新打开。
要小心,因为当你打开一个新窗口时,opener 窗口可能还有一些代码要执行,也许这些代码中的一些给了它焦点。你会看到你的新窗口是如何在前面打开然后突然转到后面的,因此,在这些情况下,设置一个超时以便稍后将焦点放在新窗口上是一个好主意,当所有开启器窗口中的javascript被执行,你可以这样做:
setTimeout(function(){window.focus();},1000);
等待的毫秒数为 1000,而 window 是打开的窗口的名称。例如,您还可以在主体 onload 的打开窗口中使用此代码。
我通过添加解决了这个问题
onclick="myWin = window.open('','winName','location=0,width=300,height=214'); myWin.focus()"
到 html 元素(按钮),然后通过 JS 更改 URL。
window.focus()
应用于有问题的窗口应该可以解决问题。