这是一个模拟聊天的简单应用。我提供jsfiddle:
http://jsfiddle.net/LkqTU/2785/
来自服务器的一些消息,由按钮模拟,以及用户在键盘事件上键入的textarea上输入密码并发送消息。
嗯,这在Chrome和Firefox中运行良好,但在IE9中失败。
可能出现什么问题?
由于
答案 0 :(得分:2)
嗯,找到错误相对容易:在模型函数开头就将this
分配给名为self
的外部变量看起来不正确。
解释为什么它在Chrome和Firefox中运行良好但在IE中失败的原因更为有趣。变量self
显然是指window.self
,它实际上是window
对象的特殊属性 - 引用... window
本身(MDN)。
Internet Explorer实际上因其对此属性的特定处理而闻名:在其他浏览器中window === window.self
评估为true
,在IE中为false
。我不会说IE没有任何推理就做到了;查看此discussion以获取一些详细信息。
具有讽刺意味的是,在这个特殊的例子中,IE结果证明是半英雄。 )我说“英雄”,因为IE是唯一不允许你覆盖window.self
的浏览器。所有其他人都不那么挑剔;将console.log(window.self)
添加到脚本的末尾以见证他们的耻辱。 )
我说“一半”,因为IE可能会更多......英雄气概。 )而不是静默地忽略window.self = ...
行(并且以稍微不同的方式为那些使用被忽略的赋值的那条远处的行抛出一个错误),为什么IE不给出预警?该死的,甚至通知都会这样做。
反正。很容易不依赖IE的零星英雄主义来做这些事情:只需在脚本的开头添加'use strict'
行,瞧! Chrome和Firefox都会在self = this
行的位置向其发出“参考错误”警告。 )
是的,我明白'使用严格'使用并不是一个简单的步骤,它可能会破坏一些脚本;然而,我完全支持Nicholas Zakas'statement关于该主题。