2016-09-09 8 views
0

Я хочу дать rel="nofollow" моим внешним ссылкам, которые его содержимое управляет ckeditor.Как добавить rel = "nofollow" к ссылке в CKEditor, если это внешняя ссылка

example.com = мой сайт

externallink.com = любая внешняя ссылка

Например:

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

из https://stackoverflow.com/a/6930940/1848929 добавляет nofollow всем a элементов.

Как я могу фильтровать только внешние ссылки?

Также глубокий документ о процессоре CKEditor данных: http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Data_Processor


Примечание: текстовый редактор StackOverflow, используя ответ на эти вопросы в. Проверьте атрибут rel в этом вопросе.


Я использую <script src="//cdn.ckeditor.com/4.5.10/standard/ckeditor.js"></script> из cdn на своих страницах.

ответ

0

Я решил это как;

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

Так что вам нужно сравнить хосты, что-то вроде этого должно работать.

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

Но мой админ панель, расположенная в подобласти. например https://panel.example.com, ваше решение включает https://example.com? – hakiko

+0

чем просто hardcode хост, который вы хотите, а не location.host – epascarello

+0

element.host возвращает undefined в консольном журнале – hakiko

0

Это решение также работает в 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'; 
        } 
       } 
      } 
     } 
    }); 
})