测试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 相关文章推荐
Javascript this关键字使用分析
Oct 21 Javascript
JQuery入门——事件切换之toggle()方法应用介绍
Feb 05 Javascript
jquery选择器大全 全面详解jquery选择器
Mar 06 Javascript
JavaScript事件委托的技术原理探讨示例
Apr 17 Javascript
jquery实现用户信息修改验证输入方法汇总
Jul 18 Javascript
Kindeditor在线文本编辑器如何过滤HTML
Apr 14 Javascript
AngularJS入门教程之双向绑定详解
Aug 18 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
Oct 03 Javascript
canvas 绘制圆形时钟
Feb 22 Javascript
微信小程序sessionid不一致问题解决
Aug 30 Javascript
Node.js系列之连接DB的方法(3)
Aug 30 Javascript
layui写后台表格思路和赋值用法详解
Nov 14 Javascript
使用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
php5 图片验证码实现代码
2009/12/11 PHP
PHP 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
php验证是否是md5编码的简单代码
2014/04/01 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
Smarty缓存机制实例详解【三种缓存方式】
2019/07/20 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
javascript实现网站加入收藏功能
2015/12/16 Javascript
Treegrid的动态加载实例代码
2016/04/29 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
js实现方块上下左右移动效果
2017/08/17 Javascript
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
17个Python小技巧分享
2015/01/23 Python
Python抓取框架Scrapy爬虫入门:页面提取
2017/12/01 Python
Python机器学习之SVM支持向量机
2017/12/27 Python
python批量创建指定名称的文件夹
2019/03/21 Python
对YOLOv3模型调用时候的python接口详解
2019/08/26 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
车辆维修工自我评价怎么写
2013/09/20 职场文书
会计专业大学生求职信范文
2014/01/28 职场文书
中文师范生自荐信
2014/01/30 职场文书
陈胜吴广起义口号
2014/06/20 职场文书
护理工作心得体会
2016/01/22 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
六年级作文之家庭作文
2019/12/12 职场文书
MySql分区类型及创建分区的方法
2022/04/13 MySQL