2016-06-15 12 views
1

私はPageDown.jsを使用してStackOverflowのようなマークダウンスタイルの生のHTMLを作成しています。私のコードはnodejsで次のようになります。PageDown.jsの外部リンクにrel = "nofollow"属性を追加するにはどうすればよいですか?

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

は今、私はすべての外部リンクにrel="nofollow"を追加する必要があります。残念ながら私はPageDown自体の能力を見ることはできません。

すべての外部リンクにref="nofollow"属性を追加するソリューションを教えてください。すべてのリンクが外部にある場合

+0

それはJSを使用して、クライアント側の 'refが= "nofollowを" を'追加するには、ほとんど意味がありません。この属性は、HTMLを解析してスクリプトを実行しないwebbotのためのものです。人間の訪問者は違いを見ることはできません。 –

+0

WebbotがJavaScript – Erik

答えて

0

あなたは単に

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

を使用することができたり、あなたが必要なものをやって変更することができますMarkdown.Converter.jsにwriteAnchorTagと呼ばれる機能があります。

更新

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

を答えてくれないので、クライアント側で 'ref =" nofollow "を追加できません。残念ながら、すべてのリンクが外部になるわけではないので、私はこのケースをチェックし、 'rel =" nofollow "'を追加するかどうかを決定する必要があります。 pagedownのコードを変更せずにそれを達成するためのフックやアプローチはありますか? – Erik

+0

フックがないようです。すべての外部リンクが* http *で始まっていれば '... replace( 'href =" http'、 'rel = "nofollow" href = "http'); ' – Molda

+0

Hmm。面白い。ですから、私の内部リンクは '/'で始まりますが、httpやhttpsを持つ外部のものはすべて始めるべきですか? – Erik

関連する問題