gpt4 book ai didi

javascript - 历史推送状态不在独立的 location.hash 或 location.href 中,而是在 Location 对象本身中

转载 作者:行者123 更新时间:2023-12-02 16:21:32 32 4
gpt4 key购买 nike

谁能解释一下这种行为?我使用 history.pushState(null, null, '#test'); 推送历史状态。然后,当尝试使用console.log(window.location.hash)在监听器函数中获取状态URL时(没有找到更好的方法来监听pushState更改),它返回空字符串, #test 哈希。 console.log(window.location.href) 也返回不带哈希值的整个 URL #testconsole.log(window.location) 返回 Location 对象,其中哈希值同时位于 hrefhash 属性中。这是为什么?如何获取推送状态的 URL?

        (function(history){
var pushState = history.pushState;
history.pushState = function(state) {
if (typeof history.onpushstate == "function") {
history.onpushstate({state: state});
}
console.log(window.location.hash);
console.log(window.location.href);
console.log(window.location);
return pushState.apply(history, arguments);
}
})(window.history);

history.pushState(null, null, '#test');

最佳答案

这是因为您在实际设置新状态之前记录了变量。您之所以可以在对象中看到更新的属性,是因为它记录了对该对象的引用,而不是记录该对象时的副本。在这一行之前,您的猴子补丁不会调用原始的 pushState 函数。

return pushState.apply(history, arguments);

要解决此问题,您可以在记录之前简单地调用该函数,然后返回响应。

(function(history){
var pushState = history.pushState;
history.pushState = function(state) {
if (typeof history.onpushstate == "function") {
history.onpushstate({state: state});
}
var r = pushState.apply(history, arguments);
console.log(window.location.hash);
console.log(window.location.href);
console.log(window.location);
return r;
}
})(window.history);

history.pushState(null, null, '#test');

关于javascript - 历史推送状态不在独立的 location.hash 或 location.href 中,而是在 Location 对象本身中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29068063/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com