备注:AngularJS 1.3抛弃了对IE8的支持。可以在我们的博客上了解更多内容。AngularJS 1.2将继续支持IE8,但核心团队已经不打算在解决IE8及之前版本的问题上花时间。 本文档介绍了互联网浏览器(IE)在处理自定义HTML标签及属性时的特点。如果你正计划在IE8或更早的浏览器上部署Angular应用请阅读本文。 项目目前支持且将尝试修复IE9以上的bug 。持续集成服务器在IE9,IE10和IE11上运行所有的测试。详细内容参加Travis CI及ci.angularjs.org。 我们不在IE8及之前的浏览器上运行测试。一些AngularJS的功能子集也许能够在在这些浏览器上工作,但这将由你来测试并决定它在你的特定应用上是否工作。 | ![]() Garfielt
|
短版本为确保Angular应用在IE上能够工作请确认: 1. 在IE7或更早的版本上polyfill JSON.stringify。你可以使用JSON2或JSON3来polyfills。
2. 在连接处将id="ng-app"添加到根元素,使用ng-app属性
3. 你不能使用自定义的元素标记,像<ng:view>(使用属性版本<div ng-view>来代替),或 4. 如果你必需要用自定义元素标记,然后你必须采取以下步骤以确保IE8及之前版本都能用:
5. 使用ng-style标记来替代style="{{ someCss }}"。后续的版本能够在Chrome和Firefox下工作但不能在IE版本<=11下工作(在撰写本文时的最新版本)。 | ![]() Garfielt
|
重要部分是:
版本信息IE对非标准的标签元素有很多问题。这些问题可以归为两大类别,每一类别都有自己的解决办法。
| ![]() captain-cao
|
好消息好消息是这些限制仅仅适用于元素标记名称并不适用于元素属性名称。因此,在IE中并不需要特别的处理:<div my-tag your:tag></div> 如果我不这样做,会发生什么?假如你使用HTML的未知标记mytag(my:tag或者my-tag结果是相同的):
应该解析出如下的DOM:
预期的行为是BODY元素有一个mytag子元素,它带有一些文字。 但是在IE中不是这样的(如果没有包含上面的修订)
在IE中,BODY元素有三个子元素: 1,一个自关闭的mytag。例如自关闭标签<br/>。/是可选的,但是<br>标签是不允许有子元素的,浏览器将<br>some text</br>视为三个同辈的标签,而some text并不是<br>的子元素。 2,一个文本节点some text。在上面这应该是mytag的子元素,而不是同辈标签 3.一个损坏的自关闭的/mytag。这是一个损坏的元素因为元素名称是不允许带/字符的。另外,这种子关闭的元素并不是DOM的一部分,它仅仅是用于描述DOM的结构。 | ![]() 地狱星星
|
CSS风格的自定义标记命名
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<
html
xmlns:ng
=
"needed for ng: namespace"
>
<
head
>
<!--[if lte IE 8]>
<script>
// 需要确认ng-include被正常解析
document.createElement('ng-include');
// 需求启用CSS引用
document.createElement('ng:view');
</script>
<![endif]-->
<
style
>
ng\:view {
display: block;
border: 1px solid red;
}
ng-include {
display: block;
border: 1px solid blue;
}
</
style
>
</
head
>
<
body
>
<
ng:view
></
ng:view
>
<
ng-include
></
ng-include
>
...
</
body
>
</
html
>
|
源引:http://www.oschina.net/translate/angularjs-ie-compatibility