如果它是外部 link,我如何将 rel = "nofollow" 添加到 CKEditor 中的 link

How can I add rel = "nofollow" to a link in CKEditor if it's an external link

我想将 rel="nofollow" 提供给我的外部 link,其内容由 ckeditor 管理。

example.com = 我的网站

externallink.com = 任何外部 link

例如:

<p>
    Lorem <a href="https://example.com/an-article.html">ipsum</a> dolar
    <a href="http://externallink.com/example.html" rel="nofollow">sit</a> amet.
</p>

这个解决方案:

editor.dataProcessor.htmlFilter.addRules(
{
    elements :
    {
        a : function( element )
        {
            if ( !element.attributes.rel )
                element.attributes.rel = 'nofollow';
        }
    }
});

from 将 nofollow 添加到所有 a 元素。

如何只过滤外部 links?

还有关于 CKEditor 数据处理器的深度文档:http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Data_Processor


注意:Whosebug 的文本编辑器使用这些问题的答案。检查此问题中两个 link 的 rel 属性。


我在我的页面上使用来自 cdn 的 <script src="//cdn.ckeditor.com/4.5.10/standard/ckeditor.js"></script>

所以你需要比较主机,像这样的东西应该可以。

a : function( element )
    {
        if ( element.host !== window.location.host ) {
            element.attributes.rel = 'nofollow';
        }
    }

我解决了;

CKEDITOR.on('instanceReady', function(ev) {
        var editor = ev.editor;
        editor.dataProcessor.htmlFilter.addRules({
                elements : {
                    a : function( element ) {
                        if ( !element.attributes.rel ){
                           //gets content's a href values
                            var url = element.attributes.href;
                           //extract host names from URLs 
                            var hostname = (new URL(url)).hostname;
                            if ( hostname !== window.location.host && hostname !=="youranothersite.com") {
                                element.attributes.rel = 'nofollow';
                            }
                        }
                    }
                }
            });
    })

此解决方案也适用于 Internet Explorer:

CKEDITOR.on('instanceReady', function(ev) {
    var editor = ev.editor;
    editor.dataProcessor.htmlFilter.addRules({
        elements : {
            a : function( element ) {
                if ( !element.attributes.rel ){
                    //gets content's a href values
                    var url = element.attributes.href;

                    //extract host names from URLs (IE safe)
                    var parser = document.createElement('a');
                    parser.href = url;

                    var hostname = parser.hostname;
                    if ( hostname !== window.location.host) {
                        element.attributes.rel = 'nofollow';
                        element.attributes.target = '_blank';
                    }
                }
            }
        }
    });
})

一定要检查主机名的空值和相对路径,不要为“tel:+70000000000”或“mailto:email@[”之类的链接添加 target='_blank' 和 rel='nofollow' =14=]"

CKEDITOR.on('instanceReady', function (ev) {
    var editor = ev.editor;
    editor.dataProcessor.htmlFilter.addRules({
        elements: {
            a: function (element) {
                var url = element.attributes.href;
                var parser = document.createElement('a');
                parser.href = url;
                var hostname = parser.hostname;
                if (hostname && hostname !== "localhost" && hostname !== window.location.host) { // если внешняя ссылка
                    if (!element.attributes.target)
                        element.attributes.target = '_blank';
                    if (!element.attributes.rel)
                        element.attributes.rel = 'nofollow';
                }
            }
        }
    });
});