HTML5 History API:“返回”到另一个页面,然后再次“前进”时显示 JSON

2023-11-26

我有一个页面,其中有几个搜索/过滤按钮,单击这些按钮时,会通过 AJAX 刷新下面列表的内容。

在此过程中,我正在修改历史记录(通过pushstate),以便新的过滤页面可以添加书签,因此后退按钮可以工作。我还在监听 popstate 事件,以对 Back 做出反应。

我的代码看起来或多或少像这样:

window.addEventListener("popstate", function(ev) {
  if (!window.history_ready) { return; } // Avoid the one time it runs on load 
  refreshFilter(window.location.href, true);
});

refreshFilter: function(newURL, backButtonPressed){
  $.ajax({ url: newURL}).done( blah );

  if (!backButtonPressed) {
    window.history_ready = true;
    history.pushState(null, null, newURL);
  }
}

这非常有效,除了一个奇怪的情况......

  • 用户位于“A”页面
  • 他们点击一个链接转到这个播放历史的页面(我们称之为“B”)
  • 他们运行几个过滤器,然后按“返回”几次,这样他们就回到了初始状态“B”
  • 他们再次单击“返回”,这会将他们发送回“A”
  • 此时,如果他们按“前进”,浏览器不会再次向服务器发出页面“B”的请求,而是简单地显示一堆 JSON 代码作为页面内容(这个 JSOn 是我的一个 AJAX 请求的响应)过滤东西)

至少在最新的 Chrome 中

为什么会发生这种情况以及如何避免这种情况?


Chrome 会缓存您访问的页面,当您后退或前进时,它会使用缓存快速显示页面。如果您用于通过 AJAX 从服务器检索 JSON 的 URL 与 Chrome 会命中的 URL 相同,那么 Chrome 可能会从缓存中选择该页面,该页面不是漂亮的 HTML,而只是 JSON 转储。

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

