Iefans,靠谱的软件下载站

首页 最新文章 最新安卓 最新苹果 浏览器 IE教程 在线图片编辑 最新软件 最新游戏

当前位置: IEfans / IE专区 / IE修复/ 测试IE浏览器对JavaScript的AngularJS的兼容性

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

编辑:秩名2023-06-14 01:30:01

短版本

为确保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
   mytagsome 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标签是不允许有子元素的,浏览器将brsome 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

您可能感兴趣的文章:

  • Angualrjs和bootstrap相结合实现数据表格table
  • bootstrap table实现单击单元格可编辑功能
  • Angularjs+bootstrap+table多选(全选)支持单击行选中实现编辑、删除功能
  • bootstrap table动态加载数据示例代码
  • BootstrapTable refresh 方法使用实例简单介绍
  • bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
  • BootStrap table删除指定行的注意事项(笔记整理)
  • 浏览器兼容性问题大汇总
  • css与javascript跨浏览器兼容性总结
  • window.open()详解及浏览器兼容性问题示例探讨
  • 下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
  • JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
返回旧版Copyright © 1998-2023 www.iefans.net All Rights Reserved 沪ICP备17019769号-18 意见反馈