Rails: відкрити посилання на новій вкладці (з 'link_to')


139

У мене є цей код:

<%= link_to image_tag("facebook.png", :class => "facebook_icon", :alt => "Facebook", :target => "_blank"),                 
            "http://www.facebook.com/mypage" %>

Як я можу зробити його відкритим на новій вкладці, коли користувач натискає посилання?

Відповіді:


269

target: :_blank Параметр повинен бути параметром link_to, в той час як ви помістіть його в image_tagпараметрах. Змініть код так:

<%= link_to image_tag("facebook.png", class: :facebook_icon, alt: "Facebook"), "http://www.facebook.com/mypage", target: :_blank %>

Або з блоком:

<%= link_to "http://www.facebook.com/mypage", target: :_blank do %>
  <%= image_tag("facebook.png", class: :facebook_icon, alt: "Facebook") %>     
<% end %>  


8

Ви також можете використовувати target: :_blankзамістьtarget: '_blank'

<%= link_to image_tag("facebook.png", class: "facebook_icon", alt: "Facebook"), "http://www.facebook.com/mypage", target: :_blank %>

link_to do

<%= link_to "http://www.facebook.com/mypage", target: :_blank do %>
  <%= image_tag "facebook.png", class: "facebook_icon", alt: "Facebook" %>
<% end %>

3

Якщо ви шукаєте, як відкрити посилання на новій вкладці в html (для всіх, хто прийшов сюди з Google), тут:

<a href="http://www.facebook.com/mypage" target="_blank">Link name</a>

8
Я не збираюся оскаржувати вас, але ця сторінка спеціально стосується Ruby's link_to (з назви).
Герб Механ

1
@HerbMeehan Я не впевнений, чи потрібно подавати заявку, але це корисно для пояснення, що target: :_blankозначає.
Ендрю Грімм

1

Я розумію: ви можете попросити браузер відкрити нову вкладку або новий сайт. Але це залежить від налаштувань користувача. Я вважаю, що це питання відповів.

За винятком того, що я потрапив у пастку, коли потрібно відокремити параметри посилання від параметрів html:

link_to(name = nil, options = nil, html_options = nil, &block)

Приклад:

link_to('Click me', { action: 'show', controller: 'blog', id: 1 }, { target: '_blank' })

дякую за вашу відповідь, врятували мені дві години налагодження та тестування
Carlos J García

1

Щоб додати до попередньої відповіді, наведений нижче формат - це те, що пропонує rubocop. Це може становити загрозу безпеці, оскільки завантажена сторінка матиме контроль над попередньою сторінкою і може змінити своє місцезнаходження для фішингових цілей.

Щоб запобігти цьому, потрібно додати до коду атрибут 'rel'.

rel: 'noopener'

Тепер link_to має бути:

<%= link_to image_tag("facebook.png", class: :facebook_icon, alt: "Facebook"), "http://www.facebook.com/mypage", target: :_blank, rel: 'noopener %>

rubocop docs

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.