2016-07-18 3 views
3

Rubyのすべてのリンクに「ターゲット空白」を追加するHTMLの後処理方法は?Rubyのすべてのリンクに「ターゲット空白」を追加するHTMLを後処理する方法は?

私は現在Rinku(gem)を使ってテキストを自動リンクしていますが、これはうまくいきます。

しかし、私はHTMLを後処理しており、一部のリンクはすでにリンクであるため、Rinkuで処理されません。

対象の空白属性を追加するにはどうすればよいですか?

application_controller.rb

def text_renderer text 
    AutoHTML.new(text).render 
end 

auto_html.rb

class AutoHTML 
    include ActionView::Helpers 

    def initialize text 
    @text = text 
    end 

    def render 
    text = prepare @text 
    text = auto_link(text) 
    text.html_safe 
    end 

    private 

    def prepare text 
    if text.nil? || text.empty? 
     "" 
    else 
     text 
    end 
    end 

    def auto_link text 
    Rinku.auto_link(text, :all, 'target="_blank"') 
    end 
end 
+0

(HTTPS ://mathiasbynens.github.io/rel-noopener/)あなたは 'target =" _ blank "'を使わないと考えるかもしれません。 – spickermann

答えて

3

私が実装され、鋸山の溶液を実施@spickermann提案:[セキュリティ上の理由]について

def self.a_with_target_blank(body) 
    doc = Nokogiri::HTML(body) 
    doc.css('a').each do |link| 
     link['target'] = '_blank' 
     # To avoid window.opener attack when target blank is used 
     # https://mathiasbynens.github.io/rel-noopener/ 
     link['rel'] = 'noopener' 
    end 
    doc.to_s 
    end 
関連する問題