Angular JS 不适用于 IE9,但适用于其他浏览器

Posted

技术标签:

【中文标题】Angular JS 不适用于 IE9,但适用于其他浏览器【英文标题】:Angular JS not working with IE9 but works with other browsers 【发布时间】:2014-12-21 11:03:46 【问题描述】:

所以我正在开发一个小应用程序,它可以从这样的 API url 获取它...... $http.get(s_url) .then(函数(res) ... 我的应用程序适用于 chrome、safari、opera 和 firefox,但在 IE9 中显示空白屏幕 我的 html 或 js 文件中是否缺少某些内容? 这是我在 IE 的 html 文件中的内容...

    <!--[if lte IE 8]>
    <script src="js/json2.js"></script>
    <script>
        document.createElement('ng-include');
        document.createElement('ng-pluralize');
        document.createElement('ng-view');
        document.createElement('x-restrict');
        document.createElement('x-fileupload');
        // Optionally these for CSS
        document.createElement('ng:include');
        document.createElement('ng:pluralize');
        document.createElement('ng:view');
        //customized tags
        document.createElement('location');
        document.createElement('temp');
        document.createElement('image');
        document.createElement('caption');
        document.createElement('temps');
        document.createElement('remtemps');
    </script>
    <![endif]-->
    <div ng-view></div>
</head>

【问题讨论】:

这只处理 IE 8 之前的版本? 我只需要它来处理IE9及更高版本 让我重申一下:您的 sn-p 中的所有代码都没有在 IE9 中运行。这是故意的吗? 啊,是的,我们有它:if lt IE 9 匹配“小于 IE 9”的版本 - 也就是说,它与 if lte IE 8 匹配相同的东西。如果你想在 IE 9 中运行第一个块,它应该只是 if IE 9 【参考方案1】:

我遇到了类似的问题。页面将正确加载,调用 angular 来填充表格。随后单击刷新按钮应调用获取方法,但被浏览器忽略。

解决方案是添加过去 5 秒过期的内容过期标头,然后 IE 将执行 Angular 脚本。

编辑:

如何实现

要添加的标头在HTTP specification 中指定。

我在这里打印了一个固定的时间戳。您当然可以使用日期/时间函数明确设置日期

根据您使用的语言以及托管您的网络服务器,有不同的方法可以做到这一点:

.htaccess 文件:

<filesMatch "\.json">
   Header set Cache-Control "max-age=0, public"
   Header set Expires "Thu, 01 Dec 1994 16:00:00 GMT"
</filesMatch>

-注意两者都不是必需的

如果你使用的是 php

<? header("Expires: Thu, 01 Dec 1994 16:00:00 GMT");
   header("Cache-Control: max-age=0, public");  
?>

如果你使用的是jsp:

<% 
   response.setHeader("Cache-Control: max-age=0, public");
%>

【讨论】:

能否请您提供在过去 5 秒内添加的内容过期标头的具体方式? 我已经用示例代码编辑了我的答案。希望对您有所帮助 谢谢。虽然我使用的是 .NET。我找到了解决方案here。我为每个$http.get 调用添加了一个时间戳,就成功了。 很高兴听到您找到了解决方案 即使我在 IE 【参考方案2】:

尝试在 ng-app 和 ng-view 前加上 data-ng-app、data-ng-view 中的数据。

【讨论】:

谢谢。我将其添加到我的代码中。主要问题是 http.get 方法对 IE 有一些问题,所以我不得不使用 XMLHttpRequest()。

以上是关于Angular JS 不适用于 IE9,但适用于其他浏览器的主要内容,如果未能解决你的问题,请参考以下文章

Class:hover 适用于 Firefox,但不适用于 Chrome 和 IE9

jQuery背景按钮动画适用于Chrome和IE8,但不适用于Firefox或IE9 [重复]

Node.js 应用程序适用于工头,但不适用于 heroku。 404 错误

mirage.js 不适用于 Angular 中的子 url 路径(仅适用于根路径)

Angular CORS 适用于 GET 但不适用于 DELETE

Angular 6 MatSnackBar 适用于 Chrome 但不适用于 IE11