เปิดหน้าเว็บใหม่บนแท็บโดยใช้โปรแกรม


100

ฉันกำลังพยายาม "บังคับ" ให้ Safari หรือ IE7 เปิดหน้าใหม่โดยใช้แท็บใหม่โดยใช้แท็บใหม่

โดยทางโปรแกรมฉันหมายถึงสิ่งที่ต้องการ:

window.open('page.html','newtaborsomething');

1
ฉันไม่แน่ใจว่าฉันเข้าใจ - คุณกำลังพัฒนาแอพที่ใช้งานได้กับ IE และคุณต้องการเปิดหน้าใหม่ในแท็บใหม่หรือไม่ หรือคุณแค่ต้องการตั้งค่า IE เพื่อเปิดแท็บใหม่เมื่อคลิกที่ลิงค์? หรือคุณกำลังสร้างเว็บไซต์ที่มีลิงก์เพิ่มเติมและคุณต้องการให้เปิดแยกต่างหาก? กรุณาทำให้ชัดเจนกว่านี้
Dungeo

ขอบคุณสำหรับความคิดเห็นและคำตอบทั้งหมดของคุณฉันรู้ว่านี่ไม่ใช่เรื่องใหญ่และไม่ควรเป็นปัญหาในการพัฒนาของฉัน แต่นี่เป็นคำขอของลูกค้าไม่ใช่สิ่งสำคัญที่ฉันแค่อยากรู้ ปัญหาคือ IE7 และ Safari จะไม่เปิดป๊อปอัปพร้อมแท็บโดยใช้ JavaScript หรือแอตทริบิวต์เป้าหมายจริงหรือ?
Ricardo Vega

คำตอบ:


63

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

การเปิดหน้าโดยใช้ Window.open ด้วยชื่อหน้าต่างอื่นจะเปิดขึ้นในหน้าต่างเบราว์เซอร์ใหม่เช่นป๊อปอัปหรือเปิดในแท็บใหม่หากผู้ใช้กำหนดค่าเบราว์เซอร์ให้ทำเช่นนั้น


เมื่อเลือกตัวเลือก "ให้ Internet Explorer ตัดสินใจว่าจะเปิดป๊อปอัปอย่างไร" Internet Explorer ใช้เกณฑ์ใดในการตัดสินใจนี้
Dead.Rabit

114

คุณสามารถใช้งานได้ใน Firefox เพิ่มแอตทริบิวต์ target = "_ newtab" ไปที่จุดยึดเพื่อบังคับให้เปิดแท็บใหม่

<a href="some url" target="_newtab">content of the anchor</a>

ในจาวาสคริปต์คุณสามารถใช้ไฟล์

window.open('page.html','_newtab');

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

แจ้งให้เราทราบว่ามันใช้งานได้บนเบราว์เซอร์อื่นด้วยหรือไม่ (ตอนนี้ฉันไม่มีโอกาสได้ลองใช้กับเบราว์เซอร์อื่นที่ไม่ใช่ Firefox)

แก้ไข: เพิ่มการอ้างอิงสำหรับ ie7 บางทีลิงก์นี้อาจเป็นประโยชน์
http://social.msdn.microsoft.com/forums/en-US/ieextensiondevelopment/thread/951b04e4-db0d-4789-ac51-82599dc60405/


6
ขอบคุณสำหรับเคล็ดลับ Firefox ตอนนี้ฉันได้อัปเดตส่วนเสริม TargetKiller เพื่อลบ "_newtab" และ "newtab" : P
thenonhacker

1
ฉันขอขอบคุณคำตอบของคุณมาก แต่ฉันรู้ว่า Firefox จะทำ (บางข้อความฉันไม่ได้ทดสอบโปรดสังเกตว่าสิ่งนี้ไม่เป็นความจริงเสมอไปมีโอกาส 50-50 ที่จะได้รับหน้าต่างหรือแท็บใหม่) ฉันคิดว่านี่ไม่น่าจะเป็นปัญหา แต่คุณก็รู้จักลูกค้า :)
Ricardo Vega

2
อาจไม่ใช่กรณีนี้ในทุกรุ่น / แพลตฟอร์ม แต่ Firefox 3.5 บน Linux ไม่อนุญาตให้คุณทำมากกว่าหนึ่งครั้ง ... หากคุณมีลิงก์ target = "_ newtab" หลายลิงก์ในหน้าเว็บให้คลิกที่ลิงก์ใด ๆ จะเติมข้อมูลในแท็บใหม่เพียงแท็บเดียว ... นั่นคือการคลิกที่ตามมาจะเขียนทับสิ่งที่เปิดไว้ก่อนหน้านี้ในแท็บนั้น ทำให้ฉันคิดว่านี่เป็นการเปิดแท็บชื่อ "_newtab" แทนที่จะเป็นการแก้ปัญหาเฉพาะเบราว์เซอร์
Rylee Corradini

55
ฉันค่อนข้างมั่นใจว่า "_newtab" ไม่มีความหมายเว้นแต่จะมีใครบางคนมีเอกสารในทางตรงกันข้าม สิ่งที่คุณทำคือเปิดหน้าต่างที่ชื่อ _newtab (นั่นคือสาเหตุที่ลิงก์ที่ตามมาทั้งหมดที่มีเป้าหมายนั้นเปิดในหน้าต่างเดียวกัน) คุณสามารถกำหนดเป้าหมาย "foo" หรือ "bar" และดูพฤติกรรมเดียวกันได้ เป้าหมายเดียวที่รู้จักกันดี ได้แก่ _blank, _self, _parent และ _top htmlcodetutorial.com/linking/_A_TARGET.html
Tom Lianza

44

พวกคุณพยายามใช้สิ่งต่อไปนี้:

window.open('page.html', '_newtab');

ควรดูที่วิธี window.open จริงๆ

สิ่งที่คุณทำคือบอกให้เบราว์เซอร์เปิดหน้าต่างใหม่ NAMED "_newtab" และโหลด page.html ลงไป ทุกหน้าใหม่ที่คุณโหลดจะโหลดลงในหน้าต่างนั้น อย่างไรก็ตามหากผู้ใช้ตั้งค่าเบราว์เซอร์ให้เปิดหน้าใหม่ในแท็บใหม่แทนหน้าต่างใหม่ผู้ใช้จะเปิดแท็บ ไม่ว่าจะใช้ชื่อเดียวกันสำหรับหน้าต่างหรือแท็บ

หากคุณต้องการให้หน้าต่างๆเปิดขึ้นในหน้าต่างหรือแท็บต่างๆคุณจะต้องเปลี่ยน NAME ของหน้าต่าง / แท็บใหม่เป็นอย่างอื่นเช่น:

window.open('page2.html', '_newtab2');

แน่นอนว่าชื่อของหน้าต่าง / แท็บใหม่อาจเป็นชื่ออะไรก็ได้เช่น page1, page2, page3 ฯลฯ แทนที่จะเป็น _newtab2


3
รู้เรื่องของเขา '_newtab' ไม่ใช่ชื่อที่สงวนไว้ '_blank' เป็นสิ่งพิเศษที่เปิดหน้าต่าง / แท็บอื่นที่ไม่ระบุและไม่ระบุชื่อซึ่งคุณสามารถใช้ต่อไปได้เรื่อย ๆ '_newtab' ไม่พิเศษยกเว้นว่าเป็นชื่อเฉพาะที่คุณตั้งให้แท็บใหม่ (ค่าเริ่มต้น) หรือหน้าต่างซึ่งเบราว์เซอร์ของคุณจะรีเฟรชด้วย url ที่คุณส่งไป
BradChesney79

15

ขึ้นอยู่กับผู้ใช้ว่าต้องการใช้แท็บใหม่หรือหน้าต่างใหม่ไม่ใช่ธุรกิจของนักพัฒนาที่จะแก้ไขพฤติกรรมนี้ ฉันไม่คิดว่าคุณจะทำได้

สัตว์เลี้ยงของฉัน - ฉันเกลียดมันเมื่อไซต์บังคับให้ฉันเปิดหน้าต่าง / แท็บใหม่ - ฉันค่อนข้างสามารถตัดสินใจด้วยตัวเองได้ โดยเฉพาะอย่างยิ่งเมื่อพวกเขาทำในจาวาสคริปต์ - นั่นไม่เป็นประโยชน์จริงๆ


1
+1 ถึง Sam - หน้าใหม่ที่เปิดในแท็บหรือหน้าต่างเป็นตัวเลือกเฉพาะเบราว์เซอร์ (และผู้ใช้) โดยทั่วไปฉันไม่ชอบเมื่อไซต์ใด ๆ เปิดหน้าต่างใหม่
Richard Ev

นอกเหนือจากนี้: ในคำจำกัดความ "เข้มงวด" ไม่มีแอตทริบิวต์ "เป้าหมาย" ที่ถูกต้องเนื่องจากไม่สร้างความรำคาญให้กับผู้ใช้ ลองใช้: validator.w3.org
guerda

4
ฉันชอบเปิดชุดแท็บที่บ้านดังนั้นฉันจึงเป็นผู้ใช้ในกรณีนั้น เพียงเตือนว่ามีข้อยกเว้น
Mark Essel

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

