jQuery - hashchange事件

Ian*_*ert 83 javascript jquery hashchange browser-state

我在用:

$(window).bind( 'hashchange', function(e) { });
Run Code Online (Sandbox Code Playgroud)

将函数绑定到散列更改事件.这似乎适用于IE8,Firefox和Chrome,但不适用于Safari,我认为不是早期版本的IE.对于这些浏览器,我想禁用使用哈希和hashchange事件的JavaScript代码.

如果浏览器支持该hashchange事件,我可以检测到jQuery的方法吗?也许是jQuery.support......

CMS*_*CMS 68

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

if ("onhashchange" in window) {
  //...
}
Run Code Online (Sandbox Code Playgroud)

也可以看看:

  • 请注意,在IE7兼容模式下运行的IE8报告在窗口中的'onhashchange'为true,即使该事件不受支持 - 来自jQuery Mobile (19认同)

Kev*_*ary 32

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

$( window ).on( 'hashchange', function( e ) {
    console.log( 'hash changed' );
} );
Run Code Online (Sandbox Code Playgroud)

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

  • 这很好用,使用`window.location.hash`来访问当前的哈希. (2认同)

Jam*_*ate 18

有一个hashchange插件,它包含了这里提供的功能和跨浏览器问题.


jam*_*iss 18

解决问题的另一种方法......

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

<script>
    window.onhashchange = doThisWhenTheHashChanges;
</script>
Run Code Online (Sandbox Code Playgroud)

要么

<script>
    window.addEventListener("hashchange", doThisWhenTheHashChanges, false);
</script>
Run Code Online (Sandbox Code Playgroud)

要么

<body onhashchange="doThisWhenTheHashChanges();">
Run Code Online (Sandbox Code Playgroud)

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


Pau*_*Lan 7

试试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;
Run Code Online (Sandbox Code Playgroud)