如何使用jQuery获取目标URL?

时间:2010-05-05 21:26:55

标签: jquery reload

我的网页上有一个倒计时代码段,可以从隐藏字段中读取剩余时间。它以1秒的步长从300倒数到0,并因此更新隐藏的字段。当我重新加载页面时,浏览器提供隐藏字段的旧值,而不是从服务器获取它。

该片段是:

  

< span id =“counter”> < /跨度>   < input type =“hidden”id =“remaining”   value =“300”/>

我需要在事件监听器块中获取页面的目标URL,例如:

  

$(window).unload(function(){
  警报(window.location.destination);   });

当然,我编造了“目的地”部分。我真正需要的是检测重新加载,并将一个哈希参数附加到URL以防止缓存。

1 个答案:

答案 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,甚至是不执行任何操作的函数。