เปิด URL ในหน้าต่างเดียวกันและในแท็บเดียวกัน


361

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

เมื่อฉันพยายามเปิดลิงก์โดยใช้ลิงก์window.openนั้นจะเปิดขึ้นในแท็บใหม่ไม่ใช่แท็บเดียวกันในหน้าต่างเดียวกัน

คำตอบ:


600

คุณต้องใช้แอตทริบิวต์ name:

window.open("https://www.youraddress.com","_self")

แก้ไข : URL ควรได้รับการต่อท้ายด้วยโปรโตคอล โดยไม่พยายามเปิด URL ที่เกี่ยวข้อง ทดสอบใน Chrome 59, Firefox 54 และ IE 11


2
อาร์กิวเมนต์ที่สองเป็นเพียงชื่อไปที่หน้าต่างใหม่เช่นแอตทริบิวต์ของแท็กtarget= aในความเป็นจริงคุณสามารถตั้งชื่อหน้าต่างของคุณตามที่คุณต้องการ ทุกสิ่งที่คุณต้องการคือตั้งค่าต่าง ๆ เพื่อไม่ให้เปิดในหน้าต่างหรือแท็บเดียวกัน
ijse

12
@ijse ที่จริงแล้วมีชื่อพิเศษไม่กี่ชื่อหนึ่งคือ '_self' ซึ่งหมายถึง win / แท็บรหัสกำลังทำงานอยู่;)
vdbuilder

5
ไม่ได้ระบุ '_self' ใน MDN [ developer.mozilla.org/en-US/docs/Web/API/Window/open]เอกสารบน window.open () โซลูชันข้ามเบราว์เซอร์ที่มากขึ้นคือการใช้ location.replace ()
Bryan Rayner

1
ลิงก์ MDN ในความคิดเห็นด้านบนเป็นการเชื่อมโยงอัตโนมัติไปยัง 404 ลิงก์คือdeveloper.mozilla.org/en-US/docs/Web/API/Window/open
groovecoder

_selfมีการกล่าวถึงในหัวข้อ5.1.6 การเรียกชื่อบริบทของคำแนะนำ HTML5 W3C 28 ตุลาคม 2557เวลา: w3.org/TR/html/browsers.html#browsing-context- ชื่อ (แต่window.locationยังคงสะอาดกว่า)
Dem Pilafian


62

เพื่อให้แน่ใจว่าลิงก์จะเปิดในแท็บเดียวกันคุณควรใช้ window.location.replace()

ดูตัวอย่างด้านล่าง:

window.location.replace("http://www.w3schools.com");

ที่มา: http://www.w3schools.com/jsref/met_loc_replace.asp


3
มันไม่รักษาประวัติการเรียกดูเราไม่ควรใช้มัน ลองใช้ window.open (" google.com", "_ top" ) ลิงก์อ้างอิงgeeksforgeeks.org/…
shyam_

2
นี้เป็นสิ่งที่ดีสำหรับฉันขอบคุณเพื่อน
Angelus Roman

28

คุณสามารถให้มันไปที่หน้าเดียวกันโดยไม่ต้องระบุ URL:

window.open('?','_self');

นั่นไม่ใช่หน้าเดียวกัน มันจะลบสตริงแบบสอบถามใด ๆ จาก URL ที่มีอยู่
Quentin

20

หากคุณมีหน้าเว็บของคุณอยู่ใน "frame" ดังนั้น "Window.open ('logout.aspx', '_ self')"

จะถูกเปลี่ยนเส้นทางภายในเฟรมเดียวกัน ดังนั้นโดยใช้

"Window.open('logout.aspx','_top')"

เราสามารถโหลดหน้าเว็บเป็นคำขอใหม่


11

หนึ่งในฟีเจอร์จาวาสคริปต์ที่โดดเด่นที่สุดคือการใช้งานตัวจัดการ onclick ได้ทันที ฉันพบว่ากลไกต่อไปนี้น่าเชื่อถือมากกว่าการใช้location.href=''หรือlocation.reload()หรือwindow.open:

