target =“ _ blank” และ target =“ _ new”


512

อะไรคือความแตกต่างระหว่าง<a target="_new">และ<a target="_blank">กับสิ่งที่ฉันควรใช้ถ้าฉันต้องการเปิดลิงก์ในแท็บ / หน้าต่างใหม่


73
บทสรุปของผู้ใช้ปัจจุบัน: _newไม่มีความหมายพิเศษใด ๆ คุณสามารถเขียนได้_white_little_lambเช่นกัน
ÁlvaroGonzález

10
@ x3ro สิ่งนี้ทำให้พูดผิดได้ว่า " _new" ไม่มีความหมายพิเศษอย่างไร
ÁlvaroGonzález

3
@ ÁlvaroG.Vicarioฉันหมายถึง "คุณสามารถเขียน ... แทน" แต่คิดเกี่ยวกับมันฉันจะยืนยันว่า "ไม่มีความหมายพิเศษ" ไม่เหมือนกับ "ท้อแท้อย่างชัดเจน" แต่นั่นอาจเป็นฉัน nitpicking;)
fresskoma

5
ฉันต้องการเตือนทุกคนว่าการใช้target="_blank"โดยไม่ต้องrel="noopener"มีช่องโหว่ความปลอดภัยที่อาจเกิดขึ้น ค้นหาrel="noopener"เพื่อเรียนรู้เพิ่มเติม
Flimm

คำตอบ:


651

ใช้ "_blank"

ตามข้อมูลจำเพาะของ HTML5 :

ชื่อบริบทการท่องเว็บที่ถูกต้องคือสตริงใด ๆ ที่มีอย่างน้อยหนึ่งตัวที่ไม่ได้เริ่มต้นด้วยตัวอักษร U + 005F LOW สาย (ชื่อที่ขึ้นต้นด้วยขีดเส้นใต้สงวนไว้สำหรับคำหลักพิเศษ)

ชื่อบริบทการท่องเว็บที่ถูกต้องหรือคำหลักคือสตริงใด ๆ ที่เป็นทั้งชื่อเรียกดูบริบทที่ถูกต้องหรือที่มีการแข่งขันกรณีตาย ASCII สำหรับหนึ่งใน: _blank, _self, _parent หรือ _top." - แหล่งที่มา

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

คำแนะนำด้านความปลอดภัย

แดเนียลและไมเคิลชี้ให้เห็นในความคิดเห็นเมื่อใช้เป้าหมาย_blankชี้ไปที่เว็บไซต์ที่ไม่น่าเชื่อถือคุณควรตั้งค่าrel="noopener"เพิ่มเติม วิธีนี้จะช่วยป้องกันไม่ให้ไซต์เปิดยุ่งกับตัวเปิดผ่าน JavaScript ดูโพสต์นี้สำหรับข้อมูลเพิ่มเติม


7
การปล่อยข้อความที่เป็นตัวหนาออกจากสเป็คจะทำให้เสียงนั้นเป็นวงกลมอย่างสับสน ฉันอ่านมันเป็น "A valid browsing context nameหรือคำหลักคือสตริงใด ๆ ที่เป็นvalid browsing context nameหรือ .... "
อเล็กซ์ Grin

6
@lyoshenka, @ x3ro: ฉันใช้เสรีภาพในการเพิ่มย่อหน้าก่อนหน้าลงในเครื่องหมายคำพูด นั่นควรกำจัดความสับสน
mercator

5
@aesede: อ่านข้อมูลจำเพาะ พวกเขาไม่ถูกต้องเพราะ "my_custom_name" อาจไม่ได้นำหน้าด้วยการขีดเส้นใต้ ดังนั้น "ใหม่" จะใช้ได้ แต่ "_new" ไม่ได้!
fresskoma

7
Securitywise นี่คือการอ่านที่สำคัญmathiasbynens.github.io/rel-noopener
Daniel F

6
โปรดพิจารณาเพิ่มเติมว่าผู้ใช้ควรเพิ่มrel="noopener noreferrer"เนื่องจากช่องโหว่การโจมตีจาวาสคริปต์ของtarget="_blank"
Michael

126

การใช้ target="_blank"จะสั่งให้เบราว์เซอร์สร้างแท็บหรือหน้าต่างเบราว์เซอร์ใหม่เมื่อผู้ใช้คลิกที่ลิงค์

การใช้target="_new"ไม่ถูกต้องทางเทคนิคตามข้อกำหนด แต่เท่าที่ฉันรู้ว่าเบราว์เซอร์ทุกตัวจะทำงานในลักษณะเดียวกัน:

  • มันจะค้นหาแท็บหรือหน้าต่างด้วยชื่อบริบท "_new"
  • หากพบแท็บ / หน้าต่าง "_new" แสดงว่า URL นั้นถูกโหลดเข้ามา
  • หากไม่พบแท็บ / หน้าต่างใหม่จะถูกสร้างขึ้นด้วยชื่อบริบท "_new" และ URL ที่โหลดเข้ามา

