可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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'; } }