document.getElementById 总是 returns "null" 丝带

document.getElementById always returns "null" for ribbons

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

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

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

我已经在表单加载事件中注册了这个脚本。但是问题是,我总是只将 parent.document.getElementById 设为 null。 令人惊讶的是,我能够在浏览器的控制台中看到控件 while 运行 parent.document.getElementById 语句,并且还可以更改样式属性。

任何人都可以提出这里可能有什么问题吗?

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

如有任何帮助,我们将不胜感激。

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

尝试为函数添加延迟 Put a Delay in Javascript

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

为了让它不受支持且丑陋,您可以继续尝试直到成功,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.
}