【问题标题】:Automatically close window after some time一段时间后自动关闭窗口
【发布时间】:2011-06-22 12:37:25
【问题描述】:

我想在 5 分钟后自动关闭一个窗口。我已经尝试过使用 PHP 和 Javascript。但问题是当弹出窗口重新加载时,计数器又从 0 开始。简而言之,我想在 5 分钟后关闭弹出窗口,仍然在重新加载时。

【问题讨论】:

  • 向我们展示一些代码:D - 最好是带有计时器的部分和关闭的部分
  • 如果页面被重新加载,你将不得不传递作为 GET 或 POST 参数传递的时间
  • 使用<iframe>,以便主页面与 JavaScript 保持一致,并且 iframe 可以安全地重新加载。
  • 或者存储一个cookie,其中包含页面首次加载时的毫秒数。
  • 或者在会话变量中设置时间

标签: php javascript


【解决方案1】:

在窗口加载时使用 javascript 调用以下函数:

setTimeout(function() { window.close(); }, 300000);

【讨论】:

  • 但这在刷新时不起作用,因为超时将被释放并再次设置。
  • 好吧,你说得对,那么最好的办法就是节省服务器端的剩余时间,不时通过Ajax查询。
  • 如何使用 extJS 4 做到这一点?
【解决方案2】:
var foo = window.open('/advertise.html', 'blah', 'width=400, height=300');

foo.addEventListener('DOMContentLoaded', function(e) {
    foo.opener.setTimeout(function() {
        foo.close();
    }, 5000);
}, false);

这应该确实有效。如果弹出窗口从不同的域 obv 加载页面,这将不起作用。

【讨论】:

  • 为什么要复制窗口对象?为什么是父母?
  • @mplungjan:我刚刚意识到,应该是opener。复制窗口对象只是为了方便。
  • @jAndy - 所以我们只需要关闭父窗口,超时就会消失。您还需要询问是否 (foo && !foo.closed())
  • @mplungjan:不知道你在说什么,如果我们关闭父窗口,弹出窗口也会关闭。
  • 我很确定打开器窗口在关闭时会关闭所有打开的“子”窗口。
【解决方案3】:

这不是一个“好方法”,但如果您的页面必须重新加载,您可以设置并存储关闭 cookie 内弹出窗口的时间。如果 cookie 已经设置,只需启动计时器(检查时间未通过的间隔?),如果尚未设置,则将其设置为 5 分钟内的时间,最后在关闭弹出窗口时将其删除。

【讨论】:

  • 教程使使用 cookie 变得非常简单。 (quirksmode.org/js/cookies.html)
  • 我更喜欢cookie而不是会话变量,这样做允许独立于服务器,允许在非php应用程序中重用脚本
【解决方案4】:

类似这样 - 请注意,您只能关闭使用脚本打开的窗口

<?PHP
 // set this on session start
 $sessionStartTimeString = date("F j, Y, g:i a");
?>
window.onload=function() {
  var serverTime = new Date('<?php echo $sessionStartTimeString ;?>');
  var nowTime = new Date('<?php echo date("F j, Y, g:i a");?>');
  var closeTime = serverTime.setMinutes(serverTime.getMinutes()+5);
  var diff = closeTime.getTime()-nowTime.getTime();
  if (diff > 0) setTimeout(function() { window.close(); }, diff);
  else window.close()
}

【讨论】:

    【解决方案5】:

    &lt;script type="text/javascript"&gt;setTimeout("window.close();", 3000);&lt;/script&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-16
      • 1970-01-01
      • 2021-07-28
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多