0

パーミッションがコンテンツ編集のレベルを決定する環境でCKEditorを実行しています。1つの要件は、ボタンをすべての人に表示することですが、特定のボタンのクリックイベントは無効になっています。

私は多くのjQueryソリューション(attr、off、preventDefault、propなど)を試しましたが、少なくとも私が試した方法では、どれも機能しません。

CKFinderによって生成されたサンプルHTML、「画像の追加」ボタン:

<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">&nbsp;</span>
    <span id="cke_22_label" class="cke_button_label cke_button__image_label">Image</span>
</a>

彼らのドキュメントでCKEditorソリューションを見つけることができませんが、何かを見逃している可能性があります。余分なJavascriptがリンクを壊す可能性がある場合は、CKEditorの外部で修正することができます。

4

2 に答える 2

1

これを正しく行うには、CKEditorAPIを使用する必要があります。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();
            } );
        }
    }
} );

すべての状態変更コマンドが無効になっていることを確認します。

ヒント:無効にするコマンドの名前がわからない場合は、editor.commandsいくつかのアイデアが得られる可能性のあるオブジェクトを確認してください。

于 2013-03-24T12:42:31.847 に答える
0

画像を例にとると、それで十分な場合は、すべてのハンドラーを単純に削除できます。CKEが実際に定期的に復元するかどうかはわかりませんが、そうでない場合は、次のようなことができます。

jQuery('.cke_button__image')
    .attr('onkeydown','')
    .attr('onmousedown','')
    .attr('onclick','');

CKEditorデモで動作します。属性が再び表示される場合は、手順を繰り返してください。これは実際のセキュリティの答えではないことに注意してください。中途半端なハッカーは、このような制限を簡単に回避できますが、それはあなたの要求を満たします。

于 2013-03-23T01:46:01.423 に答える