โน้ตtarget="_new"จะทำงานเหมือนกันทุกประการtarget="new"ประการและอันหลังเป็น HTML ที่ถูกต้องในขณะที่ต้นฉบับนั้นเป็น HTML ที่ไม่ถูกต้อง

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


4
ดังนั้นโดยทั่วไปถ้าฉันมีลิงก์สอง (หรือมากกว่า) เชื่อมโยงกับtarget="_new"พวกเขาทั้งสองจะเปิดในแท็บเดียวกันหนึ่งทับอีก?
art-solopov

4
@ art-solopov เท่าที่ฉันรู้ใช่นั่นคือสิ่งที่จะเกิดขึ้นในทุกเบราว์เซอร์ อย่างไรก็ตาม "_new" เป็นค่าที่ผิดกฎหมายสำหรับเป้าหมายดังนั้นอย่าทำเช่นนั้น
Abhi Beckert

25

TL; DR
USE _blank

แอตทริบิวต์ target ระบุตำแหน่งที่จะเปิดเอกสารที่เชื่อมโยง

USAGE: target="xyz"  [don't forget double quotes]

_blank  Opens the linked document in a new window or tab
_self   Opens the linked document in the same frame as it was clicked (this is default)
_parent     Opens the linked document in the parent frame
_top    Opens the linked document in the full body of the window 
framename   Opens the linked document in a named frame

SINCE "_new" ไม่ใช่สิ่งเหล่านี้ IT จะมาภายใต้ "framename" ดังนั้นหากผู้ใช้คลิกอีกครั้งบนการเชื่อมโยงหลายมิตินั้นจะไม่เปิดแท็บใหม่แทนอัปเดตแท็บที่มีอยู่ ในกรณีที่ _blank หากผู้ใช้คลิกสองครั้งแล้วเปิดแท็บใหม่ 2 แท็บ


21

ฉันรู้ว่านี้เป็นคำถามที่เก่าและคำตอบที่ถูกใช้งาน_blankได้รับการกล่าวถึงหลายครั้ง แต่ใช้<a target="somesite.com" target="_blank">Link</a> เป็นความเสี่ยงด้านความปลอดภัยเป็นความเสี่ยงด้านความปลอดภัย

มันเป็นที่แนะนำ ( ผลประโยชน์ ) เพื่อใช้งาน:

<a href="somesite.com" target="_blank" rel="noopener noreferrer">Link</a>

1
อ่านเพิ่มเติมเกี่ยวกับความเสี่ยงด้านความปลอดภัย: jitbit.com/alexblog/…
8bithero

14

เรื่องนี้อาจถูกถามมาก่อน แต่:

"ทุกลิงก์ที่ระบุ target =" _ new "จะค้นหาและค้นหาหน้าต่างนั้นตามชื่อและเปิดขึ้นมา

หากคุณใช้ target = "_ blank" จะมีการสร้างหน้าต่างใหม่ทุกครั้งที่ด้านบนของหน้าต่างปัจจุบัน "

จากที่นี่: http://thedesignspace.net/MT2archives/000316.html



12

เป็นความเข้าใจของฉันที่target = whateverจะมองหาเฟรม / หน้าต่างที่มีชื่อนั้น หากไม่พบมันจะเปิดหน้าต่างใหม่พร้อมชื่อนั้น ถ้าwhatever == "_new"มันจะปรากฏเช่นเดียวกับที่คุณใช้_blankยกเว้น .....

การใช้หนึ่งในชื่อเป้าหมายที่สงวนไว้จะข้ามขั้นตอน "ค้นหา" ดังนั้นtarget = "_blank"ในการเชื่อมโยงโหลจะเปิดหน้าต่างว่างโหล แต่target = whateverในการเชื่อมโยงโหลจะเปิดขึ้นหนึ่งหน้าต่างเท่านั้นtarget = "_new"ในลิงค์โหลอาจทำให้พฤติกรรมไม่แน่นอน ฉันไม่ได้ลองกับเบราว์เซอร์หลายตัว แต่ควรเปิดขึ้นหนึ่งหน้าต่างเท่านั้น

อย่างน้อยนี่คือวิธีที่ฉันตีความกฎ


9

ข้อควรระวัง - อย่าลืมใส่ "เครื่องหมายคำพูด" เสมอ - อย่างน้อยใน Chrome target=_blank(ไม่มีเครื่องหมายคำพูด) ไม่ใช่ชื่อเดียวกันtarget="_blank" (พร้อมเครื่องหมายคำพูด)

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


จุดที่ดีมาก ฉันพบปัญหานี้เมื่อฉันไม่ได้ใส่เครื่องหมายคำพูด _blank ไว้ในนั้น ลิงค์ที่ฉันคลิกจากแท็บ "blank" ที่สร้างขึ้นใหม่นั้นเขียนทับเนื้อหาในแท็บนั้นแทนที่จะเปิดแท็บใหม่ การใส่ _blank ในเครื่องหมายคำพูดจะทำให้ Chrome เปิดแท็บใหม่ทุกครั้ง
Steve Scherer

นอกจากนี้ตรวจสอบให้แน่ใจว่าใช้ "_blank" ไม่ใช่ "_BLANK" Chrome มีปัญหาเกี่ยวกับเคสและจะไม่เปิดแท็บใหม่โดยใช้ "_BLANK" หลายครั้ง
Steve Scherer

5
  • _blank เป็นค่าเป้าหมายจะวางไข่หน้าต่างใหม่ทุกครั้ง
  • _new จะวางไข่เพียงหน้าต่างเดียวเท่านั้น

นอกจากนี้ทุกลิงก์ที่คลิกด้วยค่าเป้าหมายของ _new จะแทนที่หน้าที่โหลดในหน้าต่างที่วางไข่ก่อนหน้านี้

คุณสามารถคลิกที่นี่เมื่อใดที่จะใช้ _blank หรือ _newเพื่อทดลองใช้ด้วยตัวคุณเอง


คุณสามารถแสดงเบราว์เซอร์ที่ให้เกียรติ_newตามที่อธิบายไว้ได้หรือไม่?
Dima Tisnek

@qarma พฤติกรรมนั้นเป็นไปตามที่อธิบายไว้ในเบราว์เซอร์ทั้งหมดที่ฉันรู้จัก_newไม่ใช่คำสำคัญวิเศษมันเป็นเพียงชื่อถ้ามีหน้าต่างที่มีชื่อนั้นมันจะนำมาใช้ซ้ำมิฉะนั้นจะเปิดขึ้นมา การคลิกหลายลิงค์สำหรับหน้าต่างนั้นจะเป็นการเปิดหน้าที่แตกต่างกันในหน้าต่างที่มีชื่อแทนที่จะเปิดหลายหน้าใหม่
scragar

สเป็คจริงแนะนำให้เบราว์เซอร์ที่พวกเขาignoreเป้าหมายที่เริ่มต้นด้วยขีดเส้นใต้ แต่ไม่ใช่คำหลัก ไม่มีคำแนะนำสำหรับสิ่งที่เบราว์เซอร์ควรทำเมื่อ "ละเว้น" ชื่อเป้าหมายที่ไม่ถูกต้อง ความเป็นไปได้รวมถึง: (1) ปฏิบัติต่อเหมือน "_blank" (2) ปฏิบัติต่อเหมือนชื่อหน้าต่าง (ราวกับว่าไม่มีขีดเส้นใต้ที่ผิดกฎหมาย) (3) ถือว่าเป็นชื่อหน้าต่างที่ว่างเปล่าอย่างชัดเจน (4) ปฏิบัติต่อเหมือนที่นั่น ไม่มีแอตทริบิวต์เป้าหมาย - เบราว์เซอร์ใด ๆ สามารถเลือกการตีความใด ๆ
Jesse Chisholm

0

แอตทริบิวต์เป้าหมายของลิงก์บังคับให้เบราว์เซอร์เปิดหน้าปลายทางในหน้าต่างเบราว์เซอร์ใหม่ การใช้_blankเป็นค่าเป้าหมายจะวางไข่หน้าต่างใหม่ทุกครั้งในขณะที่ใช้_newจะวางไข่เพียงหน้าต่างเดียวเท่านั้นและทุกลิงก์ที่คลิกด้วยค่าเป้าหมาย_newจะแทนที่หน้าเว็บที่โหลดในหน้าต่างที่วางไข่ก่อนหน้านี้


0

ในการเปิดลิงค์ในแท็บ / หน้าต่างใหม่ที่คุณจะใช้ <a target="_blank">แท็บใหม่ที่คุณจะใช้

ราคา _blank = บริบทการสืบค้นที่กำหนดเป้าหมาย: แท็บใหม่: แท็บหรือหน้าต่างขึ้นอยู่กับการตั้งค่าการเรียกดูของคุณ

ราคา _new = ไม่ถูกต้อง; ไม่มีค่าดังกล่าวใน HTML5 สำหรับแอตทริบิวต์เป้าหมายในองค์ประกอบ

แอตทริบิวต์เป้าหมายที่มีค่าทั้งหมดในองค์ประกอบ: วิดีโอสาธิต


-1

การใช้ _New มีประโยชน์เมื่อทำงานกับหน้าเว็บที่เป็น Iframed เนื่องจาก target = "_ blank" ไม่ได้ใช้กลอุบายและเปิดหน้าเว็บใน iframe เดียวกัน ... target ใหม่เป็นทางออกที่ดีที่สุดสำหรับหน้า Iframe แค่ห้าเซ็นต์

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