1

这是一个模拟聊天的简单应用程序。我提供jsfiddle:

http://jsfiddle.net/LkqTU/2785/

一些来自服务器的消息,由按钮模拟,用户在绑定到 keypress 事件的 textarea 上键入以获取输入键并发送消息。

好吧,这在 Chrome 和 Firefox 中运行良好,但在 IE9 中失败。

有什么问题?

谢谢

4

1 回答 1

2

好吧,找到错误相对容易:分配this给在模型函数开头命名的外部变量self看起来不正确。

然而,为什么它在 Chrome 和 Firefox 中运行良好,但在 IE 中失败的解释更有趣。显然 varlessself指的是window.self,这实际上是window对象的特殊属性 - 对...window本身的引用(MDN)。

Internet Explorer 实际上以其对该属性的特殊处理而闻名:而在其他浏览器中window === window.self计算为true,在 IE 中为false. 我不会说 IE 没有任何理由就这样做了。检查此讨论以获取一些详细信息。

具有讽刺意味的是,在这个特殊的例子中,IE 变成了一个半英雄。) 我说的是“英雄”,因为 IE 是唯一不让你覆盖的浏览器window.self。其他的都没有那么挑剔;添加console.log(window.self)到脚本的末尾以见证他们的耻辱。)

我说的是“一半”,因为 IE 可能会更加……英勇。) 而不是默默地忽略window.self = ...行(并以稍微不同的方式使用被忽略的赋值的那条遥远的行抛出错误),为什么 IE 不只是给出早期警告?该死的,即使是通知也可以。

反正。在这些事情上不要依赖 IE 的零星英雄主义是很容易的:只需'use strict'在脚本的开头添加一行,瞧!self = thisChrome 和 Firefox 都会在它所属的地方——在line处吐出一个“参考错误”警告。)

是的,我知道“使用严格”使用不是一个简单的步骤,它可能会破坏一些脚本;但我完全支持 Nicholas Zakas关于该主题的声明

于 2012-09-07T21:57:48.243 回答