在CQ / AEM中,我可以阻止Sidekick显示吗?

时间:2015-05-06 15:02:34

标签: javascript cq5 aem

在某些情况下,我想阻止Sidekick显示在页面上。我尝试了一些事情:

  • 删除init.jsp包含。这有效,但它也阻止加载某些CQ javascript库,我需要这些库。
  • 添加jquery onload事件以隐藏sidekick。

    $(function() {CQ.WCM.getSidekick().hide()});
    

    这不起作用,因为伙伴还没有加载。

  • 使用超时添加jquery onload事件。

    $(function() {
      setTimeout(function() {
        CQ.WCM.getSidekick().hide(); 
      }, 1)
    });
    

    但这不可靠。将超时设置得太低将很有可能失败。设置得太高会导致它出现然后消失,这是不可接受的。

请帮忙!

1 个答案:

答案 0 :(得分:3)

有多种方法可以实现这一目标。

如果你想让sidekick在所有页面中都不可用,只需注释掉init.jsp中可用的以下代码

CQ.WCM.launchSidekick("<%= xssAPI.getValidHref(currentPage.getPath()) %>", {
    propsDialog: "<%= dlgPath == null ? "" : xssAPI.getValidHref(dlgPath) %>",
    locked: <%= currentPage.isLocked() %>
});

如果您希望sidekick仅在特定条件下不可用,您可以收听CQ.WCM类触发的sidekickready事件,如下所示,然后隐藏sidekick。

CQ.Ext.onReady(function(){
    var top = CQ.WCM.getTopWindow();
    if (top.CQ.WCM.isSidekickReady()) {
        top.CQ.WCM.getSidekick().hide();
    } else {
        top.CQ.WCM.on("sidekickready", function(sidekick) {
            sidekick.hide();
        });
    }
});

编辑 - 解释冗长的代码

上述脚本可以在任何组件中使用,而不仅仅是init.jsp

CQ.Ext.onReady是在DOM准备好后执行我们的代码。 CQ.WCM.getTopWindow()获取最顶层的窗口。如果我们的脚本在sidekick准备就绪后执行,那么sidekickready事件已经被触发,因此我们的代码可能无法执行。

因此,我们首先使用top.CQ.WCM.isSidekickReady()检查sidekick是否已经可用,如果不是,我们会将监听器附加到sidekickready事件,以便在准备就绪时通知我们。

希望这有帮助。

相关问题