Rails: Mở liên kết trong tab mới (với 'link_to')


139

Tôi có mã này:

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

Làm cách nào tôi có thể làm cho nó mở trong một tab mới khi người dùng nhấp vào liên kết?

Câu trả lời:


269

Các target: :_blank tham số phải là một tham số của link_to, trong khi bạn đặt nó trong image_tagcác thông số. Sửa đổi mã của bạn như thế này:

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

Hoặc với một khối:

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

14

Thử cái này:

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

8

Bạn cũng có thể sử dụng target: :_blankthay vì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

Nếu bạn đang tìm cách mở một liên kết trong một tab mới trong html (cho bất kỳ ai đến đây từ Google), thì đây:

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

8
Tôi sẽ không đánh giá thấp bạn, nhưng trang này đặc biệt về link_to của Ruby (từ tiêu đề).
Herb Meehan

1
@HerbMeehan Tôi không chắc có nên upvote hay không, nhưng nó rất hữu ích trong việc giải thích ý target: :_blanknghĩa của nó.
Andrew Grimm

1

Hiểu biết của tôi là: bạn có thể yêu cầu trình duyệt mở một tab mới hoặc một trang web mới. Nhưng điều này phụ thuộc vào cài đặt người dùng. Tôi xem xét câu hỏi này trả lời.

Ngoại trừ tôi rơi vào một cái bẫy khi cần tách biệt các tùy chọn liên kết từ các tùy chọn html:

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

Thí dụ:

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

cảm ơn câu trả lời của bạn, đã tiết kiệm cho tôi 2 giờ gỡ lỗi và thử nghiệm
Carlos J García

1

Để thêm vào câu trả lời trước, định dạng dưới đây là những gì đang được đề xuất bởi rubocop. Đây có thể là một rủi ro bảo mật vì trang được tải sẽ có quyền kiểm soát trang trước đó và có thể thay đổi vị trí của nó cho mục đích lừa đảo.

Để ngăn chặn điều này, bạn cần thêm thuộc tính 'rel' vào mã.

rel: 'noopener'

Bây giờ link_to phải là:

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

tài liệu rubocop

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.