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

  这篇文章主要介绍了测试IE浏览器对JavaScript的AngularJS的兼容性的方法,尽管随着Windows10的近期上市,IE浏览器即将成为历史...需要的朋友可以参考下

  短版本

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

 

  1. 在IE7或更早的版本上polyfill JSON.stringify。你可以使用JSON2或JSON3来polyfills。

?

1
2
3
4
5
6
7
8
9
10
11

<!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属性

?

1
2
3
4

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

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

4. 如果你必需要用自定义元素标记,然后你必须采取以下步骤以确保IE8及之前版本都能用:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

<!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结果是相同的):

?

1
2
3
4
5
6

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

 

应该解析出如下的DOM:

?

1
2
3
4
5

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

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

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

?

1
2
3
4
5
6

#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的命名空间。

?

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>

 

时间: 2024-10-07 15:26:54

测试IE浏览器对JavaScript的AngularJS的兼容性的相关文章

在JavaScript的AngularJS库中进行单元测试的方法

这篇文章主要介绍了在JavaScript的AngularJS库中进行单元测试的方法,主要针对AngularJS中的控制器相关,需要的朋友可以参考下 开发者们都一致认为单元测试在开发项目中十分有好处.它们帮助你保证代码的质量,从而确保更稳定的研发,即使需要重构时也更有信心. 测试驱动开发流程图 AngularJS的代码声称其较高的可测性确实是合理的.单单文档中列出端对端的测试实例就能说明.就像AngularJS这样的项目虽然都说单元测试很简单但真正做好却不容易.即使官方文档中以提供了详尽的实例,但

为IE浏览器的javascript提速

 随着现在网页设计越来越多的应用javascript技术,而且浏览器的Javascript引擎运行速度也成为各大浏览器比拼性能的重要指标,各家浏览器厂商皆宣称他们的浏览器速度更快,希望搅动现存的竞争态势.IE8浏览器的Javascript运行速度虽然相对于IE7以及IE6有着很大的提升,但相对于Webkit引擎的浏览器还是有一定的差距,在去年的ZDNET Javascript测试上Chrome浏览器表现突出,一举击败Firefox.Safari和微软的IE浏览器.不过因为IE浏览器相对庞大的使用

如何搭建自动化、跨浏览器的 JavaScript 单元测试

本文讲的是如何搭建自动化.跨浏览器的 JavaScript 单元测试, 我们都知道在各个不同的浏览器环境里测试代码是很重要的,并且在大多数时候,我们这些 Web 开发者在这一点上还是做的不错的 -- 至少在第一次发布项目的时候是这样. 然而我们每次更改代码之后的测试工作,却做的不尽人意. 我深切地知道我本人就是这样的 -- 我早就把"学习怎样搭建自动化.跨浏览器的 JavaScript 单元测试"写在 To-do List 上了,但每当我坐下来想要真正的去解决这个问题的时候,我却不得不

详解JavaScript的AngularJS框架中的作用域与数据绑定_AngularJS

AngularJS 简介AngularJS 是由 Google 发起的一款开源的前端 MVC 脚本框架,既适合做普通 WEB 应用也可以做 SPA(单页面应用,所有的用户操作都在一个页面中完成).与同为 MVC 框架的 Dojo 的定位不同,AngularJS 在功能上更加轻量,而相比于 jQuery,AngularJS 又帮您省去了许多机械的绑定工作.在一些对开发速度要求高,功能模块不需要太丰富的非企业级 WEB 应用上,AngularJS 是一个非常好的选择.AngularJS 最为复杂同时

探析浏览器执行JavaScript脚本加载与代码执行顺序_javascript技巧

本文主要基于向HTML页面引入JavaScript的几种方式,分析HTML中JavaScript脚本的执行顺序问题 1. 关于JavaScript脚本执行的阻塞性 JavaScript在浏览器中被解析和执行时具有阻塞的特性,也就是说,当JavaScript代码执行时,页面的解析.渲染以及其他资源的下载都要停下来等待脚本执行完毕①.这一点是没有争议的,并且在所有浏览器中的行为都是一致的,原因也不难理解:浏览器需要一个稳定的DOM结构,而JavaScript可能会修改DOM(改变DOM结构或修改某个

渗透测试专用浏览器Sandcat 4.0版本发布

官方对Sandcat浏览器的评价是"轻量级,快速且易于扩展."498)this.w idth=498;' onmousewheel = 'javascript:return big(this)' style="width: 442px; height: 317px" border="0" alt=" 渗透测试专用浏览器Sandcat 4.0版本发布" src="http://s1.51cto.com/wyfs01/M

判断网页浏览器支持javascript的方法

javascript|浏览器|网页 许多网站需要客户端做许多复杂的工作,比如:用客户端 JavaScript 进行数据合法性校验,这需要客户浏览器的 JavaScript enabled:使用 Session 变量记录身份等信息,需要浏览器 Cookies enabled.因此,有必要确定用户浏览器中的这些选项被打开.在我的网站中,我使用了一串简洁的代码实现这些功能,在用户登录时进行检查,如果不符合就不让登录.在本文中,我就介绍一下这个login页面的写法. 我们首先用 JavaScript 建

使浏览器实现JavaScript支持的方法解析

一.基本的JavaScript 开发环境 JavaScript Reference与JavaScript API: JavaScript Reference是用于建立包含JavaScript runtime的Library或 DLL,然后编译成小的 "shell" 程序,连接Library后生成交互式的JavaScript解释器,也可以用来解释.js 文件. 该程序不依赖Navigator代码. 生成的"shell" 程序,对比浏览器对JavaScript的支持,相

让浏览器实现JavaScript支持的方法解析

一. 基本的JavaScript 开发环境 JavaScript Reference与JavaScript API: JavaScript Reference是用于建立包含JavaScript runtime的Library或 DLL,然后编译成小的 "shell" 程序,连接Library后生成交互式的JavaScript解释器,也可以用来解释.js 文件. 该程序不依赖Navigator代码. 生成的"shell" 程序,对比浏览器对JavaScript的支持,