在CKEditor中,如何将链接默认设置为在新窗口中打开并删除目标选项卡?

3
我希望链接默认在新窗口中打开。 我尝试过以下方法:
CKEDITOR.on('dialogDefinition', function ( ev ){
   if(ev.data.name == 'link'){
      ev.data.definition.getContents('target').get('linkTargetType')['default']='_blank';
   }
});

它不起作用。但是我发现如果删除以下这行代码,它就能正常工作。
config.removeDialogTabs = 'image:advanced;image:Link;link:advanced;link:target';

但是现在问题是有一个目标选项卡,允许用户更改链接的目标。
我希望保持编辑器尽可能简单,并且不希望允许用户更改链接目标。然而,我想将默认目标设置为target:_blank。有什么建议吗?谢谢!
5个回答

5

看起来,如果您删除目标选项卡,则无法将默认值更改为“新窗口”。

但是,您可以从目标列表中删除除“新窗口”以外的所有选项,并将其设置为默认值。

请尝试以下代码:

CKEDITOR.on('dialogDefinition', function(e) {
    if (e.data.name === 'link') {
        var target = e.data.definition.getContents('target');
        var options = target.get('linkTargetType').items;
        for (var i = options.length-1; i >= 0; i--) {
            var label = options[i][0];
            if (!label.match(/new window/i)) {
                options.splice(i, 1);
            }
        }
        var targetField = target.get( 'linkTargetType' );
        targetField['default'] = '_blank';
    }
});

在这种情况下,目标选项卡仍然存在,但只有一个值("新窗口")可供选择,因此用户无法更改此选项。
希望这能帮到你。

对我来说运行良好。谢谢(虽然我什么也不懂……) - Pierre de LESPINAY
从外部粘贴到编辑器中的链接怎么办? - AsGoodAsItGets

1

另一种方法是在onOk函数中提供必要的数据,参见特定提交

您可以在plugins/link/dialogs/link.js中的onOk函数中向数据对象添加目标属性。

onOk: function() {
            var data = {};

            // Collect data from fields.
            this.commitContent( data );


            // Overwrite, always set target="_blank"
            data.target = {
                dependent: "",
                fullscreen: "",
                height: "",
                left: "",
                location: "",
                menubar: "",
                name: "_blank",
                resizable: "",
                scrollbars: "",
                status: "",
                toolbar: "",
                top: "",
                type: "_blank",
                width: ""
            };
     //more code below
     }

1
这里是我如何更新我的链接,使它们在新标签页中打开,而不影响页面上的其他链接,只限于来自ckEditor的链接。这是在Angular中实现的,但你可以根据你的平台使用相同的思路。
我创建了一个管道来转换链接以包含一个目标:
import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'setlinktarget'
})
export class SetLinkTarget implements PipeTransform {

  transform(value: any): any {
    return value.split('<a ').join('<a target="_new"');
  }

}

我随后将管道应用于我的内容:
<div [innerHTML]="myRecord.commentsWithHTML | setlinktarget">

这似乎比其他需要修改 ckeditor 文件的选项要容易得多。希望能帮到某些人。

0
CKEDITOR.on('dialogDefinition', function (ev) { 
   var dialogName = ev.data.name;
   var dialog = ev.data.definition.dialog;
   var dialogDefinition = ev.data.definition;

   if(dialogName == 'link') {
      dialogDefinition.onLoad = function () {
         if(dialogName == 'link'){
             dialogDefinition.getContents('target').get('linkTargetType')['default']='_blank';
         }
         dialog.hidePage( 'target' );                   
    };
}
});

//And configure the below
 config.removeDialogTabs = 'image:advanced;link:advanced;link:upload;';

0

前往 ckeditor/plugins/link/dialogs/link.js 并粘贴以下代码:

/* Here we are latching on an event ... in this case, the dialog open event */

CKEDITOR.on('dialogDefinition', function(ev) {
    try {    
        /* this just gets the name of the dialog */    
        var dialogName = ev.data.name;

        /* this just gets the contents of the opened dialog */
        var dialogDefinition = ev.data.definition;

        /* Make sure that the dialog opened is the link plugin ... otherwise do nothing */
        if(dialogName == 'link') {`enter code here`    
            /* Getting the contents of the Target tab */
            var informationTab = dialogDefinition.getContents('target');

            /* Getting the contents of the dropdown field "Target" so we can set it */
            var targetField = informationTab.get('linkTargetType');

            /* Now that we have the field, we just set the default to _blank
               A good modification would be to check the value of the
               URL field and if the field does not start with "mailto:" or a
               relative path, then set the value to "_blank" */
            targetField['default'] = '_blank';
        }
    } catch(exception) {
         alert('Error ' + ev.message);
    }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接