เป็นเรื่องปกติไหมที่จะใช้ target =“ _ blank” ใน HTML5


165

ฉันจำได้ว่าอ่านที่ไหนสักแห่งใน HTML5 มันก็ไม่เป็นไรที่จะใช้target="_blank"ใน HTML5 อีกต่อไปแต่ตอนนี้ฉันหามันไม่พบ

มันดีไหมที่จะใช้ต่อไปtarget="_blank"?

ฉันรู้ว่าโดยทั่วไปแล้วถือว่าเป็นความคิดที่ไม่ดี แต่เป็นวิธีที่ง่ายที่สุดในการเปิดหน้าต่างใหม่สำหรับบางอย่างเช่น PDF และยังไม่ต้องการให้คุณพึ่งพา JavaScript


5
โดยทั่วไปถ้าคุณต้องการเปิดเว็บไซต์ภายนอกจากเว็บไซต์ของคุณแล้วเปิดหน้าต่างใหม่ (ซึ่งอาจเป็นแท็บใหม่ในวันนี้ของเบราว์เซอร์ส่วนใหญ่) เป็นความคิดที่ดีกว่าในความคิดของฉัน
hobbes3

7
@ hobbes3 โปรดหยุดยุ่งนำทางและประวัติของฉัน ฉันเป็นคนที่กำลังเรียกดูและเป็นผู้ที่ตัดสินใจว่าควรเปิดลิงก์ในใหม่ (คลิกกลาง) หรือในแท็บเดียวกัน (คลิกซ้าย) เมื่อฉันเจอเว็บไซต์บังคับให้ฉันทำตาม "แนวปฏิบัติที่ถูกต้อง" ที่เปิดทุกลิงก์ในแท็บใหม่ฉันจะออกไปอย่างทันทีและยินดี
Albireo

9
@ อัลเบโร่มันเป็นเพียงความคิดเห็นของฉันและบริการบนเว็บยอดนิยมบางส่วนยังมีแนวคิดเดียวกัน ตัวอย่างเช่นการคลิกลิงก์ในเมลของคุณใน Gmail จะเปิดหน้าต่างใหม่ตามค่าเริ่มต้น
hobbes3

12
@ อัลเบโร่คุณคิดว่าผู้ใช้อยู่ในระดับสูงและมีความเชี่ยวชาญด้านเทคโนโลยีอยู่เสมอ
Mike Campbell

3
มีเหตุผลว่าทำไมtargetและคณะ ที่มีอยู่ บางครั้งพวกเขาก็มีความจำเป็น หน้าเว็บที่สร้างขึ้นแบบไดนามิกที่มี JS stateful เช่นที่ iframe เป็นที่ต้องการน้อยกว่าแท็บใหม่ (เช่นการดู PDF เป็นสถานะ OP) หรือเมื่อไซต์ที่ปลอดภัย (เช่นธนาคาร) ส่งคุณไปยังลิงก์ภายนอก แต่ไม่อนุญาตให้ใช้ปุ่มย้อนกลับเนื่องจากการหมดอายุของเนื้อหา เช่นเดียวกับทุกสิ่งแอตทริบิวต์ HTML นี้ไม่ใช่ "ความคิดที่ไม่ดี" ที่จะใช้ แต่ควรใช้กับความคิดและการดูแลเช่นเดียวกับไลบรารีคลาสฟังก์ชันและคุณสมบัติในการเขียนโปรแกรมทั้งหมด
s.co.tt

คำตอบ:


159

ดูเหมือนว่าtarget="_blank"จะยังไม่เป็นไร มันถูกระบุว่าเป็นบริบทการท่องคำหลักในร่าง HTML5 ล่าสุด


54
target="_blank"จะทำให้หน้าต่างใหม่เปิดทุกครั้งที่ผู้ใช้คลิกที่ลิงค์ ยกเว้นว่านี่คือสิ่งที่คุณต้องการเกิดขึ้นจริง ๆ (และไม่ค่อยมี) ลองใช้target="somethingUnique"เพื่อให้ผู้ใช้เปิดหน้าต่างเดียวได้แม้ว่าพวกเขาจะคลิกลิงก์หลายครั้งก็ตาม มันทำให้ UX ที่ดีกว่ามาก
BanksySan

