12

CKEditor 内にエディター自体が触れず、ユーザーが明示的に変更するまで意図した状態に維持されるコード ブロックを作成することは可能ですか? javascript 変数 (script タグにバインド) とフラッシュ ムービーを入力しようとしましたが、CKEditor は貼り付けたコード/マークアップを書き換え続け、コードを壊します。

私は次の設定で作業しています:

<script type="text/javascript">
  var editor = CKEDITOR.replace("content", {
    height : "500px",
    width : "680px",
    resize_maxWidth : "680px",
    resize_minWidth : "680px",
    toolbar :
    [
      ['Source','-','Save','Preview'],
      ['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print', 'SpellChecker', 'Scayt'],
      ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
      ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
      ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],
      ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
      ['Link','Unlink','Anchor'],
      ['Image','Table','HorizontalRule','SpecialChar']
    ]
  });
  CKFinder.SetupCKEditor( editor, "<?php print url::base(); ?>assets/ckfinder" );
</script>

最も理想的な解決策はclass="preserve"、限られた排他的機能よりもはるかに多くの機能を有効にするタグの内容を保持することだと思います。

更新: この問題の解決策はCKEDITOR.config.protectedSource(). 「preserved」クラスを含むすべてのタグが CKEditor によって触れられないようにするにはどうすればよいですか?

4

3 に答える 3

14

CKEDITOR フォルダーにconfig.jsファイルがあります。それを開いてコードを貼り付けます。

CKEDITOR.editorConfig = function( config ) {
    config.allowedContent = {
        script: true,
        $1: {
            // This will set the default set of elements
            elements: CKEDITOR.dtd,
            attributes: true,
            styles: true,
            classes: true
        }
    };
};

<script>...</script>ソースモードでタグを許可します。

于 2014-07-04T13:44:38.717 に答える
10

提案1:管理者がスクリプト/HTMLコードを入力するための個別のプレーンテキストエリアを作成します。

提案2:管理者がスクリプト/ HTMLコードを配置し、サーバー側でそれらをHTMLコードに変換するために使用できる、[script][/script]またはのようなbbcodeを導入します。保存したコンテンツをCKEditorに表示するときは、サーバー側で最初にbbcodeに変換する必要があります(そうしないと、CKEditorによって削除されます)。または、簡単な方法は、送信されたコンテンツを入力時にデータベースに保存し、ページを表示するときにのみ翻訳を行うことです。[html][/html]<script></script>

提案3class="preserve"CKEditorで削除したくないタグをマークするために使用するため、エディターを初期化するときに次のJavaScript行を追加します。

// protect <anytag class="preserve"></anytag>
CKEDITOR.config.protectedSource.push( /<([\S]+)[^>]*class="preserve"[^>]*>.*<\/\1>/g );
// protect <anytag class="preserve" /><
CKEDITOR.config.protectedSource.push( /<[^>]+class="preserve"[^>\/]*\/>/g );
于 2009-11-18T05:08:21.637 に答える
6

問題はCKEditorではありません。代わりに、問題はサイト自体を実行しているMVC-Engineにありました。コハナには、global_xss_filteringデフォルトで有効になっている構成内があります。これにより、スクリプトタグの送信が防止され、サイトでのスクリプト攻撃が防止されます。この値をに変更すると、フォームでのタグfalseの送信が許可されますが、サイトは非常に深刻な可能性のある潜在的なセキュリティ問題にさらされる可能性もあります。<script>を無効にしないことをお勧めしますglobal_xss_filtering

/* /(system|application)/config/config.php - line 66 */
/**
 * Enable or disable global XSS filtering of GET, POST, and SERVER data. This
 * option also accepts a string to specify a specific XSS filtering tool.
 */
$config['global_xss_filtering'] = FALSE;
于 2009-11-21T01:43:22.660 に答える