0

我正在尝试使用 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);

这解决了这个问题,但我不喜欢每次页面运行时都使用超时的想法。

关于如何延迟代码执行直到套件栏准备好的任何想法?

4

2 回答 2

0

根据马特的评论,这有效:

“尝试将您的添加链接变成一个函数并使用 SP.SOD.executeFunc('sp.js','SP.ClientContext', yourFunctionToInsertHere); 我相信这是在您尝试添加之前没有加载的 sp.js它。这应该会延迟你的添加,直到它被加载。

谢谢!

于 2017-11-06T14:45:18.193 回答
0

我认为这是使用自定义操作完成的,但不能确定。

测试它的一种方法是将文件放入 .js 文件中,然后使用 John Liu 构建的出色脚本将其添加为自定义操作。

http://johnliu.net/blog/2015/12/the-safest-future-proof-way-to-brand-your-sharepoint-and-sharepoint-online

另一种方法是使用 PnP PowerShell cmdlet;

Add-PnPJavaScriptBlock -Name SuiteBar -Script '<your code here>' -Sequence 9999 -Scope Site

于 2018-04-19T14:10:21.257 回答