JavaScript: location.href เพื่อเปิดในหน้าต่าง / แท็บใหม่


389

ฉันมีไฟล์ JavaScript จากนักพัฒนาบุคคลที่สาม มันมีลิงค์ที่จะแทนที่หน้าปัจจุบันกับเป้าหมาย ฉันต้องการให้เปิดหน้านี้ในแท็บใหม่

นี่คือสิ่งที่ฉันมี:

if (command == 'lightbox') {
 location.href="https://support.wwf.org.uk/earth_hour/index.php?type=individual";
}

ใครช่วยฉันออกได้บ้าง

คำตอบ:


930
window.open(
  'https://support.wwf.org.uk/earth_hour/index.php?type=individual',
  '_blank' // <- This is what makes it open in a new window.
);

102
น่ากล่าวถึง: ไม่ว่าจะสร้างแท็บหรือหน้าต่างใหม่ขึ้นอยู่กับการตัดสินใจของเบราว์เซอร์ (การตั้งค่า)
jAndy

4
@alex ฉันได้แก้ไขคำตอบนี้เพื่อให้บิตสำคัญอ่านได้ หากคุณไม่อนุมัติการจัดรูปแบบของฉันฉันขอแนะนำให้ย่อ URL ให้สั้นลงเพื่อให้พารามิเตอร์ที่สองตรงกับขอบเขตที่ไม่ได้เลื่อน
Phrogz

5
@ErickBest ไม่ถูกต้อง "_blank"รับประกันว่าหน้าต่าง / แท็บจะใหม่ สิ่งอื่นใด (นอกเหนือจากชื่อพิเศษอื่น ๆ ) กำลังให้ชื่อเฉพาะกับหน้าต่างนั้นและลิงก์ที่ตามมาไปยังเป้าหมายนั้นจะนำหน้าต่างนั้นมาใช้อีกครั้ง jsFiddle
alex

2
นี่เป็นเพียงการทริกเกอร์การแจ้งเตือนการบล็อกป็อปอัพในเบราว์เซอร์สมัยใหม่ไม่ได้จำลองการ_blankคลิกสมอเลย
Nathan Hornby

22
เบราว์เซอร์ป้องกันป๊อปอัป
Jitendra Pancholi

24

หากคุณต้องการใช้location.hrefเพื่อหลีกเลี่ยงปัญหาป๊อปอัปคุณสามารถใช้การ<a>อ้างอิงที่ว่างเปล่าแล้วใช้จาวาสคริปต์เพื่อคลิก

บางอย่างเช่นใน HTML

<a id="anchorID" href="mynewurl" target="_blank"></a>

จากนั้นคลิกจาวาสคริปต์ดังต่อไปนี้

document.getElementById("anchorID").click();

13
ฉันหวังว่าจะมีวิธีแก้ปัญหานี้ แต่ก็ยังดูเหมือนว่าจะเรียกบล็อกป๊อปอัป (อย่างน้อยใน Chrome) ฉันรู้สึกว่าเบราว์เซอร์รู้ว่ามันเป็นการคลิกจาวาสคริปต์และให้ความแตกต่าง
Nathan Hornby

1
ขอบคุณนาธาน คุณค่อนข้างถูกต้อง คุณยังคงได้รับข้อความบล็อกป๊อปอัป ฉันคิดว่าฉันหายมัน ในทางทฤษฎีมันควรจะทำงาน แอนดรู
รูฟิลด์

2
$("#anchorID")[0].click(); เพื่อใช้โซลูชันนี้กับ jquery
theBell

1
Lol theBell ไม่ใช่ jQuery หากคุณเข้าถึง DOM Element โดยตรง[0]
Andre Figueiredo

7

window.open('https://support.wwf.org.uk/earth_hour/index.php?type=individual');คุณสามารถเปิดในหน้าต่างใหม่ที่มี หากคุณต้องการเปิดในแท็บใหม่ให้เปิดหน้าปัจจุบันในสองแท็บจากนั้นให้สคริปต์ทำงานช้าเพื่อให้ทั้งหน้าปัจจุบันและหน้าใหม่ได้รับ



0

ตัวอย่างเช่น:

    $(document).on('click','span.external-link',function(){
        var t               = $(this), 
            URL             = t.attr('data-href');        
        $('<a href="'+ URL +'" target="_blank">External Link</a>')[0].click();

    });

การทำงานตัวอย่างเช่น


เบราว์เซอร์ป้องกันป๊อปอัป
Millar248

1
หมายความว่าคุณมี adblock หรืออย่างอื่นที่บล็อกมัน พฤติกรรมเริ่มต้นควรจะทำงานภายใต้สภาวะปกติ
Andrey Seregin

0

คุณยังสามารถเปิดแท็บใหม่ที่เรียกไปยังวิธีการกระทำพร้อมพารามิเตอร์ดังนี้:

   var reportDate = $("#inputDateId").val();
   var url = '@Url.Action("PrintIndex", "Callers", new {dateRequested = "findme"})';
   window.open(window.location.href = url.replace('findme', reportDate), '_blank');

บรรทัดแรกและบรรทัดที่สองจำเป็นหรือไม่? มันจะไม่ทำงานหากไม่มีreportDateและurlตัวแปรใช่ไหม
เรียนรู้เพื่อความสนุก

คุณสามารถนำพารามิเตอร์ออกมาได้ (reportDate) แต่ url var นั้นสำคัญเนื่องจากมีการเรียกไปยังเมธอด action
Primoshenko
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.