jquery - 如何使用 jQuery 获取目标 URL?

标签 jquery reload

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

代码片段是:

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

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

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

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

最佳答案

您无法在 unload 函数中获取用户将要访问的页面的 URL,或者根本无法获取(在某些情况下,这会带来隐私风险)。 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。

关于jquery - 如何使用 jQuery 获取目标 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2776914/

相关文章:

javascript - 按下浏览器重新加载按钮时防止变量丢失

javascript - 浏览器选项卡操作

javascript - 我的 Greasemonkey 脚本如何自动重新加载页面并自动单击按钮?

javascript - 可调整大小的容器对我不起作用

javascript - 如何过滤掉发布的隐藏表单输入类型?

jQuery AJAX 分页如何防止指数循环?

ruby-on-rails - Rails redirect_to - 我也想重新加载页面

javascript将文本从文本框复制到div

javascript - 使用 .search() 或正则表达式查找 ID 中包含 X 的元素

jQuery Mobile – 具有相对高度的内容网格