document.getElementById始终为Ribbon返回“null”

时间:2016-07-25 10:47:37

标签: javascript dynamics-crm crm microsoft-dynamics dynamics-crm-2016

我需要设置表单功能区中其中一个按钮的背景颜色。 Ribbon Workbench不支持这一点,因此我编写了以下javascripts来实现相同目的:

function setOpportunityRibbonsAppearance() {
    var submitToForeCastButton = parent.document.getElementById("opportunity|NoRelationship|Form|sfw.opportunity.Button1.Button");

    if (submitToForeCastButton != null) {
        submitToForeCastButton.style.backgroundColor = "lightyellow";
    }
}

我已在Form Load事件中注册了此脚本。但问题是,我总是将parent.document.getElementById作为null。 令人惊讶的是,我能够在浏览器控制台中运行parent.document.getElementById语句时看到控件,还可以更改样式属性。

有人可以建议这里有什么问题吗?

P.S。 - 我理解不建议在CRM中使用document.getElementById,但是,在尝试更改某些按钮的外观时,我别无选择。

对此有任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:0)

可能是因为您的脚本在页面完全加载之前正在运行。

尝试在函数Put a Delay in Javascript

中添加延迟

答案 1 :(得分:0)

您可以上传带有黄色背景的图标,以保持所有内容。你不会看到黄色的文字,但它可能适合你。简单而标准。

为了保持它不受支持和丑陋,你可以继续尝试直到你做到,setInterval允许重复一个功能:

function setOpportunityRibbonsAppearance() {
    var submitToForeCastButton = null;

    var interval = setInterval(function(){
        submitToForeCastButton = parent.document.getElementById("opportunity|NoRelationship|Form|sfw.opportunity.Button1.Button");

        if(submitToForeCastButton != null) {
            submitToForeCastButton.style.backgroundColor = "lightyellow";        
            clearInterval(interval);
        }
    }, 500); // Every 500ms. Adjust as needed, not too fast or browser will choke.
}