IE Edge Angular 1.0.3 vs 1.2.0未显示结果JSON Feed

时间:2015-10-30 18:10:53

标签: javascript json angularjs internet-explorer

我有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">.

1 个答案:

答案 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