0

YouTubeの動画を直接埋め込めるようにCKEditorを設定しようとしています...提案されたパッチがあるのを見ましたが、元のCKEditorディストリビューションをそのまま維持したいので、CKEditorを「モンキーパッチ」することは可能かどうか疑問に思っていました.これにより、ユーザーが Flash ダイアログ内に YouTube の URL を入力すると、URL が変換されて埋め込みが可能になります。

私はこれを試しました:

CKEDITOR.on('dialogDefinition', function(ev){
    if (dialogName == 'flash'){
        var infotab = dialogDefinition.getContents('info');
        var f = dialogDefinition.onOk;
        dialogDefinition.onOk = function(ev) {
            var cur = this.getContentElement('info', 'src').getValue();
            var newurl = cur.replace('youtube.com/watch?v=', 'youtube.com/v/'); 
            if (cur != newurl) { 
                this.getContentElement('info', 'src').setValue(newurl);
            };
            f(ev);
       }
    }
}

fしかし、コード内で が使用されてthisおり、私の「パッチ」がそれを変更しているため、機能しません...

4

1 に答える 1

1

onOKの別のプロパティにdialogDefinitionを付けると、そのthis中で正しいと思います (と思います)。

CKEDITOR.on('dialogDefinition', function(ev){
    if (dialogName == 'flash'){
        var infotab = dialogDefinition.getContents('info');
        dialogDefinition.oldOnOk = dialogDefinition.onOk; //change here
        dialogDefinition.onOk = function(ev) {
            var cur = this.getContentElement('info', 'src').getValue();
            var newurl = cur.replace('youtube.com/watch?v=', 'youtube.com/v/');
            if (cur != newurl) { 
                this.getContentElement('info', 'src').setValue(newurl);
            };
           dialogDefinition.oldOnOk(ev); //and change here
       }
    }
}

または使用Function.apply

CKEDITOR.on('dialogDefinition', function(ev){
    if (dialogName == 'flash'){
        var infotab = dialogDefinition.getContents('info');
        var f = dialogDefinition.onOk; 
        dialogDefinition.onOk = function(ev) {
            var cur = this.getContentElement('info', 'src').getValue();
            var newurl = cur.replace('youtube.com/watch?v=', 'youtube.com/v/');
            if (cur != newurl) { 
                this.getContentElement('info', 'src').setValue(newurl);
            };                
            f.apply(this, ev);  //change here
       }
    }
}
于 2011-02-16T21:39:36.377 に答える