Chrome 和 Firefox 之间的差异:重新加载运行 Javascript 游戏的页面

Gar*_*ker 6 javascript firefox caching google-chrome reload

我对 Javascript 和 Web 编程总体来说是新手,所以这可能是一个愚蠢的错误。尽管如此,我在寻找相关信息时遇到了问题。

我正在用 Javascript 开发一个游戏,玩家可以通过点击并让他们的化身走到不同的建筑物/物体来四处走动并从一个场景移动到另一个场景。目前,我只有通过在this.gotoTimer = setTimeout(self.location = this.targetURL, 1000);检测到冲突时调用来更改页面位置。

该页面链接在两种浏览器中都正常。问题是当用户按下后退按钮时......在 Chrome 中,一切都会重置;播放器在我在代码中设置的同一区域中生成,并且所有“链接目标”仍然有效。这是期望的行为。

在 Firefox 中,一旦按下后退按钮并重新加载页面,玩家就会处于他/她最后已知的位置,并且他们访问的链接目标将不再链接......我最终可以通过访问它们并按返回键。

根据我的研究,这似乎是 Firefox 处理缓存的方式存在问题,我找到的解决方法包括向 Javascript 文件附加随机数或时间。这让我觉得很恶心。我可能也还差得远。

所以我想知道两件事:

  1. 这是对问题的准确假设,还是还有其他问题?
  2. 如果是,附加这些数字的最佳方法是什么。整个概念对我来说似乎很老套......

Wla*_*ant 1

请参阅pageshow 事件的文档。现代浏览器在返回时实际上不会重新加载页面,而是将其及其 JavaScript 状态一起恢复。所以你有几个选择:

\n
    \n
  • 添加unload事件处理程序以禁用此行为(次优,降低性能)。
  • \n
  • 使用window.location.replace()而不是分配给window.location,这将阻止用户返回(我猜这是不可取的)。
  • \n
  • 添加pageshow事件处理程序以重置 JavaScript 状态。
  • \n
  • 更改逻辑,使其不再假设用户在单击链接后将离开并且永远不会返回。
  • \n
\n