“window.location.hash = location.hash”在Webkit(Safari& Chrome)中不起作用

时间:2011-08-07 04:37:33

标签: javascript google-chrome safari webkit

我无法让window.location.hash = location.hash在Safari中工作。

我正在使用javascript将可滚动的DIV包装在我的页面内容中,该DIV位于我网页的导航栏下方。由于当javascript运行时滚动条的位置被重置,我丢失了URL设置的原始哈希位置。我需要重新提示哈希位置而不使用javascript重新加载页面,所以我使用的是window.location.hash = location.hash。它适用于IE8,Firefox和Opera,但它在Safari中不起作用。 (我也会假设Chrome,但我没有检查)。有什么建议吗?

提示:我喜欢jQuery。

5 个答案:

答案 0 :(得分:11)

Webkit有两个奇怪的因素阻止window.location.hash = location.hash正常工作。

  1. Webkit响应window.location.href而不是window.location.hash(与所有其他浏览器一样)。奇怪的是,webkit仍然可以使用hash
  2. 读取网址的location.hash标记
  3. Webkit有一个记录在案的错误,在浏览器转到新位置之前,必须将href location设置为同一位置两次。错误报告here
  4. 这段代码解决了我的问题:(使用jQuery)。

    $(document).ready(function() {
        gotoHASH()
    };
    
    function gotoHASH() {
        if (location.hash) {
            if ( $.browser.webkit == false ) {
                window.location.hash = location.hash;
            } else {
                window.location.href = location.hash;
            }
        }
    };
    

答案 1 :(得分:5)

我最终得到了

window.location.hash = "";
window.location.hash = "myanchor";

这在我测试过的所有桌面浏览器以及iOS和Android chrome上运行良好。

答案 2 :(得分:0)

首先将location.hash设置为其他内容并立即将其设置回来。

var t = window.location.hash;
window.location.hash = "non-existant-id";
window.location.hash = t;

答案 3 :(得分:0)

在JavaScript更改原始哈希位置之前,使用

获取滚动位置
var st = $(window).scrollTop().

如果要恢复滚动位置,请使用

$(window).scrollTop(st);

答案 4 :(得分:0)

go_hash('#home')

The function...

function go_hash(hash) {
  console.log('go_hash: ' + hash)
  if(hash.indexOf('#') == -1)
    hash = '#' + hash
  if(document.location.hash) {
    document.location.hash = hash
    return
  }
  if(window.location.hash) {
    window.location.hash = hash
    return
  }
  if(document.location.href) {
    document.location.href = hash
    return
  }
  window.location.href = hash
}