【问题标题】:IE8 back button and dynamic contentIE8后退按钮和动态内容
【发布时间】:2011-04-19 13:34:49
【问题描述】:

我有一个页面,它会拉取一个外部 JavaScript 文件,然后它会在该页面中动态生成一些内容(主要是插入一些 DIV 和一个 Flash 对象)。

当用户离开该页面然后按下“返回”按钮时,Safari 和 Firefox 会显示生成的内容,但 IE 8 不会。

IE 在历史中保留动态内容的最佳做法是什么?还是我必须监听某些特定事件然后重新启动我的 JavaScript?

顺便说一句,我有 jQuery,所以也欢迎相关的插件建议。

编辑:这里是演示链接: http://mmstest.eenet.ee/embed/281

如果你点击底部的 Google 链接然后返回,Safari 和 FF 会再次显示视频,IE8 不会。

【问题讨论】:

  • 您有可用的实时链接吗?可能是您的 IE8 设置。
  • IE 有很好的缓存。太好了,它加载了之前显示的任何内容并且不进行任何处理。尝试将缓存头设置为无缓存,也许它适合你。
  • 内容是否生成并插入到 JQuery 的文档就绪事件中? 根据我的观察浏览器实现“返回”按钮的方式有所不同,但重新加载页面(通常使用缓存)是最简单且足够的(也许 IE 只这样做?)- 这意味着除非以前生成的动态内容不会再次生成,它不会显示出来。我注意到在某些情况下,Chrome 和 FF 也倾向于“保存”页面的最后状态,因此如果生成动态内容,即使是动态生成的,单击“返回”也会恢复上一个页面状态。
  • @KTF:嗯,我对 FF4 的体验是,页面加载后的更改在来回时不会保留。
  • @Marcel Korpel:我正在开发一个应用程序,就在上个星期六,我正在使用 FF 对其进行测试,我记得它保留了页面的最后一个状态,但现在我想到了他们只是表单值,所以我认为您是对的,Marcel- FF 和 Chrome 可能都是这种情况;我收回之前说过的话。不管是 AFAIK,如果动态内容生成发生在 JQuery 准备好的文档上,即使你从缓存中提取它也应该发生。

标签: javascript jquery internet-explorer-8


【解决方案1】:

我使用 IE Developer 工具栏做了一个快速测试——我点击了返回,但没有发生任何事情,正如你提到的那样。然后我又试了一次,但在点击返回之前,我清除了缓存,当我返回时,视频出现了。

尝试确保您强制 IE 清除浏览器缓存,即使单击后页,您的视频也应该加载。

---- 缓存对话后添加的编辑 ---

这应该不会影响客户端浏览器从缓存中获得的 Web 应用程序的性能,因为您将发送回标头以过期/禁用缓存仅适用于触发 JS 以嵌入视频的页面。 其他所有内容——JS 脚本、图形/图像和视频事件——仍将由客户端缓存。

---- 编辑:已更新以包含来自评论的完整解决方案 ---

要禁用包含的 JavaScript 文件的缓存,一种解决方案是在 URL 的查询参数中附加随机数,这样浏览器就不会缓存结果。

<script src="jquery.js?t=<?PHP echo rand() ?>">

这避免了修改网络服务器设置以在系统范围内禁用缓存静态 JavaScript 文件的需要。

【讨论】:

  • 在我看来,禁用缓存是最后的手段,因为视频将嵌入到一个更大的站点中,其中包含许多可以从缓存中受益的图形等。我正在寻找一些我可以绑定的事件。例如在onFocus 或类似的行中,但会在点击返回按钮时触发。
  • 请注意,如果您禁用页面缓存,IE 将始终请求并刷新标记 (HTML),您不会禁用图像和图形的缓存,如果这是一个问题 -甚至是脚本。
  • 嗯......现在我想知道我应该禁用哪个服务器以获得最佳结果 - 脚本是在一台服务器上生成的,并且它嵌入到另一台服务器的 HTML 中。可能是后者,但可悲的是,如果其他人使用不受我控制的 HTML 嵌入此脚本,那么这将不起作用。
  • 您只会在请求特定页面时禁用缓存 - 您不会禁用服务器上每个页面/资源的缓存。 (实际上我也不太清楚你的意思,因为缓存是由浏览器完成的)
  • @KTF,感谢您的想法 - 我设置了无缓存标头并从服务器日志中验证 IE 确实再次从服务器获取页面和 JS 文件。但仍然没有显示视频。另一方面,当我从开发工具(F12)中“清除此域的缓存”时,它就可以工作了。这让我认为我的脚本中有一些可疑的东西被缓存了,可能是一些运行时变量或我需要在重新加载页面时重置的东西。
【解决方案2】:

您应该考虑使用历史插件来获得与动态内容一致的结果。

这是一个带有一些插件的线程jquery history plugin

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    相关资源
    最近更新 更多