我正在使用 History API 并使用推送和弹出状态。我想阻止 popstate 事件在某些情况下触发,其中我只将哈希值附加到 URL。例如,在某些情况下,单击锚点会附加#
到 URL 并立即触发 popstate)我想避免所有场景#
or #somehasvalue
附加到 URL 并阻止 popstate 触发。我正在使用查询参数维护 URL,并且没有任何需要使用 popstate 事件来触发的场景#
在网址中。
这是我的代码。
if (supportsHistoryApi()) {
window.onpopstate = function (event) {
var d = event.state || {state_param1: param1, state_param2: param2};
var pathName = window.location.pathname,
params = window.location.search;
loadData(event, pathName + params, d.state_param1, d.state_param2);
}
不幸的是,据我发现你无法阻止 popstate 的触发。
您可以做的是检查event.state
目的。哈希值更改时该值将为空。
所以我建议添加一个
if(event.state === null) {
event.preventDefault();
return false;
}
到一开始的 popstate 事件处理程序。
我认为这是防止哈希更改时触发您这边的 popstate 处理代码的最佳方法,但我有兴趣知道是否还有其他解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)