2011-08-25 56 views
4

我是JavaScript和网络编程的新手,因此这可能是一个愚蠢的错误。不过,我在查找关于它的信息时遇到了问题。Chrome和Firefox之间的差异:重新加载运行Javascript游戏的页面

我正在用Javascript开发一款游戏,玩家可以在游戏中四处走动,并通过点击和移动他们的头像到不同的建筑物/对象。现在,我只需要更换页面位置,如果检测到碰撞,请致电this.gotoTimer = setTimeout(self.location = this.targetURL, 1000);

该页面在两个浏览器中链接正常。问题出在用户按下后退按钮时...在Chrome中,一切都重置;玩家产生的区域与我在代码中设置的区域相同,所有'linktargets'仍然有效。这是所需的行为。

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

从我已经能够研究的问题来看,Firefox对待缓存的方式似乎有问题,并且我已经能够找到的解决方法包括将随机数或时间附加到Javascript文件。这让我感到毛骨悚然。我也可能会离开。

所以我不知道两件事情:

  1. 这是问题的一个准确的假设,或者是有其他问题?
  2. 如果是这样,附加这些数字的最好方法是什么。整个概念对我来说似乎很不好...
+0

另外:我知道(或者至少认为)这将是更好地实施内部将此作为某种类型的状态机,但我需要的概念工作尽可能快的证明。 (现在开发状态机所用的时间会更好地用于解决IE和其他浏览器问题。) –

+1

您可能更适合在单个页面中实现您的游戏,而无需处理更改的URL和后退按钮。如果您想要提供后退按钮功能(可疑游戏),请查看[历史API](http://diveintohtml5.org/history.html)。 –

+0

你必须更清楚你的“链接目标”是什么意思,这里没有足够的信息来知道你为什么不能再次访问它们 - 它们是什么? – nwellcome

回答

1

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

  • 添加一个unload事件处理程序来禁用此行为(次优,降低性能)。
  • 使用window.location.replace()而不是分配给window.location,这将防止用户回头(我不想要)。
  • 添加pageshow事件处理程序以重置JavaScript状态。
  • 更改逻辑,使其不再假定用户将消失,并且在单击链接后不再返回。
2

抱歉放弃这个问题这么久,但我找到了一个解决方案,工作!

我现在致电 window.location.reload(true);我打电话给 window.location = whateverUrl;

...我不确定它为什么能很好地工作(我想window.location.reload在重新加载之前会重新加载当前页面[显然不是我想要的]),但看起来很好。我猜可能是在我背后不知道的东西,但在功能上它正在做我想做的事。

相关问题