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

时间:2011-08-25 16:40:19

标签: javascript firefox caching google-chrome reload

我是Javascript和Web编程的新手,所以这可能是一个愚蠢的错误。然而,我在找到有关它的信息时遇到了问题。

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

两个浏览器中的页面链接都很好。问题是当用户按下后退按钮时...在Chrome中,一切都会重置;播放器产生的区域与我在代码中设置的区域相同,并且所有“链接目标”仍然有效。这是理想的行为。

在Firefox中,一旦按下后退按钮并重新加载页面,播放器就处于他/她最后的已知位置,他们访问的链接目标将不再链接...我最终可以通过访问它们来停用所有这些位置并按下后退按钮。

从我能够研究的内容来看,似乎是Firefox如何处理缓存的问题,而我能够找到的解决方法是将随机数或时间附加到Javascript文件中。这让我印象深刻。我也可能会离开。

所以我想知道两件事:

  1. 这是对问题的准确假设,还是存在其他问题?
  2. 如果是,添加这些数字的最佳方式是什么。对我来说,整个概念看起来很不好......

2 个答案:

答案 0 :(得分:2)

很抱歉放弃这个问题很久了,但我找到了一个有效的解决方案!

我现在打电话     window.location.reload(真); 在我打电话之前     window.location = whateverUrl;

...我不确定它为什么会这么好用(我认为window.location.reload会在转到新页面之前重新加载当前页面[显然这不是我想要的]),但它好像。我猜这可能是我背后不知道的事情,但从功能上说它正在做我想做的事。

答案 1 :(得分:1)

我认为https://developer.mozilla.org/En/Using_Firefox_1.5_caching会回答您的所有问题。 Firefox在返回时实际上并不重新加载页面,而是将其与JavaScript状态一起恢复。所以你有几个选择:

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