当用户单击链接时,我正在使用以下 JavaScript 函数打开一个新窗口。
function popWinSimple(url,features) {
win = window.open(url,'',features);
win.focus();
}
此功能在 Firefox 上打开前台窗口,但在 Safari 和 Chrome 上不这样做。
造成这种行为差异的原因可能是什么?
当用户单击链接时,我正在使用以下 JavaScript 函数打开一个新窗口。
function popWinSimple(url,features) {
win = window.open(url,'',features);
win.focus();
}
此功能在 Firefox 上打开前台窗口,但在 Safari 和 Chrome 上不这样做。
造成这种行为差异的原因可能是什么?
据我所知,您无法更改此行为,因为这是由每个浏览器中的用户设置处理的。
在 OSX Lion 上的几乎库存配置中使用 Safari 和 Chrome,我正在加载以下页面。我观察到的行为是选项卡在案例 1 和 2 的前面加载,案例 3 闪烁到前面,然后焦点返回到调用选项卡。对于这种情况,我认为没有比 javascript 的 focus() 和 blur() 调用更强大或更可靠的方法。
<html>
<body>
<a href="." onclick="javascript:var w = window.open('foo.html'); return false;">click normal</a>
<br />
<a href="." onclick="javascript:var w = window.open('foo.html'); w.focus(); return false;">click and focus</a>
<br />
<a href="." onclick="javascript:var w = window.open('foo.html'); w.blur(); window.focus(); return false;">click and unfocus</a>
</body>
</html>
每当从 iframe 中进行 window.open 调用时,我也会遇到这个特定于 Chrome 的问题。我找到了一种解决方法,即使在 Chrome 中也会使弹出窗口在前台打开(Firefox 和 Safari 没有这个问题):
将事件参数传递给您的 onclick 处理程序:
<button onclick="popWinSimple(event, 'url', 'features')">Popup window</button>
在事件上调用 preventDefault:
function popWinSimple(event, url, features) {
event.preventDefault();
win = window.open(url, '', features);
win.focus();
}
注意:我认为您不需要调用 win.focus() 因为默认情况下新的弹出窗口将成为焦点。此外,出于安全原因,在 Chrome 中 win.focus() 被禁用。