修改confluence的body元素

Modify Confluence's body element

本文关键字:元素 body confluence 修改      更新时间:2023-09-26

为什么在Confluence中不起作用:

AJS.$("body").attr("onload", AJS.$("body").attr("onload") + " myFunction()");

我想将我自己的函数附加到body元素的onload属性,但是当我将这段代码添加到Main Layout时,Confluence忽略了它。当我使用Chrome调试器尝试此代码时,它工作得很好。

编辑:我想我应该更清楚一点:上面的代码似乎工作时,汇流页面加载的第一次。但是当页面进入编辑模式时,不执行自定义脚本。

作为一般规则,等待直到整个页面加载完毕。在某些情况下,特别是当插件操纵DOM时,您可能不得不在脚本运行之前放置一到两秒的延迟。

使用JQuery:

{html}   
<script type="text/javascript"> 
AJS.$(document).ready(function() {
    AJS.$("#comments-section").hide();
});   
</script>
{html}  
使用JavaScript:

{html}
<script type="text/javascript">
function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            if (oldonload) {
                oldonload();
            }
            func();
        }
    }
}
addLoadEvent(function() {
   var ele = document.getElementById("comments-section");   
   ele.style.display = "none";;
}) 
</script>
{html}

嗯,这可能取决于很多事情。例如,当onload处理程序想要执行myFunction时,它是否已经可用。

但是你为什么不用一种更标准的方式来实现呢?

AJS.$(document).ready(myFunction);

或者如果你真的想对加载事件做出反应

AJS.$(document).load(myFunction);

根据与Atlassian开发人员的讨论,"在加载页面时执行函数的正确方法是:AJS.$(function($){…你的代码…});"

这对于初始页面加载确实有效,但当页面进入编辑模式时,这不会被执行。