2016-06-15 7 views
1

Ich benutze PageDown.js, um rohen HTML in Markdown-Stil wie StackOverflow macht. Mein Code sieht wie folgt in NodeJS:Wie füge ich rel = "nofollow" -Attribut zu externen Links in PageDown.js hinzu?

var saneConv require('./pagedown/Markdown.Sanitizer'), 
    resultHTML = saneConv.makeHtml('[raw html string]'); 

Jetzt brauche ich rel="nofollow" für alle externen Links hinzuzufügen. Leider kann ich diese Fähigkeit in PageDown selbst nicht sehen.

Könnten Sie mir bitte eine Lösung zu ref="nofollow" Attribut zu allen externen Links hinzufügen?

+0

es wenig Sinn 'ref = "nofollow"' auf Client-Seite hinzuzufügen, macht JS verwenden. Dieses Attribut ist für Webbots vorgesehen, die Ihren HTML-Code analysieren und keine Skripts ausführen. Menschliche Besucher können keinen Unterschied sehen. –

+0

Wir können 'ref =" nofollow "' auf der Client-Seite nicht hinzufügen, weil Webbots JavaScript – Erik

Antwort

0

Wenn alle Links extern sind, dann können Sie einfach verwenden

resultHTML = resultHTML.replace('<a ', '<a rel="nofollow" '); 

oder es gibt eine Funktion writeAnchorTag in Markdown.Converter.js genannt, die Sie tun ändern können, was Sie brauchen.

aktualisieren

var jsdom = require("jsdom"); 
var fs = require("fs"); 
var jquery = fs.readFileSync("./path/to/jquery.js", "utf-8"); 

var saneConv = require('./pagedown/Markdown.Sanitizer'), 
    resultHTML = saneConv.makeHtml('[raw html string]'); 

jsdom.env(resultHTML, [jquery], function(err, window) { 
    var $ = window.$; 

    $("a").each(function() { 
     var $a = $(this); 
     var href = $a.attr('href'); 

     // figure out if href is external or internal 
     // let's say if href doesn't contain specific domain it's external so add rel=nofollow 
     if (href.indexOf('example.com') < 0 || href.indexOf('example2.com') < 0) { 
      // it's external, let's add rel=nofollow 
      $a.attr('rel', 'nofollow'); 
     } 
    }); 
}); 
+0

dank der Antwort nicht auswerten. Leider dürfen nicht alle Links extern sein, also muss ich diesen Fall überprüfen und entweder 'rel =" nofollow "hinzufügen oder nicht. Gibt es irgendwelche Haken oder Ansätze, um dies zu erreichen, ohne den Code von Pagedown zu ändern? – Erik

+0

Es scheint keine Haken zu geben. Wenn alle externen Links mit * http * beginnen, dann könnten Sie versuchen, '... ersetzen ('href =" http', 'rel = "nofollow" href = "http');' – Molda

+0

Hmm. interessant. Also sollten alle meine internen Links mit '/' beginnen, aber alle externen mit http oder https? – Erik