我的网页上有一个倒计时代码段,可以从隐藏字段中读取剩余时间。它以1秒的步长从300倒数到0,并因此更新隐藏的字段。当我重新加载页面时,浏览器提供隐藏字段的旧值,而不是从服务器获取它。
该片段是:
< span id =“counter”> < /跨度> < input type =“hidden”id =“remaining” value =“300”/>
我需要在事件监听器块中获取页面的目标URL,例如:
$(window).unload(function(){
警报(window.location.destination); });
当然,我编造了“目的地”部分。我真正需要的是检测重新加载,并将一个哈希参数附加到URL以防止缓存。
答案 0 :(得分:2)
您无法在unload
函数中获取用户要访问的网页的网址,或者根本不会(在某些情况下存在隐私风险)。并且URL上的片段标识符(哈希)不会阻止缓存;更改它甚至不会重新加载页面。对于缓存生成器,您必须写入URL的?query
部分,您可以通过例如。 location.search= '?'+Math.random();
。
但这些都不是一个好主意。浏览器在重新加载或返回/转发到页面时“记住”表单的上一个值的行为是不需要的,因此最好的办法就是根本不使用表单字段。让脚本在DOM的另一部分写出数据:
<span id="counter" class="remaining-300"></span>
并从脚本中的span元素.className
读取,或者直接将变量写入JS:
<span id="counter"></span>
<script type="text/javascript">
var remaining= 300;
</script>
每次加载页面时,这会将倒计时重置为300秒。
您可能还需要考虑'bfcache',它在许多现代浏览器上保留您的原始页面 - 包括其中的所有内容和脚本状态 - 当用户导航时,然后在您按下时将其重新加载'返回'。
目前,这将继续滴答倒计时,但在页面被隐藏时不会勾选,所以你剩下的时间就像你离开时一样多。如果这不是您想要的,您可以尝试设置与截止时间间隔无关的截止时间超时,以始终在预期的重新加载时间点火。或者,作为最后的手段并且通常要避免,您可以通过将onunload
设置为任何内容来故意破坏bfcache,甚至是不执行任何操作的函数。