我无法让window.location.hash = location.hash
在Safari中工作。
我正在使用javascript将可滚动的DIV包装在我的页面内容中,该DIV位于我网页的导航栏下方。由于当javascript运行时滚动条的位置被重置,我丢失了URL设置的原始哈希位置。我需要重新提示哈希位置而不使用javascript重新加载页面,所以我使用的是window.location.hash = location.hash
。它适用于IE8,Firefox和Opera,但它在Safari中不起作用。 (我也会假设Chrome,但我没有检查)。有什么建议吗?
提示:我喜欢jQuery。
答案 0 :(得分:11)
Webkit有两个奇怪的因素阻止window.location.hash = location.hash
正常工作。
window.location.href
而不是window.location.hash
(与所有其他浏览器一样)。奇怪的是,webkit
仍然可以使用hash
location.hash
标记
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;
}
}
};
答案 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
}