"hashchange"不会在Wordpress中触发



嗨,我正在建立这个网站:http://www.freiheitmedia.com/en/。它是用Themify Ultra主题构建的。

我的目标是在滚动或单击链接时摆脱 url 中的 #something 部分。

我需要用JavaScript/jQuery来做,因为没有基于主题的解决方案,支持人员无法帮助我。

我已经测试过并且知道以下代码会根据需要替换 url:

history.replaceState("",document.title,window.location.pathname + window.location.search);

现在,问题是我似乎无法触发"哈希更改"事件。我将以下代码放在页脚中,并且在两种情况下都无法访问警报语句:

<script>
window.addEventListener("hashchange", function(e){
alert("hiii");
});
</script>

<script>
window.addEventListener("hashchange", function(e){
alert("hiii");
}, false);
</script>

我怀疑主题的设置可能会阻止哈希更改事件,但这只是一个猜测。

你们知道为什么"哈希更改"没有被解雇吗?

从您的澄清评论中:

当您访问该网站并向下滚动时,您将看到 URL 会根据您所在的部分而变化。具体来说,#part 变化。我的目标是防止这种行为,并始终拥有一个干净的网址(没有任何 #hashes(。

最好的方法是通过更新哈希来找到响应滚动事件的插件(这大概是有帮助的;如果你为它添加书签,它会带你回到页面的那部分(并将其关闭。 用页面上的插件争夺哈希的控制权是一个坏主意。

非常第二好:

由于hashchange没有触发,插件必须使用historyreplaceStatepushState或类似的方式来设置哈希,因为这不会触发hashchange。您可以将这些函数替换为您自己的版本,以去除哈希片段:

// I DON'T RECOMMEND THIS APPROACH
(function() {
function removeHash(url) {
var u = String(url || "");
var x = u.lastIndexOf("#");
return x == -1 ? u : u.substring(0, x);
}
var originalReplaceState = history.replaceState;
history.replaceState = function(state, title, url) {
url = removeHash(url);
return originalReplaceState.call(history, state, title, url);
};
var originalPushState = history.pushState;
history.pushState = function(state, title, url) {
url = removeHash(url);
return originalPushState.call(history, state, title, url);
};
})();

不过,实际上最好通过添加哈希片段来查找响应滚动事件的任何内容并禁用它。

相关内容

  • 没有找到相关文章