我有2个使用来自TrustPilot的相同json提要的插件但是一个使用1.2.0而另一个使用1.0.3
目前我的项目使用的是Angular 1.2.0,该浏览器适用于IE 11以外的所有浏览器(有趣的是它可以在IE10及以下版本上运行)。当使用IE 11时,没有任何内容填充,我也没有收到任何错误消息。
但是当我将Angular切换到1.0.3时,它确实可以在IE 11及更低版本上运行。
我很想知道为什么会发生这种情况,我可以使用1.2.0和我当前的逻辑在IE 11中使用它。
Plnkr using 1.2.0 - (在IE11中无效)
Plnkr using 1.0.3 - (在IE11中有效,此处代码来自link)
注意:请不要回答说我应该使用
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE10">.
答案 0 :(得分:1)
它在IE11中使用AngularJS 1.2.0的原因是由于一个错误。
它已在AngularJS 1.2.2 中修复。
您可以访问以下部分旁边的链接,在changelog中详细了解该内容:
$ httpBackend:只有IE8及以下版本不能将script.onload用于JSONP
基本上在IE11中,内部API已更改,不再使用onreadystatechange
事件,就像之前的IE版本一样。
它适用于AngularJS 1.0.3和IE11的原因只是一个幸运的副作用。
AngularJS 1.0.3中的浏览器嗅探器无法正确检测IE版本,可能是因为IE11尚未在开发Angular版本时发布。
这导致在下面的代码中(从1.0.3开始)将执行else块而不是msie
:
if (msie) {
script.onreadystatechange = function() {
if (/loaded|complete/.test(script.readyState)) doneWrapper();
};
} else {
script.onload = script.onerror = doneWrapper;
}
因为在IE11中onreadystatechange
的使用被替换为onload
- 它会起作用。
最简单的解决方案是将AngularJS从 1.2.0 升级到 1.2.2 。