$(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
...
您可以檢測瀏覽器是否支持通過事件:
if ("onhashchange" in window) {
//...
}
參見:
感謝您的迴應。 – 2010-06-22 05:30:59
請注意,在IE7兼容模式下運行的IE8在窗口中'onhashchange'報告爲真,即使該事件不受支持 - 來自jQuery Mobile – Vikas 2011-05-19 06:16:17
我認爲克里斯Coyier具有該散列問題的解決方案,看看他的截屏:
謝謝,我會研究這一點。 – 2010-06-22 05:29:39
請注意,在IE 7和IE 9的情況下,如果statment會爲(窗口中的「onhashchange」)賦予true,但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);
}
瀏覽器處理這不是太多嗎?每100毫秒輪詢一次哈希變化? – adardesign 2011-07-06 17:53:26
你的示例代碼使我的IE8警報,直到我打開任務管理器並殺死進程:) – enloz 2011-09-16 03:29:45
這是因爲有一個錯字,而不是「storedHash」使用「prevHash」,它會工作。他基本上使用了一個不同的變量名稱。 – Nick 2013-09-26 05:57:21
一種不同的方法,您的問題...
有到hashchange事件綁定到方法3種方式:
<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'的鏈接,避免需要類添加 – tobymackenzie 2016-09-21 04:27:11
這個小小的jQuery插件是使用非常簡單:https://github.com/finnlabs/jquery.observehashchange/
使用Modernizr檢測特徵能力。通常jQuery提供檢測瀏覽器功能:http://api.jquery.com/jQuery.support/。但是,hashchange不在列表中。
wiki of Modernizr提供了一個庫列表,用於向舊瀏覽器添加HTML5功能。 list for hashchange包含一個指向項目HTML5 History 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);
}
怎麼樣用不同的方式代替哈希事件並且像popstate一樣聽popstate。
window.addEventListener('popstate', function(event)
{
if(window.location.hash) {
var hash = window.location.hash;
console.log(hash);
}
});
這種方法在我到目前爲止嘗試過的大多數瀏覽器中工作正常。
Popstate甚至比hashchange更新。例如,它在IE <10中不被支持。 – 2015-12-30 18:34:53
如果有人需要它,2017年更新的答案是onhashchange
在所有主流瀏覽器中都得到很好的支持。詳情請參閱caniuse。要與jQuery使用它無需插件:
$(window).on('hashchange', function(e) {
console.log('hash changed');
});
偶爾我會遇到地方仍在使用hashbang URL的遺留系統,這是很有幫助的。如果您正在構建新的內容並使用哈希鏈接,我強烈建議您考慮使用HTML5 pushState API。
這個效果很好,使用'window.location.hash'來訪問當前散列。 – 2018-03-08 10:16:56
[jQuery hashchange事件](http://benalman.com/projects/jquery-hashchange-plugin/) - 即使在IE8中,jQuery插件也是完美的。 +它很容易使用:) – enloz 2011-09-16 03:38:59