jQuery - hashchange 事件

IT技术 javascript jquery hashchange browser-state
2021-01-25 01:12:42

我在用:

$(window).bind( 'hashchange', function(e) { });

将函数绑定到哈希更改事件。这似乎在 IE8、Firefox 和 Chrome 中有效,但在 Safari 中无效,我认为在早期版本的 IE 中无效。对于这些浏览器,我想禁用使用哈希和hashchange事件的JavaScript 代码

jQuery 有没有办法检测浏览器是否支持该hashchange事件?也许有jQuery.support...

6个回答

您可以通过以下方式检测浏览器是否支持该事件:

if ("onhashchange" in window) {
  //...
}

也可以看看:

感谢您的快速回复。
2021-03-15 01:12:42
请注意,在 IE7 兼容模式下运行的 IE8 报告窗口中的“onhashchange”为真,即使该事件不受支持 - 来自 jQuery Mobile
2021-04-07 01:12:42

截至 2017 年,如果有人需要它,这里的更新答案onhashchange是所有主要浏览器都得到很好的支持。有关详细信息,请参阅caniuse要将它与 jQuery 一起使用,不需要插件:

$( window ).on( 'hashchange', function( e ) {
    console.log( 'hash changed' );
} );

偶尔我会遇到仍然使用 hashbang URL 的遗留系统,这很有帮助。如果您正在构建新的东西并使用哈希链接,我强烈建议您考虑使用 HTML5 pushState API。

这很有效,用于window.location.hash访问当前哈希。
2021-03-31 01:12:42

有一个 hashchange 插件,它包含了此处可用的功能和跨浏览器问题

仅 < IE8 需要
2021-04-08 01:12:42

解决您的问题的不同方法...

有 3 种方法可以将 hashchange 事件绑定到方法:

<script>
    window.onhashchange = doThisWhenTheHashChanges;
</script>

或者

<script>
    window.addEventListener("hashchange", doThisWhenTheHashChanges, false);
</script>

或者

<body onhashchange="doThisWhenTheHashChanges();">

这些都适用于 Win 7 上的 IE 9、FF 5、Safari 5 和 Chrome 12。

试试 Mozilla 官方网站:https : //developer.mozilla.org/en/DOM/window.onhashchange

引用如下:

if ("onhashchange" in window) {
    alert("The browser supports the hashchange event!");
}

function locationHashChanged() {
    if (location.hash === "#somecoolfeature") {
        somecoolfeature();
    }
}

window.onhashchange = locationHashChanged;