在Chrome中刷新window.location.hash吗?

| 我在网上进行了一些监听,发现“ 0”是一种广泛采用的更新浏览器位置的方法,而无需重新加载/刷新页面。我已将其应用于本示例,我已经做好了准备:http://dl.dropbox.com/u/1595444/locationExample/index.html 在Safari中效果很好,但是... 我注意到,在Chrome 10+中,更改
hash
: 有类似重新加载的内容。 当用户向下或向上滚动时,所产生的症状是打ic。 我的控制台输出被保留(如果您检查控制台,则输出项目字符串)。 网站图标似乎正在重新加载。 有人遇到过这个问题吗?知道解决办法吗?     
已邀请:
这里最有可能发生两件事: 网站图标和停止/刷新按钮由于Chrome错误而闪烁(提到
pushState
,但哈希更改是 在相同的代码路径上)。 滚动时会稍有打h,这是因为Chrome浏览器会考虑将哈希值更改视为生成新的URL,因此会进行整页的重新绘制和高质量的缩放比例来更新页面缩略图。这也是一个错误。您可以在检查器的时间轴视图中看到这一点,大多数滚动事件都会导致重新绘制窗口宽度x一些小的高度,但是偶尔会进行全窗口重新绘制。这篇博客文章还有更多细节。 两者的解决方法是将哈希的更新推迟到用户完成滚动为止(您仍然可以立即更新当前项下方显示的白条)。您可以通过执行以下操作来做到这一点:
var scrollTimeout;
window.onscroll = function() {
  // update current item display here
  if (scrollTimeout)
    clearTimeout(scrollTimeout);
  scrollTimeout = setTimeout(function() {
    scrolTimeout = undefined;
     // update hash here
  }, 100);
};
由于您似乎正在使用jQuery,因此有一些反跳插件可能会有所帮助。     
我没有明确的答案,但首先我会尝试: 在值上加上井号(#)(即使用window.location.hash = \“#etc \”)。 为window.onhashchange处理程序注册一个处理程序。 或者,如果您要完成的工作是使后退按钮返回到先前的逻辑位置,则可以考虑使用history.pushState(对我来说,您要完成的工作还不清楚,无论您是想跳转到部分,或更复杂的部分)。     
var r=\'#hello\';
if(navigator.userAgent.indexOf(\'Chrome/\')!=-1){
 top.history.pushState(\"\", \"\", r);
 return;
};
if(r.charAt(0)==\'/\'){
  top.location.replace(r);
 }else{
  top.location.hash=r;
};
为我工作。实际上,我花了很长时间才弄清楚这一点。 Firefox现在也支持“ 5”对象,因此几年后我们也许可以摆脱整个“哈希”对象。 编辑:是的,重新加载的东西是Chrome错误。     

要回复问题请先登录注册