让AngularJS兼容IE8及其以下浏览器版本的方法
来源:互联网 发布:underscore min.js 编辑:程序博客网 时间:2024/05/16 07:31
本文地址:http://blog.csdn.net/shanglianlm/article/details/52997807
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的功能子集也许能够在在这些浏览器上工作,但这将由你来测试并决定它在你的特定应用上是否工作。
短版本
为确保Angular应用在IE上能够工作请确认:
- 在IE7或更早的版本上polyfill JSON.stringify。你可以使用JSON2或JSON3来polyfills。
<!doctype html> <html xmlns:ng="http://angularjs.org"> <head> <!--[if lte IE 7]> <script src="/path/to/json2.js"></script> <![endif]--> </head> <body> ... </body> </html>
- 在连接处将id=”ng-app”添加到根元素,使用ng-app属性
<!doctype html> <html xmlns:ng="http://angularjs.org" id="ng-app" ng-app="optionalModuleName"> ... </html>
你不能使用自定义的元素标记,像(使用属性版本
来代替),或如果你必需要用自定义元素标记,然后你必须采取以下步骤以确保IE8及之前版本都能用:
<!doctype html> <html xmlns:ng="http://angularjs.org" id="ng-app" ng-app="optionalModuleName"> <head> <!--[if lte IE 8]> <script> document.createElement('ng-include'); document.createElement('ng-pluralize'); document.createElement('ng-view'); // Optionally these for CSS document.createElement('ng:include'); document.createElement('ng:pluralize'); document.createElement('ng:view'); </script> <![endif]--> </head> <body> ... </body> </html>
- 使用ng-style标记来替代style=”{{ someCss }}”。后续的版本能够在Chrome和Firefox下工作但不能在IE版本<=11下工作(在撰写本文时的最新版本)。
重要部分是:
xmlns:ng- 命名空间- 你需要为每一个自定义标签指定一个命名空间。
document.createElement(yourTagName)- 创建自定义标签名 - 因为这只是对旧版本IE的问题,所以你需要指定加载条件。对于每一个没有命名空间并且在HTML中没有定义的标签,你需要提前声明以使得IE识别。
版本信息
IE对非标准的标签元素有很多问题。这些问题可以归为两大类别,每一类别都有自己的解决办法。
如果标签名以my:开头那么他会被当做XML命名空间并且必须有对应的命名空间声明
如果标签没有:符号但是不是标准HTML标签,那么必须提前使用document.createElement(‘my-tag’)创建。
I如果你计划用CSS选择器改变自定义标签的样式,那么不管有没有命名空间你都得提前用document.createElement(‘my-tag’)创建.
好消息
好消息是这些限制仅仅适用于元素标记名称并不适用于元素属性名称。因此,在IE中并不需要特别的处理:
如果我不这样做,会发生什么?
假如你使用HTML的未知标记mytag(my:tag或者my-tag结果是相同的):
some text
应该解析出如下的DOM:
#document +- HTML +- BODY +- mytag +- #text: some text
预期的行为是BODY元素有一个mytag子元素,它带有一些文字。
但是在IE中不是这样的(如果没有包含上面的修订)
#document +- HTML +- BODY +- mytag +- #text: some text +- /mytag
在IE中,BODY元素有三个子元素:
1,一个自关闭的mytag。例如自关闭标签
。/是可选的,但是
标签是不允许有子元素的,浏览器将
some text视为三个同辈的标签,而some text并不是
的子元素。
2,一个文本节点some text。在上面这应该是mytag的子元素,而不是同辈标签
3.一个损坏的自关闭的/mytag。这是一个损坏的元素因为元素名称是不允许带/字符的。另外,这种子关闭的元素并不是DOM的一部分,它仅仅是用于描述DOM的结构。
CSS风格的自定义标记命名
为确保CSS选择器能够在自定义元素上工作,自定义元素的名称必须预先使用document.createElement(‘my-tag’)创建,不需顾虑XML的命名空间。
<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.weste.NET/2014/7-3/97624.html
- 让AngularJS兼容IE8及其以下浏览器版本的方法
- 让AngularJS兼容IE8及其以下浏览器版本的方法
- 让AngularJS兼容IE8及其以下浏览器版本的方法
- 兼容IE8及其以下的浏览器
- localstorage兼容ie8以下浏览器的问题
- IE9 以下版本浏览器兼容HTML5的方法
- 让IE8-的浏览器兼容到IE9
- css中的rgba() 兼容IE8以下的浏览器
- 解决Bootstrap不兼容IE8及以下版本的问题
- IE8及以下版本,兼容rgba颜色的半透明背景
- document.getElementsByClassName在ie8及其以下浏览器的兼容性问题
- document.getElementsByClassName在ie8及其以下浏览器的兼容性问题
- 完美解决ie8以下不兼容h5的方法
- vue 为什么不支持 IE8 及其以下版本
- IE8版本以下浏览器升级提醒
- jQuery兼容浏览器IE8方法
- 让ie8以下支持background-size的方法
- 让IE9以下的版本兼容HTML5解决方案
- href
- CentOS yum 安装、卸载MariaDB数据库
- 创建xml
- 前台后台的变量举例
- 一般队列和循环队列及优先级队列的实现
- 让AngularJS兼容IE8及其以下浏览器版本的方法
- Android WebView 播放视频总结
- Android6.0动态权限申请步骤以及需要注意的一些坑
- Kubernetes是什么?
- require.js的用法
- Qt使用opengl报错 解决方法
- Java集合之Queue和Deque接口
- es6学习一
- bootanimation