如何强制页面重新加载,如果什么都在改变URL是哈希?(How to force a page to

2019-08-20 20:28发布

我试图重新装入不同的URL哈希当前页面,但是按预期的方式不起作用。

(澄清我怎么想它的工作:重新加载页面,然后滚动到新的哈希)

方法一:

window.location.hash = "#" + newhash;

只有滚动到这种定位的不重新加载页面。

方法2:

window.location.hash = "#" + newhash;
window.location.reload(true);

有点儿工作,但它首先滚动到锚,然后再重新加载页面,然后滚动到锚。

方法3:

window.location.href = window.location.pathname + window.location.search + "&random=" + Math.round(Math.random()*100000) + "#" + newhash;

的作品,但我宁愿随机垃圾不添加到URL。

有没有更好的解决办法?

Answer 1:

删除你要浏览到,然后使用方法#2锚? 由于没有锚,设置散列不应该滚动页面。



Answer 2:

我有上开了jQuery函数$(document).ready()如果有一个哈希附加到我的情况下,该URL检测,所以我一直认为功能相同,然后就使用武力重载每当散列变化是检测:

$(window).on('hashchange',function(){ 
    window.location.reload(true); 
});

然后我的其他功能 -

$(document).ready(function() {
    var hash = window.location.hash;    
    if(hash) {
           //DO STUFF I WANT TO DO WITH HASHES
    }
});

就我而言,这是罚款UX - 也许不是为别人好。



Answer 3:

应该预计#foo将滚动到ID,“富”的主播。 如果你想使用方法#1,拥有它重新加载,这种方法可能会奏效。

if (Object.defineProperty && Object.getOwnPropertyDescriptor) { // ES5
    var hashDescriptor = Object.getOwnPropertyDescriptor(location, "hash"),
    hashSetter = hashDescriptor.set;
    hashDescriptor.set = function (hash) {
        hashSetter.call(location, hash);
        location.reload(true);
    };
    Object.defineProperty(location, "hash", hashDescriptor);
} else if (location.__lookupSetter__ && location.__defineSetter__) { // JS
    var hashSetter = location.__lookupSetter__("hash");
    location.__defineSetter__("hash", function (hash) {
        hashSetter.call(location, hash);
        location.reload(true)
    });
}


Answer 4:

另一种选择是去除哈希并将其存储在会话存储要在重装检索:

var newUrl = location.href + '#myHash';
var splitUrl = newUrl.split('#');
newUrl = splitUrl[0];
if (splitUrl[1]){
    sessionStorage.savedHash = splitUrl[1];
}
location.href = newUrl;

然后在你的页面的顶部,你可以有下面的代码:

var savedHash = sessionStorage.savedHash;
if (savedHash){
    delete sessionStorage.savedHash;
    location.hash = savedHash;
}


文章来源: How to force a page to reload if all what was changed in url is hash?