我在用:
$(window).bind( 'hashchange', function(e) { });
将函数绑定到哈希更改事件。这似乎可以在IE8,Firefox和Chrome中使用,但不能在Safari中使用,并且我认为不能在IE的早期版本中使用。对于这些浏览器,我想禁用使用哈希和hashchange
事件的JavaScript代码。
jQuery是否可以检测浏览器是否支持该hashchange
事件?也许与jQuery.support
...
我在用:
$(window).bind( 'hashchange', function(e) { });
将函数绑定到哈希更改事件。这似乎可以在IE8,Firefox和Chrome中使用,但不能在Safari中使用,并且我认为不能在IE的早期版本中使用。对于这些浏览器,我想禁用使用哈希和hashchange
事件的JavaScript代码。
jQuery是否可以检测浏览器是否支持该hashchange
事件?也许与jQuery.support
...
Answers:
解决问题的另一种方法...
有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;
我遇到了同样的问题(IE7中缺少hashchange事件)。一种适合我的解决方法是绑定散列更改链接的click事件。
<a class='hash-changer' href='#foo'>Foo</a>
<script type='text/javascript'>
if (("onhashchange" in window) && !($.browser.msie)) {
//modern browsers
$(window).bind('hashchange', function() {
var hash = window.location.hash.replace(/^#/,'');
//do whatever you need with the hash
});
} else {
//IE and browsers that don't support hashchange
$('a.hash-changer').bind('click', function() {
var hash = $(this).attr('href').replace(/^#/,'');
//do whatever you need with the hash
});
}
</script>
$('a[href^="#"]')
获取以href
散列开头的s的链接,而无需添加类
请注意,在IE 7和IE 9的情况下,如果statment为true(在Windows中为“ onhashchange”),但window.onhashchange永远不会触发,因此最好存储哈希值,并每隔100毫秒检查一次它是否更改了适用于所有版本的IE。
if (("onhashchange" in window) && !($.browser.msie)) {
window.onhashchange = function () {
alert(window.location.hash);
}
// Or $(window).bind( 'hashchange',function(e) {
// alert(window.location.hash);
// });
}
else {
var prevHash = window.location.hash;
window.setInterval(function () {
if (window.location.hash != prevHash) {
prevHash = window.location.hash;
alert(window.location.hash);
}
}, 100);
}
用不同的方式代替hash事件并听popstate之类的事情呢。
window.addEventListener('popstate', function(event)
{
if(window.location.hash) {
var hash = window.location.hash;
console.log(hash);
}
});
到目前为止,我在大多数浏览器中都使用过这种方法。
这个小巧的jQuery插件非常易于使用:https://github.com/finnlabs/jquery.observehashchange/
使用Modernizr来检测功能。通常,jQuery提供了检测浏览器功能的方法:http : //api.jquery.com/jQuery.support/。但是,hashchange不在列表中。
Modernizr的Wiki提供了一个库列表,以向旧的浏览器添加HTML5功能。该用于hashchange列表包含一个指向该项目HTML5纪录API,它似乎提供,如果你想仿效旧的浏览器的行为,你需要的功能。
这是@ johnny.rodgers的更新版本
希望可以帮助某人。
// ie9 ve ie7 return true but never fire, lets remove ie less then 10
if(("onhashchange" in window) && navigator.userAgent.toLowerCase().indexOf('msie') == -1){ // event supported?
window.onhashchange = function(){
var url = window.location.hash.substring(1);
alert(url);
}
}
else{ // event not supported:
var storedhash = window.location.hash;
window.setInterval(function(){
if(window.location.hash != storedhash){
storedhash = window.location.hash;
alert(url);
}
}, 100);
}