Как выполнить постобработку HTML, чтобы добавить «целевой бланк» ко всем ссылкам в Ruby?

html ruby-on-rails ruby post-processing

500 просмотра

1 ответ

410 Репутация автора

Как выполнить постобработку HTML, чтобы добавить «целевой бланк» ко всем ссылкам в Ruby?

В настоящее время я использую Rinku (гем) для автоматической ссылки на текст, и это прекрасно работает.

Однако я занимаюсь пост-обработкой 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
Автор: alejoriveralara Источник Размещён: 18.07.2016 09:07

Ответы (1)


4 плюса

7302 Репутация автора

Я реализовал решение с помощью nokogiri, которое реализует предложения @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
Автор: Alter Lagos Размещён: 09.01.2017 09:26
Вопросы из категории :
32x32