繁体   English   中英

每次设置弹出窗口的焦点

[英]set the focus of a popup window every time

我有两页 one.html 和 two.html

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

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

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

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

您可以使用下面使用的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>
focusedWindow = window.open('two.html','two').focus();

直接将 focus() 附加到 window.open 原型

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

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

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

我知道它很丑(我想现在摆脱它,几年后,没有成功),我不知道为什么和如何的确切原因,但它有效。

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

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

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

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

检查您的 Firefox 2 设置

  1. 转到工具 -> 选项 -> 内容
  2. 确保“启用 JavaScript”已打开。
  3. 在“启用 JavaScript”旁边,单击“高级”按钮。
  4. 确保复选框 [x] 升高或降低窗户中有复选标记

如果关闭“升高或降低窗口”设置,则会禁用 window.focus() 方法。

我为自己找到了一个有效的答案。 在弹窗正文的 html 中,添加到正文标记 onload="this.window.focus()"。 即使您最小化窗口,它也会从前面和中间弹出。 确保并在执行脚本中命名窗口 window.open('url','some name','vars'); 希望这对你有帮助!

不幸的是,一些现代浏览器仍然不支持聚焦选项卡,例如,请参阅此 Firefox 错误条目

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

  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 就是这种情况。 铬效果很好。

然而,直接在使用window.opendocument.hasFocus()总是返回 true (如此说,也在 Chrome 中)。 解决方法是在一毫秒后使用setTimeout

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

我确实遇到了同样的问题,这似乎在 Firefox 和 Chromium 网络浏览器中都有效。 在我的网站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>
setTimeout(function () { 
  window.open('PageName', '', 'height=560,width=1120,resizable=no,left=100,top=50,screenX=100,screenY=50'); 
}, 100);

-> 此代码用于将焦点放在新打开的窗口上。 -> 把它放在javascript.('setTimeout 是javascript 的内置函数') -> 很多时候,当弹出窗口打开时,它会跑到旧窗口的后面,所以上面对新窗口的焦点非常有用。

这是一个单行解决方案,使用焦点在你的弹出变量上:

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

即使它没有关闭,这也将始终打开您的弹出窗口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM