1

我一直在研究无数小时,以找到一个脚本,使我能够在 SP2016 On Prem 中添加指向套件栏的链接。SP2013 有很多解决方案,但它们不适用于 SP2016(样式代码和功能已更改?)。

我找到了一个很好用的,但它在页面加载时有延迟(据报道,这是该脚本的一个常见问题)。我在 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>

表观修复添加指向共享点套件栏的链接 - 首次加载失败

尝试将您的添加链接变成一个函数并使用

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

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

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

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

非常感谢,朱莉-)

4

2 回答 2

1

我这样做的方式,我是在你链接到的问题中回答它的马特,我是用户 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,那么我相信还有其他的时间解决方法。

于 2018-04-25T18:22:43.057 回答
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>
于 2018-04-24T08:46:17.627 回答