在很长(几分钟)的间隔后,可以优雅地重定向用户

时间:2011-05-20 14:14:35

标签: html redirect

所以,这是一个非常简单的问题,但我对其他人对于处理这个问题的“最佳”实践的看法很感兴趣。该网站是建筑能源信息的表示交付;它主要是HTML5 / CSS3和带有一些重型图形的jQuery。它确实使用PHP通过API来利用建筑信息,但它不会驱动网站的任何其他属性。

所以,这个网站需要做最后一件事,在设定的间隔(通常是几分钟长)后,页面需要将用户重定向到流程中的下一页。浏览器也要定期刷新(重新启动循环动画)非常重要。

我当然认为非常简单:

<html>
<head>
<script type="text/javascript">
<!--
function delayer(){
    window.location = "../javascriptredirect.php"
}
//-->
</script>
</head>
<body onLoad="setTimeout('delayer()', 300000)">
</body>
</html>

这样可行,但它并不“感觉”是最好的选择。提前感谢能够提出想法的任何人。

2 个答案:

答案 0 :(得分:2)

您还可以使用不依赖JavaScript的元刷新标记。

<meta http-equiv="refresh" content="300000;url=http:/yourdomain.com/javascriptredirect.php" />

这样做的缺点是,如果您需要与此重定向进行交互或取消它,因为它不受JavaScript限制,您无法对其进行任何操作。

关于页面的其他部分还需要偶尔刷新以重新启动动画,我建议使用JavaScript在给定的时间后执行此操作而不是刷新页面。原因是如果刷新页面,重定向“计时器”会重新启动,这意味着如果刷新比重定向更快,则永远不会重定向。

答案 1 :(得分:1)

我认为你的方法效果最好。当您使用代码刷新页面时,您可以在网址和页面加载中添加查询字符串参数,如果您在那里检测到该参数,那么您知道它已经刷新了,然后您可以决定在几次页面刷新后重定向。

function delayer(){
    var refresh_value = getQuerystring('r')
    if(refresh_value == '')
        window.location = "../samepage.php?r=1"
    if(refresh_value == '1')
        window.location = "../samepage.php?r=2"
    if(refresh_value == '2')
        window.location = "../javascriptredirect.php"
}

功能来自:http://www.bloggingdeveloper.com/post/JavaScript-QueryString-ParseGet-QueryString-with-Client-Side-JavaScript.aspx

function getQuerystring(key, default_)
{
  if (default_==null) default_=""; 
  key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
  var qs = regex.exec(window.location.href);
  if(qs == null)
    return default_;
  else
    return qs[1];
}

如果这是早期的开发,我建议加载其他页面的内容,滑出当前内容,然后在新内容中滑动。这样就可以打开大门轻松触发页面刷新的大门。当我将网站视为幻灯片时,我会想到jquery mobile。当您单击jqmobile中的链接时,它会将下一页的内容加载到当前DOM中,然后它会滑出旧内容并在新内容中滑动。加载新内容后,会在网址上附加一个哈希标记,因此,它有助于确定在同一页面上引用另一个内容块的方式(如使用<a href="#paragrapn2">Go to Paragraph 2</a>时)。