首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SharePoint2013博客( SyntaxHighlighter )上使用SyntaxHighlighter?

如何在SharePoint2013博客( SyntaxHighlighter )上使用SyntaxHighlighter?
EN

Stack Overflow用户
提问于 2014-12-08 15:50:09
回答 2查看 989关注 0票数 4

我试图允许在SharePoint2013博客站点( SyntaxHighlighter门户)上使用SyntaxHighlighter突出显示代码。

下面是我在主页头中放进的代码(js和css重新加载源之前已经加载):

代码语言:javascript
复制
<script type="text/javascript">
    function sh(){
        SyntaxHighlighter.highlight();
    };

    // executed when SP load completes
    _spBodyOnLoadFunctionNames.push("sh");
</script>

_spBodyOnLoadFunctionNames应该提供一种在加载页面事件之后运行函数的机制,但它似乎从未被执行过。从developper工具(控制台)运行我的sh函数正如期而至。

有谁有线索吗,我用的是正确的事件吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-11 09:51:00

+Vadim Gremyachev的答案在IE中是有效的,但是对chrome无效,下面是我使用过的解决方法(从https://stackoverflow.com/a/2956980/381149中得到灵感):

代码语言:javascript
复制
function sh(){
    SyntaxHighlighter.highlight();
};

function setIntervalX(callback, delay, repetitions) {
    var x = 0;
    var intervalID = window.setInterval(function () {

       callback();

       if (++x === repetitions) {
           window.clearInterval(intervalID);
       }
    }, delay);
}

$(document).ready(function () {
    if( $('.syntaxhighlighter').length == 0 ){
        setIntervalX(function() { sh() }, 1000,5);
}

$("a").on("click",function () {
if( $('.syntaxhighlighter').length == 0 ){
    setIntervalX(function() {
      sh()
    }, 1000,5);
}
return true;
});

});
票数 1
EN

Stack Overflow用户

发布于 2014-12-08 21:51:21

_spBodyOnLoadFunctionNames数组在init.js中声明(它是SharePoint JavaScript库的一部分)

根据init.js

代码语言:javascript
复制
AttachEvent("DOMContentLoaded", _spBodyOnLoadWrapper, document);
window.onload = _spBodyOnLoadWrapper;

哪里

代码语言:javascript
复制
function _spBodyOnLoadWrapper() {
    ExecuteOrDelayUntilScriptLoaded(ProcessDefaultOnLoad, "core.js");
    //the remaining code is omitted for clarity..
}


function ProcessDefaultOnLoad() {
    ProcessOnLoadFunctionNames(_spBodyOnLoadFunctionNames);
    //the remaining code is omitted for clarity..
}
function ProcessOnLoadFunctionNames(onLoadFunctionNames) {
    if (onLoadFunctionNames != null) {
        for (var i = 0; i < onLoadFunctionNames.length; i++) {
            var expr = "if(typeof(" + onLoadFunctionNames[i] + ")=='function'){" + onLoadFunctionNames[i] + "();}";

            eval(expr);
        }
        onLoadFunctionNames = [];
    }
}

总之,指定的方法是在加载页事件之后运行函数的适当的机制。

事实上,它对我来说很好(见下图)。

确保在初始化init.js之前加载了_spBodyOnLoadFunctionNames库。

或者,您可以尝试以下方法:

代码语言:javascript
复制
<script type="text/javascript">
    function sh(){
        SyntaxHighlighter.highlight();
    };

    ExecuteOrDelayUntilScriptLoaded(sh, "core.js");
</script>

结果

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27361648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档