【问题标题】:Why won't AngularJS get invoked in Microsoft Dynamics CRM 2015 in IE11?为什么 AngularJS 不会在 IE11 的 Microsoft Dynamics CRM 2015 中被调用?
【发布时间】:2016-12-09 22:58:59
【问题描述】:

我设置了一个功能区按钮来从我的网络资源中调用一个 html 页面。我将带有此代码的 example.html 页面添加到 webresources(取自 W3 学校):

<!DOCTYPE html>
<html>
<script     src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js">    </script>
<body>

<div ng-app="">

<p>Input something in the input box:</p>
<p>Name : <input type="text" ng-model="name" placeholder="Enter name here">       </p>
<h1>Hello {{name}}</h1>

</div>

</body>
</html>

example.html 页面会在单击时出现,但无论出于何种原因都没有调用 angularJS,并且 {{brackets}} 仍然显示,而不是它们所代表的 angular 变量和函数。完全相同的代码在我插入的其他 html 编译器中肯定可以工作,为什么这在 Dynamics CRM 中不起作用,我怎样才能获得角度来处理我调用的 html 网络资源页面?

附加信息/编辑: https 与 http 已被建议并且没有任何关系; webresource 中带有 angular.js 脚本的实际页面也有同样的问题。发现这只是IE中的问题,特别是使用IE11。在 Chrome 和 Firefox 中按预期工作,但应该支持 IE。

【问题讨论】:

  • 是不是因为你没有任何 JavaScript 代码可以引导你的应用程序???
  • 如果 ng-app 在 html 或 body 标签中(在本例中为 body),它应该会自动引导。
  • 我对 MS Dynamics CRM 不熟悉,但是它是在 https 下运行的吗?如果是这样,您可能需要引用 https CDN,因为 http 引用可能会被阻止。
  • 我已经尝试过 https 调用,也已经将 angular 文件上传到 webresources 并引用了它,但它仍然没有被调用。其他 js 会执行,所以不是 javascript 被阻塞了。我认为 MS Dynamics 比什么都重要。

标签: angularjs html internet-explorer-11 microsoft-dynamics dynamics-crm-2015


【解决方案1】:

想通了!它可以在 Chrome/Firefox 中运行,这很棒,但 IE 是我们的主要客户群,所以它更多的是 IE 问题而不是 Dynamics 或 JS 问题。它是通过 Intranet 兼容性设置在 doc-mode 5 中强制执行的,所以我必须找到一种方法来更新它。

通过将其插入 IIS 网络配置来解决此问题,因此现在一切都按预期工作。作为奖励,它也大大加快了每个人的 CRM 导航的加载时间!

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <clear />
  <add name="X-UA-Compatible" value="IE=edge" />
</customHeaders>
</httpProtocol>
</system.webServer> 

附录

最好使用 IIS 7 在您的网站的 http 响应标头选项中添加一个“X-UA-Compatible”标签,而不是直接操作 Web 配置。

IE 和 Dynamics CRM 中的另一个问题是,添加该标签后,您只能直接为您的 Web 资源上传 html 文件。如果您上传一个并尝试通过文本编辑器进行简单更改,Dynamics 本身将添加自己的元“x-ua-compatible ie=5.0000”标签,叠加在您的 IIS 更改上,但这仅适用于您进入文本事后编辑器,因此必须在本地对您的 html 文件进行简单的更改并再次上传。

【讨论】:

  • 您为什么不直接在 HTML 页面的 head-section 添加适当的元标记?我怀疑微软是否支持你的 IIS 解决方案。
  • 在通过文本编辑器的 IIS 解决方案之前尝试过,当时我意识到这是问题所在并且喜欢表现得怪异,不会这样做。每当您想通过文本编辑器对您的 webresource html 页面进行简单更改时,它都想启动并叠加自己的代码。 例如让浏览器期待一个 html5 页面,只需打开文本编辑器就会立即被覆盖,然后被删除。元标记通过编辑器做同样的事情。最好只上传页面,然后用另一个上传覆盖。
【解决方案2】:

这与 IE 打开 HTML Web 资源作为使用文档模式作为 IE7 标准有关。如果您想查看,IE 会在控制台中报告此消息。我在我的网络资源中添加了以下内容,它解决了这个问题:

<!DOCTYPE html>
<html>
<head>
    <title>My page</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />

【讨论】:

    【解决方案3】:

    两件事:

    • 你没有 head 标签(尽管大多数浏览器可能都能很好地处理这个问题)
    • 您引用的脚本是 http 而不是 https(真正的问题)

    这行得通:

    <!DOCTYPE html>
    <html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
    </head>
    <body>
        <div ng-app="">
            <p>Input something in the input box:</p>
            <p>Name : <input type="text" ng-model="name" placeholder="Enter name here"></p>
            <h1>Hello {{name}}</h1>
        </div>
    </body>
    </html>
    

    【讨论】:

    • 不幸的是,这不起作用。我应该提到我什至还上传了一个角度文件到 webresources 并在内部调用了它,但它仍然没有调用。其他js文件会,所以它不是javascript。你是从 Microsoft Dynamics 做的吗? Dynamics 有什么东西会阻止它在内部与 Angular 兼容吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多