若url有散列标签,并且用户刚刚使用浏览器向前或向后导航,那个么JavaScript函数是否有效?
如果哈希标记以若url有散列标签,并且用户刚刚使用浏览器向前或向后导航,那个么JavaScript函数是否有效?,javascript,jquery,browser,navigation,Javascript,Jquery,Browser,Navigation,如果哈希标记以twoB结尾,则刷新页面时,以下内容将触发警报: if (window.location.href.match(/\#twoB/)) { alert('twoB'); } 问题是,如果您单击了一些哈希标记,然后在浏览器中单击“上一步”,尽管URL中包含哈希,但不会触发警报。如何在用户使用浏览器返回或前进后激发代码(理想情况下仅此) 我在这个项目中使用jQuery,所以如果语法更简单的话,我希望在理想的环境中使用jQuery解决方案 $(window).on("hashcha
twoB
结尾,则刷新页面时,以下内容将触发警报:
if (window.location.href.match(/\#twoB/))
{
alert('twoB');
}
问题是,如果您单击了一些哈希标记,然后在浏览器中单击“上一步”,尽管URL中包含哈希,但不会触发警报。如何在用户使用浏览器返回或前进后激发代码(理想情况下仅此)
我在这个项目中使用jQuery,所以如果语法更简单的话,我希望在理想的环境中使用jQuery解决方案
$(window).on("hashchange", function () {
console.log("hash is now " + window.location.hash);
});
注意,jquery1.7中添加了
on
;如果您使用的是较旧的版本,那么请使用$(窗口)。改为使用bind
。最初,我解决了使用setInterval反复检查URL这一相当丑陋的方法。HTML5
onpopstate在第一次加载页面时运行,然后每次向前和向后导航都会运行
window.onpopstate = function(){
if (window.location.href.match(/\#twoB/))
{
alert('twoB');
}
}
为什么不使用location.hash而不是href.match?location.hash应该更快,因为您只需要获取hash,而不必进行匹配?您正在寻找众多jQuery历史插件中的一个。它们不是本地方式吗?如果一个功能不需要库就可以实现,那么为一个功能使用库似乎是一种耻辱。Thanks@jdn我用类似的方法回答了我的问题#标记链接已经添加到浏览器历史记录中,因此问题是在单击标记链接时触发了某些内容,因此不需要修改浏览器历史记录。我用onpopstate解决了这个问题,它会在历史发生变化时监听,比如当你点击一个#标记时。感谢我不确定我是否使用了正确的术语,我所说的“标记链接”是指链接片段,例如刚刚注意到它还破坏了它下面的任何JavaScript。有语法错误吗?我只是添加了你的代码,我需要定义“hashchange”还是什么?谢谢,不,它应该有用。。。我假设您将jQuery作为
$
全局查询?这是我的解决方案。它的工作原理和我测试的一样,但它依赖于PopState,如果没有它,用户会非常恼火。下面是我对代码的可能错误的实现。我也试着在gmap3函数之前加入jquery函数,但对我来说仍然不起作用。谢谢尝试$(窗口)。绑定而不是$(窗口)。打开。这可能是JQuery版本的问题,因为在版本1.7中添加了.on。这是解决了我的问题还是提高了性能?不管怎样,谢谢你的提示。