HTML5 History API:“返回”到另一个页面,然后再次“前进”时显示 JSON 的相关文章

  • 如何在 Safari 上打开本地 html 文件?

    我想打开本地 html 文件Safari集成到我的Swift 3应用 我知道如何使用网址来做到这一点 这是我用来执行此操作的代码 let encodedString url addingPercentEncoding withAllowed
  • Python。短语表示,如何改变?

    我不知道这个短语中存在的编码是什么 我也想知道这个问题的答案 主要是 我想改变我的措辞 例如 你好世界 变成你好 20世界 0A 老天啊 变成ol C3 A1 20mundo 0A 0A 我想要一个 python 解决方案 如果我有 gt
  • 将数组数据从 html 表单传递到 php 数组变量

    我有一张表格来记录一组项目的工作时间 该表单使用项目 ID 小时数和注释字段的数组 表单行是项目数量的循环 该表单将数据传递给 PHP 脚本进行处理 PHP 脚本没有看到数组中的值 它只是给我 Array 作为输出 文档和其他示例让我想知道
  • 是否可以将整个“卡片”包装在 标记中?

    在我的网站中 我有 卡片 每张卡片都包含许多元素 图像 文本 日期等 这有点像 Twitter 中的推文卡 我希望整个卡片都是可点击的 应该是到另一个页面的链接 目前 我有顶级元素作为 a 标记和使用aria label and aria
  • 不要让最终用户保存密码[重复]

    这个问题在这里已经有答案了 可能的重复 禁用浏览器 保存密码 功能 https stackoverflow com questions 32369 disable browser save password functionality 是否
  • 使网格项跨越到隐式网格中的最后一行/列

    当我不知道行数时 是否可以使网格项跨度从第一行到最后一行 假设我有以下 HTML 内容 其中包含未知数量的框 我怎样才能做到第三个 box从第一条网格线到最后一条网格线 container display grid grid templat
  • 垂直对齐两个弹性项目[重复]

    这个问题在这里已经有答案了 我有一个弹性容器 container和两个弹性项目 item one and item two 我想将第一个项目垂直居中并将第二个项目粘在底部 我不知道如何在这种情况下垂直对齐第一项 HTML div class
  • Intro.js 2页然后返回首页

    我在用intro js http introjs com 为我的网站创建一个小介绍 我希望游览从第 1 页 主页 2 另一页 然后回到第 1 页 主页 我已经成功地从第 1 2 页开始 但不确定如何让它返回到第 1 页 我对 javascr
  • 在React组件中使用的字符串变量中插入html

    我正在为我的投资组合网站构建一个反应应用程序 目前我已经用 JSX 编写了应用程序 因此我可以添加以下内容 class Project extends React Component render return div h1 this pr
  • 将下拉按钮和下拉菜单放在中心?

    div class dropup center block div
  • 优化 CSS 交付 - Google 的建议

    谷歌建议在 head 中使用非常重要的 CSS 内联 并在内部使用其他 CSS
  • CSS 中的边框图像开头

    MDN 是这样定义的边框图像开始 https developer mozilla org en docs Web CSS border image outset border image outset 属性描述了边框的数量 图像区域超出边框
  • Twitter Bootstrap - 多图像(缩略图)轮播 - 一次移动一个缩略图

    我正在尝试 Twitter bootstrap 3 我对 HTML CSS 和 Javascript 还很陌生 我有一个我创建的轮播 它的代码如下所示 div class container div class carousel slide
  • 获取画布上下文的最后一个点的坐标

    我想创建一个arrowTo功能与CanvasRenderingContext2D prototype 为此 我需要获取最后一个点的坐标 例如 var ctx someCanvas getContext 2d ctx moveTo 10 40
  • onclick 函数上的 CSS 选择器

    有没有办法让CSS选择器onclick function 您可以在onclick https stackoverflow com questions 24365416 select element which have specific a
  • 第一次从按钮提交时,只有单击两次后才会打开模态框

    我有一个模式弹出窗口可以通过单击按钮打开 不幸的是 当第一次在浏览器中提交时 我只能在单击两次后才能看到弹出窗口 但是 一旦弹出窗口打开并关闭 我就可以在下一次尝试中单击一次来打开模式 如果我刷新浏览器也会发生同样的情况 这看起来很奇怪 任
  • Disqus 评论数始终为 0 条评论

    我想我已经按照通用代码的说明设置了 Disqus 问题是它总是说某个帖子有 0 条评论 拿这个帖子来说 http tx0rx0 com retropie and the raspberry pi http tx0rx0 com retrop
  • 当表格在 IE 中获得焦点时,表格滚动条会向上跳跃

    问题 我有一个table有包装的div with overflow y auto 一旦table获得焦点 滚动条向上跳 我怎样才能防止这种情况发生 我经历过这种行为IE9 不在 Chrome 中 请注意 我已添加tabindex到桌子上 以
  • 大型应用的回流/布局性能

    我正在使用 GWT 构建一个 HTML 应用程序 其性能总体上是正确的 有时 它会加载 DOM 中的许多对象 并且应用程序会变得很慢 我使用 Chrome 开发者工具分析器来查看时间花在哪里 在 Chrome 下 一旦应用程序被编译 即没有
  • 清理 html 字符串中的所有脚本

    HTML5 剪贴板很棒 但我正在寻找一种使其安全的方法 用户正在将文本 html 粘贴到我的网页中 这允许他们粘贴图像 表格等 我正在寻找一种方法 在将粘贴的内容添加到页面之前删除所有脚本 我需要删除

