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

时间:2012-08-14 16:11:24

标签: javascript jquery

当用户点击链接时,我正在使用以下JavaScript函数打开一个新窗口。

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

此功能在Firefox上打开前景窗口,但在Safari和Chrome上不会执行相同的操作。

造成这种行为差异的原因是什么?

3 个答案:

答案 0 :(得分:1)

据我所知,您无法更改此行为,因为这是由每个浏览器中的用户设置处理的。

答案 1 :(得分:1)

在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>

答案 2 :(得分:1)

每当在iframe中进行window.open调用时,我也会遇到此特定于Chrome的问题。我发现了一个问题的解决方法,即使在Chrome中,弹出窗口也会在前台打开(Firefox和Safari没有这个问题):

  1. 将event参数传递给onclick处理程序:

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

    function popWinSimple(event, url, features) {
      event.preventDefault();
      win = window.open(url, '', features);
      win.focus();
    }
    
  3. 注意:我认为你不需要调用win.focus(),因为默认情况下新的弹出窗口会成为焦点。此外,在Chrome中,出于安全原因,我们禁用了win.focus()。