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

匿名 (未验证) 提交于 2019-12-03 01:06:02

问题:

i want to give rel="nofollow" to my external links which its content managed by ckeditor.

example.com = my site

externallink.com = any external link

For example:

<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> 

This solution:

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

from https://stackoverflow.com/a/6930940/1848929 adds nofollow to all a elements.

How can i filter only external links?

Also deep doc about CKEditor Data Processor: http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Data_Processor


Note: Stackoverflow's text editor using these question's answer. Check two links' rel attribute in this question.


I'm using <script src="//cdn.ckeditor.com/4.5.10/standard/ckeditor.js"></script> from cdn on my pages.

回答1:

I solved it like;

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';                             }                         }                     }                 }             });     }) 


回答2:

This solution also works in 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';                     }                 }             }         }     }); }) 


回答3:

So you need to compare hosts, something like this should work.

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!