1
ฉันไม่เห็นด้วยโดยถือว่าค่าเริ่มต้นสำหรับผู้ใช้คือตัวเลือกการออกแบบสำหรับเว็บแอปพลิเคชันไม่ใช่ต่อเบราว์เซอร์ เบราว์เซอร์สามารถสมัครเป็นค่าเริ่มต้นโดยที่แอปพลิเคชันไม่ได้ นอกจากนี้หากเบราว์เซอร์จัดหาผู้ใช้ด้วยวิธีการแทนที่ค่าเริ่มต้นของแอปพลิเคชัน / ค่าเริ่มต้นของเบราว์เซอร์แสดงว่าเป็นสิ่งที่ดีที่สุดในทั้งสองโลก ผู้ใช้> แอปพลิเคชัน> เบราว์เซอร์
Derek Litz

8

คุณลองแล้วชอบ

var open_link = window.open('','_blank');
open_link.location="somepage.html";

ข้ามเบราว์เซอร์นี้เข้ากันได้หรือไม่? ดูเหมือนจะทำงานใน IE8 กังวลเกี่ยวกับเวอร์ชันในอนาคตหรือเบราว์เซอร์อื่น ๆ
n00b

ใช่ .. มันเข้ากันได้กับข้ามเบราว์เซอร์ จนถึงตอนนี้ฉันไม่มีปัญหาเลย: D
Thurein Soe

5

ฉันพบใน Chrome

window.open('page.html','_newtab')

จะทำงานเพียงครั้งเดียว

คุณสามารถใช้ได้:

window.open(ct.getNewHref(),'_newtab' + Math.floor(Math.random()*999999));

เพื่อเปิดแท็บใหม่หลายแท็บ


10
นั่นเป็นเพราะใน Chrome _newtab เป็นเพียงชื่อและคุณกำลังขอให้เปิดหน้าในแท็บชื่อ "_newtab"
w00t

3

รหัสที่ฉันใช้กับ jQuery:

$("a.btn_external").click(function() {
    url_to_open = $(this).attr("href");
    window.open(url_to_open, '_blank');
    return false;
});

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


8
ทำไมไม่ใช้ html แบบเก่าธรรมดา <a href="page.html" target="_blank">foo</a>
pixelastic

1
@pixelastic "เมื่อใช้วิธีนี้คุณจะไม่ทริกเกอร์เหตุการณ์การคลิกของผู้ปกครอง"
Michael Blackburn


0

หากคุณต้องการคุณสามารถใช้วิธีนี้ซึ่งค่อนข้างแฮ็ค แต่จะเสนอฟังก์ชันที่ต้องการ:

jQuery('<a/>', {
    id: 'foo',
    href: 'http://google.com',
    title: 'Become a Googler',
    rel: 'external',
    text: 'Go to Google!',
    target:'_blank',
    style:'display:none;'
}).appendTo('#mySelector');

$('#foo').click()

คุณสามารถจัดหา jsfiddle ได้หรือไม่?
Xenology

-2

สิ่งนี้อาจใช้งานได้หากคุณสามารถเรียกไฟล์แบตช์ได้ (ฉันใช้ php กับ XP sp2 และ IE8 ... คุณสามารถลอง IE7 ได้เลย) ใช้สิ่งต่อไปนี้ (หรือคล้ายกัน) ในไฟล์. bat ของคุณเพื่อเปิด Windows: เริ่ม "" C: \ Progra ~ 1 \ Intern ~ 1 \ iexplore "http://www.site.com" ไม่มีช่องว่างระหว่างเครื่องหมายอัญประกาศและ C: \ Progr ... ฯลฯ ในบางจุดสิ่งนี้อาจเริ่มเปิดหน้าต่างใหม่ (เช่น target = "_ blank") แทนที่จะเป็นแท็บใหม่ แต่ทำงานได้ถึงจุดหนึ่ง ไม่ได้รับการทดสอบอย่างกว้างขวาง หากต้องการใช้สิ่งนี้ในไฟล์แบตช์ปกติ (CMD.exe) คุณอาจต้องเปิดหน้าต่างไว้แล้ว เพียงแค่แบ่งปันบางสิ่งที่ฉันพบเจอ แก้ไขเพื่อความกระจ่าง


-7
<a href="http://www.google.com/" target="_self">New Tab Example</a>

ทำงานใน IE7

ความนับถือ,

Glenn


8
Glenn นี่คือสิ่งที่ตรงกันข้ามกับสิ่งที่ OP ขอ _self จะเปิดเอกสารในหน้าต่างหรือกรอบเดียวกัน
Travega

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