如何使用jQuery获取目标URL?

3
我的网页有一个倒计时片段,从隐藏字段中读取剩余时间。它以1秒的步长从300倒数到0,并相应地更新隐藏字段。当我重新加载页面时,浏览器提供的是隐藏字段的旧值,而不是从服务器获取最新值。
该片段为:

<span id="counter"> </span> <input type="hidden" id="remaining" value="300" />

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

$(window).unload(function() {
alert(window.location.href); });

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

只是为了澄清,您想捕获用户在访问“此”页面后要访问的“下一个” URL,对吗?如果是这样,我可以问一下原因吗?我担心您可能有点偏离主题。请勿误解我的意思。 - gurun8
1个回答

2
unload函数中,或者其他情况下,您无法获取用户即将访问的页面的URL(在某些情况下这可能会带来隐私风险)。URL上的片段标识符(哈希)也不能防止缓存;更改它甚至不会重新加载页面。要进行缓存破坏,您必须编写到URL的?query部分中,可以通过例如location.search='?'+Math.random();实现。
但是,所有这些都不是一个好主意。当浏览器重新加载或返回/前进到页面时,“记住”表单的先前值的行为是不需要的,因此您最好根本不使用表单字段。让脚本在DOM的另一个部分写出数据。
<span id="counter" class="remaining-300"></span>

可以在脚本中从 .className 属性读取该类名称,或者直接将变量写入 JS:

<span id="counter"></span>
<script type="text/javascript">
    var remaining= 300;
</script>

这将在每次页面加载时将倒计时重置为300秒。
您可能还需要考虑“bfcache”,许多现代浏览器在用户导航离开后保留原始页面,包括其中的所有内容和脚本状态,并在按“返回”时重新加载而不重新加载页面。
目前,这将继续滴答倒计时,但在页面被隐藏时不会滴答,因此您剩下的时间与离开时一样多。如果这不是您想要的,可以尝试独立设置截止时间超时,以始终在预期的重新加载时间触发。或者,作为最后的手段并通常应避免,您可以通过将onunload设置为任何内容(甚至是一个什么都不做的函数)来故意中断bfcache。

onunload被调用时,你不能动态地向window.location.href的末尾添加一个随机数,例如?rand=123吗? - Mottie
不,你不能在 onunload 中进行导航。 - bobince
读取目标地址可能会引入安全漏洞。如果用户在同一域内导航,则与离开页面共享地址将毫无意义。然而,对于浏览器来说,这是一个常见的设计规范,因此不需要争论。Bobince的答案似乎是最好的解决方法。但是,由于我还有其他要求,所以我选择通过ajax获取计数器。谢谢大家。 - Lashae

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接