动态365-Kendo UI中的Web资源被ClientGlobalContext.js.aspx加载的jQuery破坏

问题描述 投票:1回答:1

多年来,我一直在Dynamics CRM的Web资源中使用Kendo UI。我的组件需要使用ClientGlobalContext.js.aspx。在Dynamics 365 Online版本9.0.2.54中,我发现较新版本的ClientGlobalContext.js.aspx加载了自己的jQuery版本,而没有检查是否已经存在。它使用document.write语句执行此操作,因此始终在我的代码之后加载此版本的jQuery。我可以通过使用jQuery加载行注释掉的此调用生成的JavaScript暂时解决此问题,因为大多数实例/上下文特定信息来自xhr请求,该请求属于此页面的一部分,但我正在寻找支持将毫无问题地升级并跨实例工作的解决方案。这些是我想到的选项,我正在寻找关于哪个是最佳的建议以及关于该选项的任何其他指导。我考虑过以下几点:

  • 等待ClientGlobalContext可用然后测试jQuery,如果不存在则使用document.write包含它(不会出现某些版本,并且可以随时停止包含它),一旦jQuery可用,加载剑道并继续我的页面。再说一遍,我没有办法改变微软页面,因为那里有异步调用,这可能会给我带来一个定时器循环 - 我看不出这是不是很难看,但我可能会遗漏一些东西,丑陋或不丑陋可能是最好的选择。
  • 说服Microsoft在重新加载之前检查jQuery,或者在没有jQuery的情况下提供备用支持的文件。由于我没有看到其他人表达这种挫败感,我不认为这是可能的。目前还没有关于Dynamics 365论坛的想法,这是Telerik的建议,但这是一个合理的期望吗?
  • 远离基于jQuery的UI库,因为我永远无法控制Dynamics 365中的整个页面。非常痛苦,因为我知道并且喜欢当前库和jQuery版本我使用的功能还没有在Angular版本中(Kendo Angular)版本将是最容易的迁移,即使我必须学习角度)。我知道这是主观的而不是技术性的,所以我可以删除这个选项,如果它使问题更好,但它是一个选项,并将更难进入项目。
  • 我没有想到的另一个解决方案,请记住Dynamics Web资源功能完全是客户端。我正在使用TypeScript编写并使用npm模块和Webpack,如果这有用的话
javascript jquery kendo-ui dynamics-crm
1个回答
0
投票

jQuery的使用是supported and recommended(在某些情况下)。

我们建议您将jQuery与HTML Web资源一起使用

我不认为与微软提出帮助是不合理的。那说它可能没那么有用;

  • 看来(据我所知)你基本上要求他们改变一些代码 - 当你(或者可能是Telerik)可以改变代码来实现同样的事情时。
  • 即使你确实设法说服他们做出改变,它也可能不会长时间出现在产品中(例如月份)。

它可能会更快,并节省您的时间,只需在您自己的代码中实现修复。

你可能想要考虑的解决方案(在上面的文章中提到)是using jQuery.noConflict。 Scott Durow提出了类似问题here的解决方案。

  1. 确定jQuery库的自定义“命名空间”。我正在使用'xrmjQuery'
  2. 在jquery.js脚本的末尾添加以下行: /* jQuery script goes here */ window.xrmjQuery = jQuery.noConflict(true);
  3. 在jquery_ui.js脚本中(注意' - '已更改为下划线,因为CRM不允许它们在Web资源名称中),请将整个文件包装在以下行中: (function ($,jQuery) { /*! jQuery UI Goes here */ })(window.xrmjQuery,window.xrmjQuery);
  4. 在使用jQuery和jQuery-UI的JavaScript Web资源中,将代码包装在以下内容中: (function($){ // Your Javascript goes here and can reference $ as usual // e.g. var someField = $('#fieldName'); })(window.xrmjQuery);

这种技术称为jQuery的封装和命名空间。

关于可支持性和未来升级。值得记住staying supported means

......你可以(有合理的信心)假设你的实现会;

  • 功能正常。
  • 如果不支持,Microsoft支持将提供帮助。
  • 升级发生时将继续工作(除非功能被弃用 - 这种情况会发生,但通常会提前几年通知)。

我上面链接的第一篇文章和this构成了支持jQuery的上下文,但没有涵盖这种情况的细节。我建议您实施的任何编码解决方案可能会毫无问题地升级。这表示在升级生产之前,Microsoft建议进行测试和验证。

更新Sandbox实例后...测试解决方案和自定义项的更新。

© www.soinside.com 2019 - 2024. All rights reserved.