4
@BanksySan: ตัวอย่างหนึ่งที่ฉันคิดว่าtarget="_blank"ดีคือปุ่มแชร์
Martin Thoma

ถ้าฉันอ่านบทความยาว ๆ และมีการอ้างอิงไปยังข้อมูลที่เกี่ยวข้องในเว็บไซต์อื่น (หรือเว็บไซต์เดียวกัน) ฉันมักจะต้องการข้ามไปมาระหว่างสองโดยไม่สูญเสียตำแหน่งของฉันในบทความต้นฉบับ target = "_ blank" นั้นสมบูรณ์แบบสำหรับสิ่งนี้ ออกจากหน้าและต้องโหลดใหม่แต่ละหน้า (มักจะสูญเสียสถานที่ของฉันในหน้าใดหน้าหนึ่ง) ไม่ใช่ ใช่ฉันรู้ว่าฉันสามารถคลิกขวาที่ลิงก์และเปิดในแท็บใหม่ แต่ฉันไม่ต้องการเพราะมันจะทำลายสมาธิของฉันและฉันสงสัยว่าผู้ใช้เว็บส่วนใหญ่ไม่รู้
Bob Ray

แอตทริบิวต์เป้าหมายมีประโยชน์มากมาย ฉันไม่อยากจะบอกว่า ผู้โฆษณาป๊อปอัพทำลายวัตถุประสงค์ แต่วันนี้มีบริการมากมายที่เปิดใช้งานนอกเหนือจากประสบการณ์การท่องเว็บหลายคนไม่ต้องการออกจากบทความหรือแท็บปัจจุบัน แต่ยังคงโต้ตอบกับ PDF หรือวิดีโอที่ดาวน์โหลดหนัก การใช้ _blank ทำให้แน่ใจว่าคุณอนุญาตให้ผู้ใช้เติมแท็บที่ว่างเปล่า - ไม่แทนที่เนื้อหาที่เติมในปัจจุบันหากคุณให้บริการลิงค์จำนวนมากในเซสชัน / ไซต์เดียวกัน ชื่อที่ไม่ซ้ำกันยุ่งอยู่ในรายการเพลง 90 เพลง .... Viva la target, viva la _blank ...
Jonas Lundman

91

มันก็โอเคที่จะใช้target="_blank"; สิ่งนี้ได้ดำเนินการไปแล้วใน XHTML เนื่องจากการกำหนดเป้าหมายหน้าต่างใหม่จะแสดงป๊อปอัปแจ้งเตือนในเบราว์เซอร์ส่วนใหญ่เสมอ XHTML มักจะแสดงข้อผิดพลาดกับแอตทริบิวต์เป้าหมายในการตรวจสอบ

HTML 5 นำกลับมาเพราะเรายังใช้อยู่ เป็นเพื่อนของเราและเราปล่อยไม่ได้

ไม่เคยปล่อยให้ไป.


สิ่งที่คุณอ้างว่าใช้ได้สำหรับ HTML ที่เข้มงวดเท่านั้น
qwertzman

สำหรับ XHTML เช่นเดียวกับ HTML
MEMark

15

แม้ว่าจะtarget="_blank"เป็นที่ยอมรับใน HTML5แต่ส่วนตัวฉันก็พยายามอย่าใช้เลย (แม้จะเปิดไฟล์ PDF ในหน้าต่างใหม่)

HTML ควรกำหนดความหมายและเนื้อหา ถามตัวเองว่าความหมายของaองค์ประกอบจะเปลี่ยนไปไหมหากtargetแอตทริบิวต์นั้นถูกลบไป” หากไม่เป็นเช่นนั้นรหัสไม่ควรเป็น HTML (อันที่จริงฉันประหลาดใจว่า W3C เก็บไว้…ฉันเดาว่าพวกเขาไม่สามารถปล่อยได้)

