-
attachEvent http://msdn.microsoft.com/en-us/library/ms536343(v=vs.85).aspx要求事件前缀为
on
.
- 该方法有不同的大小写。改变
hashchange
in attachEvent
tohashChange
使该事件在 IE8 中运行。
- 使用建议的实现来支持
hashchange
IE7 和其他旧浏览器的实现。
我创建了一个跨浏览器实现,其中添加了hashchange
浏览器的功能,即使是那些这样做的人不支持 https://developer.mozilla.org/en/DOM/window.onhashchange#Browser_compatibility它。后备基于规格 http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#event-hashchange.
//function hashchange is assumed to exist. This function will fire on hashchange
if (!('onhashchange' in window)) {
var oldHref = location.href;
setInterval(function() {
var newHref = location.href;
if (oldHref !== newHref) {
var _oldHref = oldHref;
oldHref = newHref;
hashChange.call(window, {
'type': 'hashchange',
'newURL': newHref,
'oldURL': _oldHref
});
}
}, 100);
} else if (window.addEventListener) {
window.addEventListener("hashchange", hashChange, false);
}
else if (window.attachEvent) {
window.attachEvent("onhashchange", hashChange);
}
注意:此代码适用于一个 hashchange 事件。如果您想添加多种的hashchange
处理程序,使用以下方法。
它定义了两个函数,addHashChange
and removeHashChange
。两种方法都采用函数作为参数。
(function() {
if ('onhashchange' in window) {
if (window.addEventListener) {
window.addHashChange = function(func, before) {
window.addEventListener('hashchange', func, before);
};
window.removeHashChange = function(func) {
window.removeEventListener('hashchange', func);
};
return;
} else if (window.attachEvent) {
window.addHashChange = function(func) {
window.attachEvent('onhashchange', func);
};
window.removeHashChange = function(func) {
window.detachEvent('onhashchange', func);
};
return;
}
}
var hashChangeFuncs = [];
var oldHref = location.href;
window.addHashChange = function(func, before) {
if (typeof func === 'function')
hashChangeFuncs[before?'unshift':'push'](func);
};
window.removeHashChange = function(func) {
for (var i=hashChangeFuncs.length-1; i>=0; i--)
if (hashChangeFuncs[i] === func)
hashChangeFuncs.splice(i, 1);
};
setInterval(function() {
var newHref = location.href;
if (oldHref !== newHref) {
var _oldHref = oldHref;
oldHref = newHref;
for (var i=0; i<hashChangeFuncs.length; i++) {
hashChangeFuncs[i].call(window, {
'type': 'hashchange',
'newURL': newHref,
'oldURL': _oldHref
});
}
}
}, 100);
})();
// Usage, infinitely many times:
addHashChange(function(e){alert(e.newURL||location.href);});