JavaScript函数,如果url有哈希标记,用户刚刚使用浏览器向前或向后导航?

如果散列标记以twoB结尾,则在刷新页面时,以下内容将触发警报:

 if (window.location.href.match(/\#twoB/)) { alert('twoB'); } 

问题是,如果您点击了几个哈希标签,然后在浏览器中单击后退,尽管URL包含哈希警报不会触发。 在用户使用浏览器返回或转发之后,如何激活(理想情况下)代码。

我正在为这个项目使用jQuery,所以如果语法更容易,我想在理想的世界中使用jQuery解决方案。

 $(window).on("hashchange", function () { console.log("hash is now " + window.location.hash); }); 

请注意,在jQuery 1.7中添加了on ; 如果您使用的是旧版本,请改为使用$(window).bind

最初我解决了这个使用setInterval重复检查URL的丑陋方式。 onPopstate上的HTML5s在首次加载页面时运行,然后在每个前进和后退导航时运行。

 window.onpopstate = function(){ if (window.location.href.match(/\#twoB/)) { alert('twoB'); } } 

为什么不使用location.hash而不是href.match? location.hash应该更快,因为你只获得哈希并且你不必进行匹配?