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

问题描述 投票:7回答:5

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

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

提示:我喜欢jQuery。

javascript google-chrome safari webkit
5个回答
11
投票

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

  1. Webkit响应window.location.href而不是window.location.hash(就像所有其他浏览器一样)。奇怪的是,webkit仍然可以使用hash读取URL的location.hash标签
  2. Webkit有一个记录在案的错误,在浏览器转到新位置之前,必须将href location设置为同一位置两次。错误报告here

这段代码解决了我的问题:(使用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;
        }
    }
};

6
投票

我结束了

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

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


0
投票

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

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

0
投票

在JavaScript更改原始哈希位置之前,使用获取滚动位置

var st = $(window).scrollTop().

如果要还原滚动位置,请使用

$(window).scrollTop(st);

0
投票
go_hash('#home')

功能...

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
}
© www.soinside.com 2019 - 2024. All rights reserved.