在某些情况下,我想阻止Sidekick显示在页面上。我尝试了一些事情:
添加jquery onload事件以隐藏sidekick。
$(function() {CQ.WCM.getSidekick().hide()});
这不起作用,因为伙伴还没有加载。
使用超时添加jquery onload事件。
$(function() {
setTimeout(function() {
CQ.WCM.getSidekick().hide();
}, 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
事件,以便在准备就绪时通知我们。
希望这有帮助。