You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dynamics 365中ClientGlobalContext.js.aspx加载的jQuery导致Kendo UI失效

彻底解决Dynamics 365中ClientGlobalContext.js.aspx重复加载jQuery导致Kendo UI失效的问题

我之前在Dynamics CRM/365的Web资源中使用Kendo UI时也碰到过类似的版本冲突问题,针对你描述的9.0.2.54版本里ClientGlobalContext.js.aspx用document.write强制加载jQuery且不做存在性检测的情况,以下是几个彻底的解决思路:

1. 提前拦截document.write,阻止重复加载jQuery

在引入ClientGlobalContext.js.aspx之前,重写document.write方法,过滤掉它加载jQuery的脚本代码。这样既能保留上下文功能,又不会覆盖你已加载的jQuery版本:

// 这段代码必须放在加载ClientGlobalContext.js.aspx之前执行
const originalDocumentWrite = document.write;
document.write = function(htmlContent) {
    // 检测是否是加载jQuery的脚本标签,可根据实际情况调整匹配规则
    if (!htmlContent.includes('jquery') || !htmlContent.includes('.js')) {
        originalDocumentWrite.call(document, htmlContent);
    }
};

// 之后再引入ClientGlobalContext.js.aspx
// <script src="/ClientGlobalContext.js.aspx" type="text/javascript"></script>

原理:当ClientGlobalContext试图通过document.write插入jQuery脚本时,会被我们的拦截逻辑跳过,从而保留你预先加载的jQuery和Kendo绑定关系。

2. 利用jQuery的noConflict隔离版本冲突

调整资源加载顺序,先让ClientGlobalContext加载自带的jQuery,再加载你需要的jQuery版本并通过noConflict接管,最后初始化Kendo UI:

<!-- 1. 先加载ClientGlobalContext -->
<script src="/ClientGlobalContext.js.aspx" type="text/javascript"></script>

<!-- 2. 加载你自己的jQuery版本 -->
<script src="/WebResources/your-custom-jquery.js" type="text/javascript"></script>
<script type="text/javascript">
    // 释放jQuery控制权,恢复Dynamics自带的jQuery,同时保留自定义版本的引用
    const $ = jQuery.noConflict(true);
</script>

<!-- 3. 加载Kendo UI,它会自动绑定到我们自定义的$变量 -->
<script src="/WebResources/kendo-ui-core.js" type="text/javascript"></script>
<script type="text/javascript">
    // 初始化Kendo组件
    $(document).ready(function() {
        $("#grid").kendoGrid({ /* 配置项 */ });
    });
</script>

优势:彻底隔离两个jQuery版本,既不影响Dynamics内部功能,也能保证Kendo使用你指定的jQuery版本。

3. 采用异步脚本加载,严格控制执行顺序

通过动态创建脚本标签的方式加载资源,确保每一步加载完成后再执行后续代码,避免同步加载导致的顺序问题:

function loadScript(url, callback) {
    const script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = url;
    script.onload = callback;
    document.head.appendChild(script);
}

// 按顺序加载资源
loadScript('/WebResources/your-custom-jquery.js', function() {
    loadScript('/WebResources/kendo-ui-core.js', function() {
        // 先初始化一次Kendo(可选)
        initKendoComponents();
        // 最后加载ClientGlobalContext
        loadScript('/ClientGlobalContext.js.aspx', function() {
            // 恢复自定义jQuery的控制权
            jQuery.noConflict(true);
            // 重新初始化Kendo,确保绑定到正确的jQuery实例
            initKendoComponents();
        });
    });
});

function initKendoComponents() {
    $("#grid").kendoGrid({ /* 你的组件配置 */ });
}

适用场景:如果无法调整静态资源的加载顺序,这种异步加载方式能精准控制每个脚本的执行时机。

4. 提交微软支持工单修复产品缺陷

这个问题本质上是Dynamics 365 9.0.2.54版本中ClientGlobalContext.js.aspx的设计缺陷——没有检测window.jQuery是否已存在就强制加载。你可以通过微软官方支持渠道提交工单,要求修复这个行为,让它仅在未加载jQuery时才注入脚本。这是最根本的解决方式,能避免后续版本再出现类似问题。

内容的提问来源于stack exchange,提问作者jac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:48:52