每次都设置弹出窗口的焦点

时间:2010-06-03 12:09:52

标签: javascript popup

我有两页one.html和two.html

我正在使用以下代码打开一个新窗口

//here popup is a global variable
popup=window.open('two.html','two');

第一次弹出窗口成功打开并获得焦点但是 如果我尝试再次打开它而不关闭已打开的弹出窗口,那么two.html第二次没有获得焦点。

注意:我已将弹出窗口的名称设置为“两个”

11 个答案:

答案 0 :(得分:12)

您可以使用下面使用的focus函数来实现

<script language="javascript" type="text/javascript">
<!--
function popitup(url) {
    newwindow=window.open(url,'name','height=200,width=150');
    if (window.focus) {newwindow.focus()}

      if (!newwindow.closed) {newwindow.focus()}
    return false;
}

// -->
</script>

答案 1 :(得分:8)

focusedWindow = window.open('two.html','two').focus();

直接将焦点()附加到window.open protoype

答案 2 :(得分:6)

我的经验解决方案始终有效:

setTimeout('detail.focus()', 1);

在打开后立即附加.focus()并不总是有效,也不会在没有setTimeout的情况下调用.focus()

我知道这很难看(想要在几年之后摆脱它,没有成功),我不知道原因和方法的确切原因,但它确实有效。

答案 3 :(得分:2)

var win = window.open('two.html','two');
win.document.getElementsByTagName("body")[0].focus(); //focus the body rather than the window.

答案 4 :(得分:1)

如果在调用函数时检查弹出窗口是否已打开,则可以在打开弹出窗口之前关闭弹出窗口。

var popup;
​function openPop() { 
    if ("close" in popup) popup.close();
    popup = window.open("http://stackoverflow.com", "test", "width=200, height=200");​​​​​​​​
}

这将确保弹出窗口始终显示在顶部。

答案 5 :(得分:1)

检查

上的Firefox 2设置
  1. 转到工具 - &gt;选项 - &gt;内容
  2. 确保已启用“启用JavaScript”。
  3. 点击“启用JavaScript”旁边的“高级”按钮。
  4. 确保框中有复选标记    [x]升高或降低窗口
  5. 如果关闭“升高或降低窗口”设置,则 这会禁用window.focus()方法。

答案 6 :(得分:1)

不幸的是,一些现代浏览器仍然不支持对焦标签,例如,请参阅this Firefox bug entry

但是,以下代码对我来说效果很好。作为一种解决方法,如果它无法聚焦,它会重新打开一个窗口/选项卡:

  var win = window.open("two.html", "two")
  win.focus();
  setTimeout(function() {
    if(document.hasFocus()) {
      win.close();
      window.open("two.html", "two")
    }
  }, 1);

在第一行中,它打开窗口并尝试使用第二行对焦。如果已存在名为two的窗口,则不会打开新的窗口/选项卡,但会重复使用。

现在的诀窍是,我们使用document.hasFocus()检查当前窗口是否仍然具有焦点。如果是这样,我们关闭窗口并重新打开它。这仅适用于不支持聚焦直接重复使用的选项卡的浏览器。目前,这是FF和IE / MS Edge的情况。 Chrome效果很好。

但是,在使用window.open后,document.hasFocus()会一直返回true(所以也称为Chrome)。解决方法是在一个ms之后使用setTimeout

答案 7 :(得分:1)

只需将.focus()添加到window.open行 window.open('two.html','two').focus()

我确实遇到了同样的问题,并且这似乎在Firefox和Chromium Web浏览器中均有效。 在我的网络thaiiceland.com中,我注意到,如果打开了弹出窗口,则焦点不会停留在弹出窗口上,并且当您单击该链接时,您不会感到任何反应。因此,我进行搜索,然后尝试在window.open行的末尾添加.focus()。

<a href="currency.html" onclick="javascript:void window.open('currency.html','thaiice02','width=900,height=560,scrollbars=1,resizable=1,top=80,left=150').focus();return false;">Curency converter - แปลงสกุลเงิน</a>

答案 8 :(得分:0)

setTimeout(function () { 
  window.open('PageName', '', 'height=560,width=1120,resizable=no,left=100,top=50,screenX=100,screenY=50'); 
}, 100);

- &GT;此代码用于关注新打开的窗口。 - &GT;把它放在javascript中。('setTimeout是javascript的内置函数') - &GT;许多时候都会发生这样的情况:当打开弹出窗口时,它会落在旧窗口的后面,所以上面对于关注新窗口非常有用。

答案 9 :(得分:0)

这是一个单线解决方案,重点关注你的弹出窗口:

popup=window.open('two.html','two');
popup.focus();

即使未关闭,也会一直打开弹出窗口。

答案 10 :(得分:0)

我找到了适合自己的答案。在弹出框体的html中,添加到body标签onload =&#34; this.window.focus()&#34;。即使您最小化窗口,它也会向前和向中弹出。请务必在执行脚本window.open(&#39; url&#39;,&#39;某些名称&#39;,&#39; vars&#39;)中为该窗口命名;希望这能帮到你!