javascript - 修复 IE8 中的 AngularJS 问题

标签 javascript jquery html angularjs internet-explorer-8

我在 Firefox 上使用 AngularJS 1.2.13(和 JQuery 1.11.0)开发了一个应用程序。它在 Chrome 上也能正常工作。现在是困难的部分。我遵循了一些建议来让它在 IE8 上运行。

当我加载页面时,我目前在开发工具窗口的 JS 控制台中得到非常有用的“[object Error]”(没有别的)。该页面显示下载的原始 html,因此 Angular 基本上什么也做不了。

这是我的 index.html 的顶部:

<!DOCTYPE html>
<html xmlns:ng="http://angularjs.org" id="ng-app" ng-app="DiagApp">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!--[if IE 8]><!--> <meta http-equiv="X-UA-Compatible" content="IE=8" /> <!--<![endif]-->

即使我没有处于怪癖模式(在开发工具窗口中,“文档模式”说的是“IE7 标准”,而不是“怪癖模式”),我仍然得到以下信息:

  [$sce:iequirks] Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks mode.  You can fix this by adding the text <!doctype html> to the top of your HTML document.  See http://docs.angularjs.org/api/ng.$sce for more information.

http://errors.angularjs.org/1.2.13/ $sce/iequirks angular.js,第 3689 行字符 19

因此,我在模块中的配置函数中添加了以下内容,从而解决了这个问题:

$sceProvider.enabled(false);

当我在“脚本”选项卡中查看 HTML 时,它似乎都已正确着色,这表明它已正确验证(我早些时候发现我的 HTML 中有一个拼写错误导致它无法正确着色(一个拼写错误Firefox 和 Chrome 忽略了))。

我设置断点以显示它正在加载我的模块,也在主 Controller 中。这表明它正在加载模块,但它从未影响到我的主 Controller 。我尝试在 angularjs 代码中设置一些断点,但这导致了各种曲折的段落,没有明显的值(value)。

我听说我应该为 <=IE8 使用一些 polyfill,但我只注意到提到了 <=IE7 的 polyfill。

还有什么我可以尝试的吗?

最佳答案

如果您想在 IE8 中支持您的 Angular 应用程序,需要考虑几个因素,即:

  • 您需要对 JSON 进行 polyfil 处理以进行字符串化和解析 旧版 IE 本身不支持的功能
  • 您需要显式创建任何自定义 HTML 元素标签(自定义 IE8 或更低版本不支持 HTML 标签)
  • 你需要摆脱任何杂七杂八的“文档类型”废话你会 需要使用“ng-app”属性(我注意到你已经处理了这个)
  • 你需要为 IE 8 的一些 JS 函数创建 polyfill 本身不支持,例如 'forEach'

从我看到的 HTML(上面)来看,您似乎需要进一步修改 HTML header 才能开始。在我的例子中,我有一个共享的“_Layout.cshtml”页面,我在其中进行了一次且仅一次的以下更改:

<!--[if lte IE 8]>
        @Styles.Render("~/Content/iecss")
        <script src="~/Scripts/Libs/respond.min.js"></script>
        <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7/html5shiv.js"></script>
    <![endif]-->
    <!--[if lt IE 9]>
      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    <!--[if lte IE 8]>
      <script>
        document.createElement('ng-include');
        document.createElement('ng-pluralize');
        document.createElement('ng-view');
        document.createElement('ng:include');
        document.createElement('ng:pluralize');
        document.createElement('ng:view');
      </script>
    <![endif]-->
    <!--[if lt IE 8]>
      <script src="~/Scripts/Libs/json2.js"></script>
    <![endif]-->
    <!--[if lte IE 8]>
        <script>
        document.createElement('my-editor');
        </script>
    <![endif]-->

关于javascript - 修复 IE8 中的 AngularJS 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22208948/

相关文章:

html - 我该如何解决?卡出DIV

javascript - 未捕获的类型错误 : Cannot read property '0' of undefined beqause it is unexistant

javascript - 如何检查 React 中的 prevProps 和 nextProps 是否相同?

html - 在响应式图库中裁剪图像高度

javascript - Tablesorter:无法单击标题中的下拉菜单

jquery selectable - 禁用相应的值

html - 如何显示和隐藏文本框边框

javascript - 如何正确显示表格排序向上/向下箭头?

javascript - 非动态添加元素上奇怪的 CSS 错位

javascript - 照片库 -javascript