让 hashchange 事件在所有浏览器(包括 IE7)中工作
我有一些代码(由另一位开发人员编写)正在 WordPress 内部进行 AJAX 页面加载(例如,没有页面重新加载),当您单击导航项时,AJAX 会刷新主要内容区域。我的问题是它在 IE7 中被破坏了,我不知道从哪里开始调试。
最初的开头行是
var queue = 0;
$('document').ready(function() {
window.addEventListener("hashchange", hashChange, false);
// Define window location variables
var windowHost = window.location.host,
windowHash = window.location.hash,
windowPath = window.location.pathname;
但我更改了它们,根据该方法是否存在来使 addEventListener
成为条件。一些研究告诉我,该方法在旧版本的 IE 中不可用(例如我的情况是 7)。此外,IE7 调试控制台将其识别为不可用的方法,因此这一点非常清楚。我按如下方式重写了这些行,但代码仍然无法正常工作:
var queue = 0;
$('document').ready(function() {
if(window.addEventListener) {
window.addEventListener("hashchange", hashChange, false);
}
else if (window.attachEvent) {
window.attachEvent("hashchange", hashchange, false);
}
// Define window location variables
var windowHost = window.location.host,
windowHash = window.location.hash,
windowPath = window.location.pathname;
完整的原始脚本可以在此pastebin中查看: http:// /pastebin.com/Jc9ySvrb
I have some code (written by another developer) that is doing AJAX page loading inside of WordPress (e.g. no page reloads) when you click a nav item, AJAX refreshes the primary content area. My problem is that it's broken in IE7 and I have no idea where to start in terms of debugging.
The original opening lines were
var queue = 0;
$('document').ready(function() {
window.addEventListener("hashchange", hashChange, false);
// Define window location variables
var windowHost = window.location.host,
windowHash = window.location.hash,
windowPath = window.location.pathname;
But I changed them to make the addEventListener
conditional on the basis of whether that method was present or not. Some research told me that the method is not available in older versions of IE (e.g. 7 in my case). Also, the IE7 debug console was identifying that as an unavailable method, so that's pretty clear. I rewrote the lines as follows, but the code is still not working:
var queue = 0;
$('document').ready(function() {
if(window.addEventListener) {
window.addEventListener("hashchange", hashChange, false);
}
else if (window.attachEvent) {
window.attachEvent("hashchange", hashchange, false);
}
// Define window location variables
var windowHost = window.location.host,
windowHash = window.location.hash,
windowPath = window.location.pathname;
The full original script can be viewed in this pastebin: http://pastebin.com/Jc9ySvrb
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
attachEvent
要求事件以on
为前缀。attachEvent
中的hashchange
更改为hashChange
以使该事件在 IE8 中正常工作。hashchange
实现。我创建了一个跨浏览器实现,它将
hashchange
功能添加到浏览器中,甚至那些使用 不支持。后备基于规范。注意:此代码对于一个 hashchange 事件很有用。如果您想添加多个
hashchange
处理程序,请使用以下方法。它定义了两个函数:
addHashChange
和removeHashChange
。两种方法都采用函数作为参数。attachEvent
requires events to be prefixed withon
.hashchange
inattachEvent
tohashChange
to get the event to work in IE8.hashchange
implementation for IE7- and other old browsers.I have created a cross-browser implementation, which adds the
hashchange
feature to browsers, even those who do not support it. The fallback is based on the specification.Note: This code is useful for one hashchange event. If you want to add multiple
hashchange
handlers, use the following method.It defines two functions,
addHashChange
andremoveHashChange
. Both methods take a function as an argument.attachEvent 采用两个参数:
[并且是IE9以下所有版本的IE都需要! :( 请参阅 MDN 参考
]
这可以工作:
当然,如果可能的话,您应该只使用 JQuery,因为它为您封装了所有这些。
一如既往,有一个插件:
http://benalman.com/projects/jquery-hashchange-plugin/
attachEvent takes on two params:
[And is needed for all versions of IE below IE9! :( See MDN reference
]
This could work:
Of course if it is possible, you should just use JQuery, since it encapsulates all this for your.
And as always there is a plugin out there:
http://benalman.com/projects/jquery-hashchange-plugin/