我试图允许在SharePoint2013博客站点( SyntaxHighlighter门户)上使用SyntaxHighlighter突出显示代码。
下面是我在主页头中放进的代码(js和css重新加载源之前已经加载):
<script type="text/javascript">
function sh(){
SyntaxHighlighter.highlight();
};
// executed when SP load completes
_spBodyOnLoadFunctionNames.push("sh");
</script>_spBodyOnLoadFunctionNames应该提供一种在加载页面事件之后运行函数的机制,但它似乎从未被执行过。从developper工具(控制台)运行我的sh函数正如期而至。
有谁有线索吗,我用的是正确的事件吗?
发布于 2014-12-11 09:51:00
+Vadim Gremyachev的答案在IE中是有效的,但是对chrome无效,下面是我使用过的解决方法(从https://stackoverflow.com/a/2956980/381149中得到灵感):
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;
});
});发布于 2014-12-08 21:51:21
_spBodyOnLoadFunctionNames数组在init.js中声明(它是SharePoint JavaScript库的一部分)
根据init.js
AttachEvent("DOMContentLoaded", _spBodyOnLoadWrapper, document);
window.onload = _spBodyOnLoadWrapper;哪里
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库。
或者,您可以尝试以下方法:
<script type="text/javascript">
function sh(){
SyntaxHighlighter.highlight();
};
ExecuteOrDelayUntilScriptLoaded(sh, "core.js");
</script>结果

https://stackoverflow.com/questions/27361648
复制相似问题