// this function can fire onclick handler for any DOM-Element
function fireClickEvent(element) {
    var evt = new window.MouseEvent('click', {
        view: window,
        bubbles: true,
        cancelable: true
    });

    element.dispatchEvent(evt);
}

// this function will setup a virtual anchor element
// and fire click handler to open new URL in the same room
// it works better than location.href=something or location.reload()
function openNewURLInTheSameWindow(targetURL) {
    var a = document.createElement('a');
    a.href = targetURL;
    fireClickEvent(a);
}

โค้ดด้านบนยังมีประโยชน์ในการเปิดแท็บ / หน้าต่างใหม่และข้ามตัวบล็อกป็อปอัพทั้งหมด !!! เช่น

function openNewTabOrNewWindow(targetURL) {
    var a = document.createElement('a');
    a.href = targetURL;

    a.target = '_blank'; // now it will open new tab/window and bypass any popup blocker!

    fireClickEvent(a);
}



5

window.open(url, wndname, params)มันมีสามข้อโต้แย้ง หากคุณไม่ต้องการให้เปิดในหน้าต่างเดียวกันให้ตั้งค่า wndname อื่น เช่น:

window.open(url1, "name1", params); // this open one window or tab
window.open(url1, "name2", params); // though url is same, but it'll open in another window(tab).

นี่คือรายละเอียดเกี่ยวกับwindow.open()คุณสามารถไว้วางใจได้!
https://developer.mozilla.org/en/DOM/window.open

ลองดูสิ


7
คำถามชัดเจนเกี่ยวกับความต้องการที่จะเปิดในหน้าต่างเดียวกันและแท็บเดียวกัน !
SNag

2

กับ HTML 5 คุณสามารถใช้ประวัติศาสตร์ API

history.pushState({
  prevUrl: window.location.href

}, 'Next page', 'http://localhost/x/next_page');
history.go();

จากนั้นในหน้าถัดไปคุณสามารถเข้าถึงวัตถุสถานะได้

let url = history.state.prevUrl;
if (url) {
  console.log('user come from: '+ url)
}

1

นั่นเป็นเรื่องง่าย เปิดหน้าต่างแรกเป็นwindow.open(url, <tabNmae>)

ตัวอย่าง: window.open("abc.com",'myTab')

และต่อไปทุก window.open ใช้ชื่อแท็บเดียวกันแทน_self, _parentฯลฯ



1
   Just Try in button.

   <button onclick="location.reload();location.href='url_name'" 
   id="myButton" class="btn request-callback" >Explore More</button>

   Using href 

  <a href="#" class="know_how" onclick="location.reload();location.href='url_name'">Know More</a> 

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

-3

ตามที่ผู้อ้างอิงของ MDN กล่าวเพียงแค่ให้ชื่อใหม่window/tab /

https://developer.mozilla.org/en-US/docs/Web/API/Window/open#Syntax

เปิดในหน้าแท็บปัจจุบันโดยใช้ _self

<a
 href="url"
 target="_self">
   open
</a>
const autoOpenAlink = (url = ``) => {
  window.open(url, "open testing page in the same tab page");
}

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

สาธิต vue

    <div style="margin: 5px;">
        <a
            :href="url"
            @click="autoOpenAlink"
            target="_blank"
            >
            {{url}}
        </a>
    </div>

vue

    autoOpenAlink(e) {
        e.preventDefault();
        let url = this.url;
        window.open(url, "iframe testing page");
    },

คุณไม่สามารถรู้ชื่อของหน้าต่างปัจจุบันได้อย่างน่าเชื่อถือ ดีกว่าที่จะปฏิบัติตามคำแนะนำจากคำตอบ 2011 นี้และใช้ชื่อ _self พิเศษ
เควนติน

ตัวอย่างแรกของคุณผิดไป _blank คือหน้าต่างหรือแท็บใหม่ที่ไม่มีชื่อ
เควนติน

ไม่ใช่เลย! หากฉันตั้งค่า _self มันจะเปิดในหน้าปัจจุบันซึ่งไม่ดีสำหรับฉันฉันแค่ต้องการหน้าใหม่
xgqfrms

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