随机推荐

  • 使用与密钥相同的字符串加密字符串是否安全?

    在 CBC 模式下使用 AES 并使用 IV 当然 对给定密钥本身进行加密是否存在任何安全缺点 遵循以下原则 密钥是秘密的 IV 是公开的 因为这不会影响加密的安全性 然而 潜在的攻击者将会知道 因为他可以访问源代码 该字符串使用其自身作为
  • 具有相机意图和图像选择器意图的选择器

    我创建了一个选择器 用于从文件中选择图像或制作图片 我使用的代码在 Nexus 5 上运行良好 但是当我在 Samsung S5 上尝试时 选择器不显示相机图标 public Intent makePhotoIntent String ti
  • docker 互联网连接 iptables=false

    我放弃 我在 ubuntu 16 04 下使用 Docker 1 12 0 并使用 UFW 进行强化 该机器有 2 个接口 一个公共 eth0 和一个专用网络 eth1 Server Version 1 12 3 Storage Drive
  • 如何仅使用 CSS 获得悬停效果

    我已经得到了圆圈部分 我在 div 上设置了黑色的背景颜色 对于文本 我设置了 a hover 作为显示的颜色 我只是不知道如何为 div 设置 a hover 以及仅针对该周长 这是我的代码 HTML a class cirlink hr
  • 静态成员的两个实例,怎么可能?

    我有一个多线程应用程序 我在共享库中声明一个具有静态成员的类 从不同库的不同线程打印成员的地址会显示不同的结果 宣言 template
  • 指令在 ng-repeat 绑定的 内不起作用

    我有一个表 其中的行通过重复ng repeat 我正在尝试创建一个生成列的模板 td 对于每一行 tr app directive customtd function return restrict E template td positi
  • 来自 AngularJS Get for JSON 的 HTTP 状态 0

    我正在为 JSON 运行 http get 并且状态为 0 我已经下载了相同的 JSON 并且 get 在本地工作 并且在 Python 中使用请求库我可以毫无问题地获取 JSON 但是在AngularJS 不起作用 我不明白的是为什么 A
  • 在 macOS 的 SwiftUI 中更改 TextEditor 背景颜色

    我想更改 macOS 上 SwiftUI 文本编辑器的背景颜色 下面的代码 用于 iOS 是否有一个变体适用于 NSTextField 而不是 UITextView Thanks struct ContentView View init U
  • 社交网络应用程序数据库设计:如何改进此架构?

    背景 我正在为诗人和作家开发一款社交网络应用程序 让他们能够分享诗歌 收集反馈并与其他诗人交流 我很少接受过数据库设计方面的正式培训 但我一直在阅读书籍 SO 和在线数据库设计资源 试图在不过度设计的情况下确保性能和可扩展性 数据库是MyS
  • 复杂数据类型的 Typedef

    我试图从语法的角度理解 C 如何处理复杂 typedef 的底层机制 请考虑下面的示例 问题末尾包含参考文献 typedef int p1d 10 是正确的声明 即 p1d 这里是指向数组的指针 10 个整数 就像使用 Array 类型声明
  • Angular 2 下载文件:结果损坏

    我正在尝试使用 Angular 2 TypeScript 和 Web API 下载文件 我遇到的问题是 当下载文本文件时 该文件是文件 但是当尝试下载 PDF 文件时 例如 它已损坏 下载的文件内容都是乱码废话 我使用的 TypeScrip
  • 如何在 Python 中存储变量/首选项以供以后使用

    我正在用 Python 编写 Windows 程序 并且希望保存变量和用户首选项 以便即使在程序终止并重新启动后我也可以调用它们 有没有在 Windows 机器上执行此操作的理想方法 会 winregWindows 注册表适合这项任务吗 或
  • C++ 运算符重载的多态性

    如何使纯虚函数成为运算符 功能 我在基课上喜欢这个吗 int运算符 0 编译器给出错误 在派生类中operator 函数 编译器说派生类不能 make 因为下面的类是抽象的 我知道我无法创建抽象类的对象 但现在我尝试创建派生类对象 这是代码
  • Django 和 Postgres - 百分位数(中位数)和分组依据

    我需要计算每个卖家 ID 的期间中位数 参见下面的简化模型 问题是我无法构建 ORM 查询 Model class MyModel period models IntegerField null True default None sell
  • Django 设计登录表单并添加额外的跨度

    我有两个关于表单样式的问题 对于我的登录 我使用 Django 的默认身份验证功能 并且没有手动编写任何视图或表单 urls py urlpatterns patterns django contrib auth views url r l
  • 在 Centos 6 上安装最新的 mono

    我是 Linux 新手 字面意义上的新手 用过几次 我尝试通过 yum 安装 mono 但我得到了一个不支持 NET 4 的过时版本 如何安装单声道 2 10 8 好吧 这就是我想出的并且它对我有用 基于this文章 yum install
  • Node.js 服务器向 404.html 页面发送“404 未找到”消息

    我正在使用 node js 我想知道如何显示 404 html 而不是 404 Not Found 消息 这是我的 server js var http require http url require url path require p
  • java.lang.NoClassDefFoundError: org/apache/http/conn/scheme/SchemeSocketFactory

    我尝试通过 AWS 凭证发送邮件 但出现异常 java lang NoClassDefFoundError org apache http conn scheme SchemeSocketFactory 我添加了这些罐子 aws java
  • C# 中条件简写类似于 SQL 'in' 关键字

    在 C 中是否有一种简写方式可以这样写 public static bool IsAllowed int userID return userID Personnel JohnDoe userID Personnel JaneDoe Lik
  • HTML5 History API:“返回”到另一个页面,然后再次“前进”时显示 JSON

    我有一个页面 其中有几个搜索 过滤按钮 单击这些按钮时 会通过 AJAX 刷新下面列表的内容 在此过程中 我正在修改历史记录 通过pushstate 以便新的过滤页面可以添加书签 因此后退按钮可以工作 我还在监听 popstate 事件 以