在IE7/8中,$(窗口)和$(文档)有什么区别?


doc = $(document),
win = $(window);
doc.on("click",function(){
    alert("test") //working in all browser
})
//but..
win.on("click",function(){
    alert("test") //not working in ie7 ie8
})

我想知道为什么document在所有浏览器中都能正常工作,但$(window)在IE7或IE8中都不起作用。

$(window)$(document)围绕完全不同的对象的jQuery包装器。功能的差异仅仅是由于 Internet Explorer 中的兼容性问题;window上的某些事件处理程序不起作用,因此请改为将它们放在document上。

只是一个评论...

早在浏览器战争时代,Microsoft和Netscape就为他们的浏览器开发了非常不同的事件模型。W3C在某种程度上对这些进行了标准化,但该标准是两者之间的妥协,双方的许多东西仍然是专有的。

当Netscape消亡时,Mozilla.org 从灰烬中复活并催生了一堆浏览器(Mozilla,Firefox,Camino等)。Mozilla很好地实现了W3C标准,因此Web开发人员在必要时支持W3C标准和IE专有内容。NN专有方法很快就被放弃了,因此迅速减少的Netscape Navigator(NN)用户被抛在了高处,不得不换一个新的浏览器。

另一方面,IE拥有大约95%的用户份额,因此Microsoft决定保留其大部分专有行为,同时在必要时支持标准。顺便说一下,为了生存,Opera在这个时候非常像IE,Mozilla实现了很多IE的东西,出于同样的原因,它与标准没有冲突(还有一些与标准相冲突)。

因此,虽然大多数专有的NN东西消失了,但IE的东西一直徘徊,直到MS认为他们可以抛弃它。即使在最新版本中,仍然有旧的IE专有内容的残余,但其中一些仍然存在。

为了达到今天的成就,需要每个人对标准做出努力。请注意,当IE 6发布时,它很容易成为最符合标准的浏览器(但它在桂冠上停留了太久,这是垄断力量的缺点)。

也许MS说得对,在文档上设置的点击事件不应该冒泡到窗口。但显然这不是大多数编写标准的人所想的,所以他们以不同的方式编写(请注意,MS为Web标准机构做出了贡献,因此它有机会发表意见)。

无论如何,似乎从版本 9 开始,IE 与其他版本一样。据我所知,这种行为直到HTML5(§6.1.6.4事件和窗口对象)才标准化,但我很高兴被证明是错误的。

该窗口与实际的程序窗口有关,而文档与加载页面的 html 页面和内容区域有关。

最新更新