我正在尝试使用 JavaScript 将自定义链接添加到 SharePoint 中的套件栏(前提是 SharePoint 2016)。代码工作正常,除了我第一次加载 SharePoint 网站。这里是:
<script>
var raiseFunc = function() {
var link = document.createElement('a');
var linktext = document.createTextNode("Google");
link.href = "http://www.google.ca"
link.setAttribute("class", "o365button o365cs-nav-appTitle o365cs-topnavText");
var span = document.createElement('span');
span.appendChild(linktext);
span.setAttribute("class", "o365cs-nav-brandingText");
link.appendChild(span);
var temp = document.getElementById("Sites_BrandBar");
temp.parentElement.appendChild(link);
};
_spBodyOnLoadFunctions.push(raiseFunc);
</script>
当我刷新页面或浏览时,一切正常。当我从新窗口或标签打开页面时,它只是不起作用。(我禁用了 MDS 功能。)似乎套件栏在代码第一次运行时不可用,即使我使用 _spbodyOnLoadFunctions 技术延迟了我的代码。
有任何想法吗?
更新:根据 Matt 在评论中的建议,我输入了 try/catch 以获取任何错误。没有报告错误,但我确实注意到行为发生了变化。我连续做了大约 20 次测试,有时新链接添加得很好,有时不是,有时它会添加一秒钟然后消失。
我还尝试在此行之前的代码中添加警报:
var temp = document.getElementById("Sites_BrandBar");
延迟是执行使其工作如此清楚,这是一个时间问题。我假设有时代码运行时套件栏还没有准备好。我添加了一个超时作为测试:
setTimeout(function(){
var temp = document.getElementById("Sites_BrandBar");
temp.parentElement.appendChild(link);
}, 500);
这解决了这个问题,但我不喜欢每次页面运行时都使用超时的想法。
关于如何延迟代码执行直到套件栏准备好的任何想法?