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
ฉันจะไม่ลงคะแนนคุณ แต่หน้านี้มีเฉพาะเกี่ยวกับทับทิมของ link_to (จากชื่อเรื่อง)
สมุนไพรฮัน

1
@HerbMeehan ฉันไม่แน่ใจว่าจะยกระดับ แต่มีประโยชน์ในการอธิบายความtarget: :_blankหมาย
Andrew Grimm

1

ความเข้าใจของฉันคือ: คุณสามารถขอให้เบราว์เซอร์เปิดแท็บใหม่หรือไซต์ใหม่ แต่สิ่งนี้ขึ้นอยู่กับการตั้งค่าของผู้ใช้ ฉันคิดว่าคำถามนี้ตอบ

ยกเว้นฉันจะตกหลุมพรางเมื่อจำเป็นต้องแยกตัวเลือกลิงก์ออกจากตัวเลือก html:

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

ตัวอย่าง:

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

ขอบคุณสำหรับคำตอบของคุณบันทึก 2 ชั่วโมงในการดีบักและทดสอบ
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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.