พฤติกรรมเบราว์เซอร์โดยเฉพาะอย่างยิ่งพฤติกรรมแบบโต้ตอบกับผู้ใช้ควรนำมาใช้กับภาษาสคริปต์ฝั่งไคลเอ็นต์เช่น JavaScript เนื่องจากคุณต้องการให้เบราว์เซอร์ทำงานในลักษณะเฉพาะเช่นเปิดหน้าต่างใหม่คุณควรใช้ JS แต่ตามที่คุณกล่าวถึงพฤติกรรมนี้ต้องใช้เบราว์เซอร์เพื่อใช้ JS (แม้ว่าเว็บไซต์ของคุณจะเสื่อมโทรมลงอย่างสวยงามหรือปรับปรุงอย่างต่อเนื่องหรืออะไรก็ตามก็ควรจะเป็นไรผู้ใช้ที่ปิดการใช้งาน JS จะไม่พลาดมาก)

สิ่งเหล่านี้ไม่ได้เป็นคำตอบที่ถูกต้อง ออกมีบางคือความเห็นว่าวิธีการเชื่อมโยงเปิดท้ายที่สุดควรจะตัดสินใจโดยผู้ใช้ นำตัวอย่างนี้

คุณกำลังท่องวิกิพีเดียการเจาะลึกลงไปในโพรงกระต่าย คุณเจอลิงค์ในการอ่านของคุณ

สมมติว่าคุณต้องการอ่านหน้าเชื่อมโยงที่แท้จริงอย่างรวดเร็วก่อนกลับมา คุณอาจเปิดมันในแท็บใหม่แล้วปิดเมื่อคุณทำเสร็จ (เนื่องจากการกดปุ่ม 'ย้อนกลับ' และรอการโหลดหน้าใหม่ใช้เวลานานเกินไป) หรือถ้ามันดูน่าสนใจและคุณต้องการบันทึกไว้ในภายหลัง บางทีคุณควรเปิดในแท็บพื้นหลังใหม่แทนและอ่านหน้าปัจจุบันต่อไป หรือบางทีคุณอาจตัดสินใจว่าคุณอ่านหน้านี้เสร็จแล้วดังนั้นคุณเพียงแค่ไปตามลิงก์ในแท็บปัจจุบัน

ประเด็นคือคุณมีเวิร์กโฟลว์ของคุณเองและคุณต้องการให้เบราว์เซอร์ของคุณทำงานตามนั้น คุณอาจท้อแท้ถ้าตัดสินใจเช่นนี้

ดังที่กล่าวไปแล้วนักพัฒนาเว็บควรทำให้ชัดเจนว่าลิงก์ของพวกเขาไปอยู่ที่ใดประเภทและ / หรือรูปแบบของแหล่งข้อมูลที่พวกเขาอ้างอิงและสิ่งที่พวกเขาทำ เคล็ดลับเครื่องมืออาจเป็นเพื่อนของคุณ (ยกเว้นว่าคุณกำลังใช้แท็บเล็ตหรือโทรศัพท์ในกรณีนี้ให้ระบุสิ่งเหล่านี้บนเว็บไซต์มือถือ) เราทุกคนรู้ว่ามันแย่ขนาดไหนที่เราไม่ได้คาดหวังหรือทำอะไรบางอย่างที่เราไม่ได้ตั้งใจ


และถ้าใครฉลาดพอที่จะออกแบบวิดเจ็ตผู้ใช้ที่อนุญาตให้หนึ่งใช้สิทธิในการควบคุมที่พระเจ้ามอบให้กับทุกลิงก์ได้อย่างง่ายดาย (เช่นเดียวกับในจิตใต้สำนึก) ก็ควรเพิ่มเบราว์เซอร์และแท็ก <a> ทั้งหมดสามารถ ให้มัน
Mark Goldfain

คำตอบนี้มีเหตุผลและถูกต้องที่สุดในเชิงสถาปัตยกรรมในความคิดของฉัน ในโลกอุดมคติผู้เขียนควรมีความกังวลมากขึ้นเกี่ยวกับการระบุความหมายที่ถูกต้องของชิ้นส่วนและน้อยกว่าเกี่ยวกับการกำหนดพฤติกรรมของชิ้น ในจักรวาลเนื้อหาที่ปรับตัวได้ลักษณะการทำงานของหน้าต่างอาจขึ้นอยู่กับธีมการตอบสนองหรือการตั้งค่าของผู้ใช้ที่มีผลในเวลาที่ร้องขอ "สิ่ง" ความหมายขาออกถูกแก้ไขตามความจำเป็นโดยการแปลง (DOM หรือ regex เซิร์ฟเวอร์หรือเบราว์เซอร์) ด้วยวิธีนี้พฤติกรรมของหน้าต่างสามารถขึ้นอยู่กับผู้ใช้มากกว่าผู้เขียนใน CMS
วันดอนวันที่

