JavaScript 在后台打开窗口,而不是在 Chrome 和 Safari 中打开前台

JavaScript opens the window in the background instead of foreground in Chrome and Safari

本文关键字:Safari Chrome 前台 开窗口 后台 JavaScript      更新时间:2023-09-26

我正在使用下面的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没有此问题):

  1. 将事件参数传递到您的点击处理程序中:

    <button onclick="popWinSimple(event, 'url', 'features')">Popup window</button>
    
  2. 调用 prevent默认事件:

    function popWinSimple(event, url, features) {
      event.preventDefault();
      win = window.open(url, '', features);
      win.focus();
    }
    

注意:我认为您不需要调用win.focus(),因为默认情况下,新的弹出窗口将占据焦点。此外,出于安全原因,在Chrome中win.focus()被禁用。