SP2016 - 添加到Suite Bar的链接 - 找到部分答案,需要JS专家的帮助

时间:2018-04-23 18:33:12

标签: javascript sharepoint suite

我一直在研究寻找一个脚本,让我能够在SP2016 On Prem中添加指向套件栏的链接。 SP2013有很多解决方案,但它们不能与SP2016一起使用(样式代码n功能改变了?)。

我找到了一个可行的方法但它在页面加载方面存在延迟(这是此脚本的常见问题)。我已经在Stack Exchange的另一个线程上找到了它的答案,但遗憾的是答案是将它包装在一些JS中我只是不知道如何做到这一点,答案没​​有显示完整的脚本所以我回到了正方形1 - (......任何人都可以帮助提供完成的脚本吗?

工作的初始脚本(但页面加载有延迟)

<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>

APPARENT FIX Add link to sharepoint suite bar - fail on first load

尝试将添加链接添加到函数中并使用

SP.SOD.executeFunc('sp.js','SP.ClientContext', yourFunctionToInsertHere); 

我相信在尝试添加之前,sp.js是没有加载的。这应该会延迟你的添加,直到它被加载。 (作者报告说这很有效)

===========================================

如何将此修复程序合并到原始脚本中?

非常感谢,朱莉 - )

2 个答案:

答案 0 :(得分:1)

我这样做的方式,我是在你链接的问题中回答它的Matt,是我用户jquery的$(document).ready(function(){});我的方式完全如下:

$(document).ready(function(){
    SP.SOD.executeFunc('sp.js', 'SP.ClientContext', raiseFunc());
});

function raiseFunc() {
    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);
};

请记住,这是用于处理列表而不是我们为链接或主导航做的事情。我不能保证这会解决你的问题。如果你不能使用jQuery,那么我相信还有其他的工作时间。

答案 1 :(得分:0)

问题似乎是由于DOM未首次加载而未初始化。 所以我加时间来修复它。

<script type="text/javascript">
        var raiseFunc = function () {
    setTimeout(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);
        },500);
    }
        _spBodyOnLoadFunctions.push(raiseFunc);        
    </script>

即使我尝试过SP.SOD.executeFunc,也存在问题。

 <script type="text/javascript">
 SP.SOD.executeFunc('SP.js', 'SP.ClientContext', 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);
            });       
    </script>