2016-07-18 8 views
3

Ruby의 모든 링크에 "target blank"를 추가하기 위해 HTML을 포스트 프로세스하는 방법은 무엇입니까?Ruby의 모든 링크에 "target blank"를 추가하기 위해 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