为什么Google Chrome会在pushState上进入服务器?

时间:2013-03-16 19:03:02

标签: javascript html5 google-chrome pushstate

我测试了Chrome(Linux和Windows),Firefox和Opera。

每次我执行pushState时,Chrome都会转到服务器。它似乎没有以任何方式使用请求,我只注意到它,因为我正在看日志文件。

以下是请求:

16 Mar 2013 01:00 PM ip=127.0.0.1 agent=Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22 uri=/ T1=0ms T2=0ms T3=0ms 

以下是代码行:

history.pushState({}, 'my_app', URL);

我知道URI说'/',但这甚至不是正在推送的网址。

Firefox和Opera不这样做,对我来说似乎是不正确的行为。是一个错误吗?

我担心的原因是缩放。我不希望用户在浏览我的应用时发出虚拟请求。

1 个答案:

答案 0 :(得分:7)

@JavascriptNewbie - 你并不孤单:D

祝贺成为这个星球上唯一的其他红润人(至少是互联网)注意到这一点,并且足够熟练地检查你发臭的日志。

善良: Chrome和Firefox可以在他们喜欢时进行预取,有时使用pushState进行预取,以便更好地进行前进/前进。看起来在你的情况下,至少它会因为页面中的某些内容而中止“prerender”...但是你可能想要检查它是否也预先获取并执行链接的脚本或样式。

简短: Chrome和FireFox可能决定从服务器获取pushState / replaceState网址,以便能够优化其后退/前进缓存,以防该人员从导航栏复制并粘贴网址。这是不确定的,并不总是发生。

龙: 它变得更糟,除非你遇到这里提到的一个限制:https://developers.google.com/chrome/whitepapers/prerender Chrome实际上会解释并执行你的javascripts ......这可能会触发像AJAX甚至Websockets这样的东西。

The Longer:我已经完成了一个测试套件和写作:https://github.com/nickhsharp/prefetchNightmare最终可能会成为博客文章。