【问题标题】:set the focus of a popup window every time每次设置弹出窗口的焦点
【发布时间】:2010-06-03 12:09:51
【问题描述】:

我有两个页面 one.html 和 two.html

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

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

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

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

【问题讨论】:

  • 不确定是否可以这样做。打开一个新窗口怎么样?
  • 我只想打开一个新窗口一次,而不是每次
  • 如果它适合你,请接受它

标签: javascript popup


【解决方案1】:

您可以使用下面使用的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>

【讨论】:

  • @hunt:也不是谷歌浏览器。以这种方式聚焦窗口不兼容跨浏览器。
  • 嗯,它是“兼容的”,因为它不会伤害任何尝试,但 Firefox、Chrome 和 Safari 不会服从该请求。 Firefox 可以由其用户配置以允许 focus() 这样的请求工作,但我认为 Chrome 和 Safari 总是忽略它。没有办法强迫那些浏览器注意。 (事实上​​ Safari 是真的认真对待它:whatsthepointy.blogspot.com
  • 在 chrome 中使用 window.open('two.html','two') 有或无焦点都不会产生影响,因为它是在 net TAB 中打开的,而不是在窗口中打开。
【解决方案2】:
focusedWindow = window.open('two.html','two').focus();

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

【讨论】:

  • 简单的解决方案...它的工作原理
  • 打开的窗口默认是焦点,焦点应该不是必需的。
【解决方案3】:

我的经验性解决方案总是有效的:

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

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

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

【讨论】:

  • 我通过 setTimeout(function(){window.open(...)},1) 解决了我的 firefox 问题
  • 据我了解,setTimeout 会在当前脚本的最后一行执行完毕后触发它的脚本,但在多线程脚本中不起作用,因为定时脚本会按时运行...跨度>
【解决方案4】:

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

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

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

【讨论】:

  • 好吧,这段代码将关闭我之前打开的窗口,然后再打开它。我不想关闭上一个窗口
  • @hunt:就像我在pranay_stacker's answer 的评论中所说的那样,对于弹出窗口,焦点方法将无法跨浏览器工作。我很确定没有其他方法可以重新调整窗口的焦点。
  • 您需要使用空对象初始化弹出变量,此解决方案才能正常工作
【解决方案5】:
var win = window.open('two.html','two');
win.document.getElementsByTagName("body")[0].focus(); //focus the body rather than the window.

【讨论】:

  • 这种方法对我有用,在 Chrome48、FF42 和 IE11 中进行了测试。
  • 对我不起作用。它在我调用此代码的第一个选项卡中打开“two.html”。是的,我更改了window 的变量名称。我可以稍后通过 setTimeout 调用第二行来解决此问题,但随后它也没有将主体集中在 Edge 中。
【解决方案6】:

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

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

【讨论】:

    【解决方案7】:

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

    【讨论】:

      【解决方案8】:

      很遗憾,一些现代浏览器仍然不支持焦点标签,例如,请参阅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 中也是如此)。解决方法是在一毫秒后使用setTimeout

      【讨论】:

        【解决方案9】:

        只需将 .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>
        

        【讨论】:

          【解决方案10】:
          setTimeout(function () { 
            window.open('PageName', '', 'height=560,width=1120,resizable=no,left=100,top=50,screenX=100,screenY=50'); 
          }, 100);
          

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

          【讨论】:

          • 欢迎来到 Stack Overflow!而不是只发布一段代码,请解释为什么这段代码解决了所提出的问题。没有解释,这不是答案。
          【解决方案11】:

          这是一个单一的解决方案,将焦点放在您的弹出变量上:

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

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

          【讨论】:

            猜你喜欢
            • 2012-07-08
            • 1970-01-01
            • 1970-01-01
            • 2011-09-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多