Javascript 显示但禁用所见即所得按钮
我在一个环境中运行CKEditor,在这个环境中,权限决定了您的内容编辑级别。一个要求是按钮要为每个人显示,但某些按钮的点击事件被禁用 我尝试过许多jQuery解决方案(attr、off、preventDefault、prop等),但都不起作用,至少我是如何尝试的 CKFinder生成的示例HTML,“添加图像”按钮:Javascript 显示但禁用所见即所得按钮,javascript,ckeditor,Javascript,Ckeditor,我在一个环境中运行CKEditor,在这个环境中,权限决定了您的内容编辑级别。一个要求是按钮要为每个人显示,但某些按钮的点击事件被禁用 我尝试过许多jQuery解决方案(attr、off、preventDefault、prop等),但都不起作用,至少我是如何尝试的 CKFinder生成的示例HTML,“添加图像”按钮: <a id="cke_22" class="cke_button cke_button__image cke_button_off " "="" hre
<a id="cke_22"
class="cke_button cke_button__image cke_button_off " "=""
href="javascript:void('Image')" title="Image" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_22_label" aria-haspopup="false"
onkeydown="return CKEDITOR.tools.callFunction(56,event);"
onfocus="return CKEDITOR.tools.callFunction(57,event);"
onmousedown="return CKEDITOR.tools.callFunction(58,event);"
onclick="CKEDITOR.tools.callFunction(59,this);return false;">
<span class="cke_button_icon cke_button__image_icon"> </span>
<span id="cke_22_label" class="cke_button_label cke_button__image_label">Image</span>
</a>
我在他们的文档中找不到CKEditor解决方案,但我可能遗漏了一些内容。如果一些额外的Javascript可以破坏链接,我愿意在CKEditor之外进行修复。如果您觉得足够的话,以图像为例,您可以简单地取消所有处理程序。我不知道CKE是否真的定期恢复它们,但如果不是,您可以这样做
jQuery('.cke_button__image')
.attr('onkeydown','')
.attr('onmousedown','')
.attr('onclick','');
它在CKEditor演示中工作。如果属性重新出现,只需重复该过程。请注意,这不是一个真正的安全答案。任何半途而废的黑客都会很容易绕过这些限制,但它会满足您的需求。您需要使用CKEditor API来正确地做到这一点。通过jQuery禁用按钮是一个坏主意,因为这样不会阻止键盘快捷键、上下文菜单位置,还会破坏a11y功能(例如,使用键盘导航工具栏将被破坏) 要禁用例如链接和图像功能,请使用以下代码:
CKEDITOR.replace( 'editor1', {
on: {
loaded: function( evt ) {
var editor = evt.editor;
editor.getCommand( 'image' ).on( 'state', function() {
this.disable();
} );
editor.getCommand( 'link' ).on( 'state', function() {
this.disable();
} );
}
}
} );
它确保每个状态更改命令都被禁用
提示:如果您不确定要禁用的命令的名称,请检查
编辑器。commands
对象,这可能会给您一些想法。这是一个更好的解决方案。这是有道理的,但我的日子不好过。CKEDITOR返回数据,但editor.commands显示为空。getCommand文档没有太大帮助。如果我没有做一些明显愚蠢的事情,我可以发布一个新问题。编辑器
不是一个全局变量。您需要从CKEDITOR.instances
object获取它,或者像我在回答中所做的那样,从一个事件侦听器中的evt.editor
获取它。解决了这个问题!看起来CK4和CK3有点不同。我使用了ev.editor.commands.justifyleft.disable()代码>其中justifyleft来自命令列表。我有一个后续问题,但我会标记这接受,因为它让我在那里!