测试IE浏览器对JavaScript的AngularJS的兼容性


Posted in Javascript onJune 19, 2015

短版本

为确保Angular应用在IE上能够工作请确认:

1. 在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>

2. 在连接处将id="ng-app"添加到根元素,使用ng-app属性
 

<!doctype html>
 <html xmlns:ng="http://angularjs.org" id="ng-app" ng-app="optionalModuleName">
  ...
 </html>

3. 你不能使用自定义的元素标记,像<ng:view>(使用属性版本<div ng-view>来代替),或

4. 如果你必需要用自定义元素标记,然后你必须采取以下步骤以确保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>

5. 使用ng-style标记来替代style="{{ someCss }}"。后续的版本能够在Chrome和Firefox下工作但不能在IE版本<=11下工作(在撰写本文时的最新版本)。

重要部分是:

  •     xmlns:ng- 命名空间- 你需要为每一个自定义标签指定一个命名空间。
  •     document.createElement(yourTagName)- 创建自定义标签名 - 因为这只是对旧版本IE的问题,所以你需要指定加载条件。对于每一个没有命名空间并且在HTML中没有定义的标签,你需要提前声明以使得IE识别。

版本信息

IE对非标准的标签元素有很多问题。这些问题可以归为两大类别,每一类别都有自己的解决办法。

  •     如果标签名以my:开头那么他会被当做XML命名空间并且必须有对应的命名空间声明<html xmlns:my="ignored">
  •     如果标签没有:符号但是不是标准HTML标签,那么必须提前使用document.createElement('my-tag')创建。
  •     如果你计划用CSS选择器改变自定义标签的样式,那么不管有没有命名空间你都得提前用document.createElement('my-tag')创建.

好消息

好消息是这些限制仅仅适用于元素标记名称并不适用于元素属性名称。因此,在IE中并不需要特别的处理:<div my-tag your:tag></div>
如果我不这样做,会发生什么?

假如你使用HTML的未知标记mytag(my:tag或者my-tag结果是相同的):

<html>
  <body>
   <mytag>some text</mytag>
  </body>
 </html>

 

应该解析出如下的DOM:
 

#document
 +- HTML
   +- BODY
    +- mytag
      +- #text: some text

预期的行为是BODY元素有一个mytag子元素,它带有一些文字。

但是在IE中不是这样的(如果没有包含上面的修订)
 

#document
 +- HTML
   +- BODY
    +- mytag
    +- #text: some text
    +- /mytag

在IE中,BODY元素有三个子元素:

1,一个自关闭的mytag。例如自关闭标签<br/>。/是可选的,但是<br>标签是不允许有子元素的,浏览器将<br>some text</br>视为三个同辈的标签,而some text并不是<br>的子元素。

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>
Javascript 相关文章推荐
使用Mootools动态添加Css样式表代码,兼容各浏览器
Dec 12 Javascript
Knockoutjs快速入门(经典)
Dec 24 Javascript
js 控制下拉菜单刷新的方法
Mar 03 Javascript
Javascript基础教程之关键字和保留字汇总
Jan 18 Javascript
javaScript中定义类或对象的五种方式总结
Dec 04 Javascript
微信小程序 switch组件详解及简单实例
Jan 10 Javascript
Vue.js用法详解
Nov 13 Javascript
web前端vue之CSS过渡效果示例
Jan 10 Javascript
详解Vue.js v-for不支持IE9的解决方法
Dec 29 Javascript
jquery实现二级导航下拉菜单效果实例
May 14 jQuery
js canvas实现5张图片合成一张图片
Jul 15 Javascript
vue3.0实现插件封装
Dec 14 Vue.js
使用ngView配合AngularJS应用实现动画效果的方法
Jun 19 #Javascript
Backbone.js的Hello World程序实例
Jun 19 #Javascript
使用AngularJS处理单选框和复选框的简单方法
Jun 19 #Javascript
详细分析使用AngularJS编程中提交表单的方式
Jun 19 #Javascript
让JavaScript中setTimeout支持链式操作的方法
Jun 19 #Javascript
js控制文本框输入的字符类型方法汇总
Jun 19 #Javascript
详细解读AngularJS中的表单验证编程
Jun 19 #Javascript
You might like
将OICQ数据转成MYSQL数据
2006/10/09 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
PHP MYSQL实现登陆和模糊查询两大功能
2016/02/05 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
JavaScript中的History历史对象
2008/01/16 Javascript
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
2012/01/04 Javascript
JS动态创建Table,Tr,Td并赋值的具体实现
2013/07/05 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
2015/09/23 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
2016/10/10 Javascript
ionic中的$ionicPlatform.ready事件中的通用设置
2017/06/11 Javascript
bootstrapvalidator之API学习教程
2017/06/29 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
Python修改MP3文件的方法
2015/06/15 Python
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
2018/03/29 Python
十分钟利用Python制作属于你自己的个性logo
2018/05/07 Python
Python将文字转成语音并读出来的实例详解
2019/07/15 Python
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
十佳班主任事迹材料
2014/01/18 职场文书
大学秋游活动方案
2014/02/11 职场文书
业务部门经理岗位职责
2014/02/23 职场文书
伊索寓言教学反思
2014/05/01 职场文书
医院党员公开承诺书
2014/08/30 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
采购员岗位职责范本
2015/04/07 职场文书
战马观后感
2015/06/08 职场文书
运动会新闻报道稿
2015/07/22 职场文书
25句企业管理语录:助你迅速打开思路,句句经典!
2020/01/14 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
浅谈PHP7中的一些小技巧
2021/05/29 PHP