停止在 hashchange 上触发 popstate

2024-03-24

我正在使用 History API 并使用推送和弹出状态。我想阻止 popstate 事件在某些情况下触发,其中我只将哈希值附加到 URL。例如,在某些情况下,单击锚点会附加#到 URL 并立即触发 popstate)我想避免所有场景# or #somehasvalue附加到 URL 并阻止 popstate 触发。我正在使用查询参数维护 URL,并且没有任何需要使用 popstate 事件来触发的场景#在网址中。

这是我的代码。

if (supportsHistoryApi()) {

    window.onpopstate = function (event) {
    var d = event.state || {state_param1: param1, state_param2: param2};                       
    var pathName = window.location.pathname,
        params   = window.location.search;

    loadData(event, pathName + params, d.state_param1, d.state_param2);

}

不幸的是,据我发现你无法阻止 popstate 的触发。

您可以做的是检查event.state目的。哈希值更改时该值将为空。 所以我建议添加一个

if(event.state === null) {
   event.preventDefault();
   return false;
}

到一开始的 popstate 事件处理程序。 我认为这是防止哈希更改时触发您这边的 popstate 处理代码的最佳方法,但我有兴趣知道是否还有其他解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

停止在 hashchange 上触发 popstate 的相关文章

随机推荐

  • BroadcastReceiver 与 WakefulBroadcastReceiver

    有人可以解释一下两者之间的确切区别是什么BroadcastReceiver https developer android com reference android content BroadcastReceiver html and W
  • WPF - 如何在任一时间仅扩展一个扩展器

    我有一个带有一组扩展器的 StackPanel 如何设置它以便在任何时候都只扩展扩展器 Cheers AW 我真的不想这样做 因为它需要将代码 C 放在窗口文件后面的类中 我试图通过使用 ViewModels 等来完全避免这种情况 理想情况
  • 如何在 Bootstrap 4 中均匀分布导航栏元素

    为网站构建引导程序导航 我在弄清楚如何最好地间隔导航栏上的导航链接元素时遇到了一些麻烦 并继续在移动设备上看起来不错 我的导航栏代码是
  • Angular (v5) 服务正在 APP_INITIALIZER 承诺解析之前构建

    我期待 Angular 等到我的loadConfig 函数在构建其他服务之前解析 但事实并非如此 应用程序模块 ts export function initializeConfig config AppConfig return gt c
  • 如何在 Rails 中订购?

    我正在开发一个小型博客引擎 有以下表格 博客和消息 博客有一个外键 last message id 因此我通过调用 blog last message 来访问博客中的最 后一条消息 我有以下代码可以使其工作 class Blog lt Ac
  • 如何调用显式实现的接口方法的基类实现?

    我试图调用在基类上实现的显式实现的接口方法 但似乎无法让它工作 我同意这个想法很难看 但我已经尝试了我能想到的所有组合 但无济于事 在这种情况下 我可以更改基类 但我想我会问这个问题来满足我的一般好奇心 有任何想法吗 example int
  • pytz时区转换性能

    我有来自数据库的超过 100 万个日期时间对象 我想将它们中的每一个转换为时区感知的日期时间对象 这是我的辅助函数 conv tz dt is python datetime object src tz and dest tz and py
  • 两个相同查询(不同参数)的 MySQL InnoDB 死锁问题

    我有下表 CREATE TABLE IF NOT EXISTS task id int 10 unsigned NOT NULL AUTO INCREMENT job id int 10 unsigned NOT NULL COMMENT
  • JavaFX 2 ComboBox setValue() 不设置 CB 文本

    我的问题是 使用 setValue 选择后 所选的 ComboBox 项目文本在屏幕上不可见 以下是一些细节 将项目添加到我的 CB combo getItems add a combo getItems add b combo getIt
  • Android WebView 更新后卡在放大状态

    我们有一个使用 Android WebView 的应用程序 但更新到 v99 或 v100 后 它显示网页内容放大 更新后重新启动手机可以解决该问题 但只是暂时的 一段时间后 它将再次显示放大的网页 有没有人遇到过这个问题 是不是我们做错了
  • 关于查询而不是服务,最好、最全面的 SOAP 库是什么

    我的 google fu 并没有为 java 中的 SOAP 库提供非常有希望的结果 它们主要用于设置 SOAP 服务 因为我需要与这样的服务进行通信 我意识到 SOAP 只是构建和解析 XML 的问题 但理想情况下我希望对象映射和处理透明
  • 如何仅从类名获取 QMetaObject?

    我需要获取 QMetaObject 来动态创建对象实例 如果我知道该对象 那么 QObject metaObject 就是我所需要的 如果我知道该类 那么我可以使用 QObject staticMetaObject 变量 但是 如果我只知道
  • 如何使用 PHP 将 PFX 转换为 CRT 和 PEM?

    如何使用 PHP OpenSSL 函数将 pfx PKCS12 或 p12 证书转换为 crt 和 pem 这样我就可以避免使用公共服务器上不允许的命令行工具
  • 如何防止 IPAINTING 堵塞并改善着色

    我想从中删除所有使用 IPAINTING 的文本IMAGE https i stack imgur com vxOdS jpg 我一直在尝试各种方法 最终发现可以通过OCR获得结果 然后使用阈值MASK THE IMAGE processe
  • CLR 4.0 中单个对象的大小仍然限制为 2 GB?

    据我了解 NET 中的单个实例有 2 GB 的限制 由于到目前为止我主要在 32 位操作系统上工作 所以我并没有对此给予太多关注 32 但无论如何这或多或少是一个人为的限制 然而 我很惊讶地得知此限制也适用于 64 位 NET http m
  • 在 C 中分割数组

    假设我有一个数组 我想从某些索引范围中删除元素 如果我提前知道数组的大小 数组中每个元素的大小以及要删除的索引范围 是否有任何方法可以避免复制新数组 如果您不想使用新数组进行复制 您可以考虑在同一个数组本身中执行此操作 这就是我所拥有的 i
  • 我的 UIImageView 的任务

    我需要用我的UI图像视图 突出显示UI图像视图点击后 在右侧创建一个清除按钮UI图像视图 清除UI图像视图单击创建的清除按钮 将图像命名为myimage png in UI图像视图之前已清除 任何人都可以帮我做到这一点吗 有任何示例代码 应
  • 使用 Yup 验证字符串或数字长度

    是否有验证特定长度的 yup 函数 I tried min 5 and max 5 但我想要确保该数字恰好是 5 个字符 即邮政编码 此检查会带来最佳的验证体验 Yup string required matches 0 9 Must be
  • 从当前日期获取 GMT 字符串

    我能够获得我需要的输出格式 但不是正确的时间 我需要 GMT 4 小时 的时间 var dt new Date var dt2 dt toString yyyyMMddhhmmss 有任何想法吗 输出看起来像 20120403031408
  • 停止在 hashchange 上触发 popstate

    我正在使用 History API 并使用推送和弹出状态 我想阻止 popstate 事件在某些情况下触发 其中我只将哈希值附加到 URL 例如 在某些情况下 单击锚点会附加 到 URL 并立即触发 popstate 我想避免所有场景 or