Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome中的window.location.hash刷新?_Javascript_Google Chrome_Location - Fatal编程技术网

Javascript Chrome中的window.location.hash刷新?

Javascript Chrome中的window.location.hash刷新?,javascript,google-chrome,location,Javascript,Google Chrome,Location,我在网上进行了一些窥探,发现window.location.hash=“etc”是一种广泛采用的方法,可以在不重新加载/刷新页面的情况下更新浏览器的位置。我已经将其应用到了我编造的这个例子中: 在Safari中效果很好,但是 我注意到的是,在Chrome 10+中,更改哈希值时: 有一种类似于重新加载的方式 当用户向下或向上滚动时,产生的症状是打嗝 我的控制台输出将被保留(如果检查控制台,则会输出项目字符串) favicon似乎正在重新加载。 以前有人遇到过这个问题吗?知道修复方法吗?我没有确定

我在网上进行了一些窥探,发现
window.location.hash=“etc”
是一种广泛采用的方法,可以在不重新加载/刷新页面的情况下更新浏览器的位置。我已经将其应用到了我编造的这个例子中:

在Safari中效果很好,但是

我注意到的是,在Chrome 10+中,更改
哈希值时:

  • 有一种类似于重新加载的方式
  • 当用户向下或向上滚动时,产生的症状是打嗝
  • 我的控制台输出将被保留(如果检查控制台,则会输出项目字符串)
  • favicon似乎正在重新加载。

  • 以前有人遇到过这个问题吗?知道修复方法吗?

    我没有确定的答案,但首先我会尝试:

  • 将散列标记(#)前置到值上(即使用window.location.hash=“#etc”)
  • 为处理程序注册一个处理程序
  • 另一方面,如果你想完成的是让后退按钮返回到以前的逻辑位置(你不知道你正在尝试的是什么,你是否想跳转到页面上的一个部分,或者更复杂的东西),你可以考虑使用。
    这里最有可能发生两件事:

    • favicon和stop/refresh按钮闪烁,原因是(提到了
      按钮状态
      ),但散列更改是无效的 在相同的代码路径上)
    • 滚动时出现的轻微问题是因为Chrome会重新绘制整个页面并进行高质量缩放以更新页面缩略图,因为它将哈希更改视为生成新的URL。那也是。您可以在inspector timeline视图中看到这一点,大多数滚动事件会导致窗口宽度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,所以有一些方法可能会有所帮助

    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现在也支持
    history
    对象,所以我们可能在几年内就可以摆脱整个“散列”的东西


    编辑:是的,重新加载是一个Chrome bug。

    当前跳到锚只有在没有哈希集的情况下才有效。(例如:你的.tld/blog#comment-1)要跳转到一个新的锚点,你必须在应用新的散列(window.location.hash='#comment-2')之前将散列设置为null(window.location.hash=null),然后它才能工作。希望这能帮助别人。