12

มันเป็นวิธีที่ง่ายที่สุดในการเปิดหน้าต่างใหม่สำหรับบางอย่างเช่น PDF

นอกจากนี้ยังเป็นวิธีที่ง่ายที่สุดในการรบกวนผู้ใช้ที่ไม่ใช่ Windows PDF เปิดได้ดีในเบราว์เซอร์บนแพลตฟอร์มอื่น การเปิดหน้าต่างใหม่จะทำให้ประวัติการนำทางยุ่งเหยิงและสร้างความซับซ้อนให้กับแพลตฟอร์มขนาดเล็กเช่นสมาร์ทโฟน

อย่าเปิดหน้าต่างใหม่สำหรับสิ่งต่าง ๆ เช่น PDF เพียงเพราะ Windows รุ่นเก่าชำรุด


11
รู้ว่ามีอะไรให้ช่วยบ้างเมื่อคุณบอกคนอื่นว่าอย่าใช้อะไร? แสดงให้พวกเขาสิ่งที่จะใช้ที่ดาวน์โหลด HTML5 แอตทริบิวต์: <a download="[file ชื่อ here]" href="file.ext">
จอห์น

5

นักพัฒนาเว็บส่วนใหญ่ใช้target="_blank"เพื่อเปิดลิงก์ในแท็บใหม่เท่านั้น หากคุณใช้target="_blank"เพื่อเปิดลิงก์ในแท็บใหม่แสดงว่ามีความเสี่ยงต่อผู้โจมตี เมื่อคุณเปิดลิงก์ในแท็บใหม่ ( target="_blank") หน้าเว็บที่เปิดขึ้นในแท็บใหม่จะสามารถเข้าถึงแท็บเริ่มต้นและเปลี่ยนตำแหน่งโดยใช้window.openerคุณสมบัติได้

รหัส Javascript:

window.opener.location.replace(malicious URL)

การป้องกัน:

rel="nofollow noopener noreferrer"

ฉันไม่แน่ใจว่าผู้ติดตามคนนั้นเกี่ยวข้องกับความปลอดภัยหรือไม่เพราะเป็นบอทของเครื่องมือค้นหา
Darryl Hein

4

ในขณะที่เป้าหมายยังคงเป็นที่ยอมรับใน HTML5 แต่ไม่เป็นที่ต้องการ หากต้องการลิงก์ไปยังไฟล์ PDF ให้ใช้แอตทริบิวต์ดาวน์โหลดแทนแอตทริบิวต์ target

นี่คือตัวอย่าง:

<a href="files/invoice.pdf" download>Invoice</a>

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

<a href="files/j24oHPqJiUR2ftK0oeNH.pdf" download="invoice.pdf">Invoice</a>

โปรดทราบว่าในขณะที่เบราว์เซอร์ที่ทันสมัยส่วนใหญ่สนับสนุนคุณสมบัตินี้บางอย่างอาจไม่ ดูcaniuse.comสำหรับข้อมูลเพิ่มเติม



0

คุณสามารถทำได้ด้วย jquery วิธีต่อไปนี้จะเปิดในหน้าต่างใหม่:

<input type="button" id="idboton" value="google" name="boton" /> 

<script type="text/javascript">
    $('#idboton').click(function(){
        window.open('https://www.google.com.co');
    });

</script>

ทำไมไม่เพิ่มแบบฟอร์มรอบ ๆ ปุ่มที่มีเป้าหมาย = "_ blank" ดูเหมือนว่าจะง่ายขึ้นและลบความต้องการของ JS
Darryl Hein

-1

ฉันคิดว่าแอตทริบิวต์เป้าหมายเลิกใช้แล้วสำหรับ<link>องค์ประกอบไม่ใช่<a>นั่นอาจเป็นเหตุผลที่คุณได้ยินมาว่าไม่ควรใช้อีกต่อไป

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