Buka URL di jendela yang sama dan di tab yang sama

361

Saya ingin membuka tautan di jendela yang sama dan di tab yang sama yang berisi halaman dengan tautan itu.

Ketika saya mencoba membuka tautan dengan menggunakan window.open, maka tautan itu terbuka di tab baru — bukan di tab yang sama di jendela yang sama.

pengguna1065055
sumber

Jawaban:

600

Anda perlu menggunakan atribut nama:

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

Sunting : Url harus diawali dengan protokol. Tanpa itu mencoba membuka url relatif. Diuji di Chrome 59, Firefox 54 dan IE 11.

vdbuilder
sumber
2
Argumen kedua hanyalah nama ke jendela baru, seperti atribut target=tag a. Bahkan, Anda dapat memberi nama jendela apa pun yang Anda suka. Yang Anda butuhkan hanyalah menetapkan nilai yang berbeda, sehingga tidak akan terbuka di jendela atau tab yang sama.
ijse
12
@ijse Sebenarnya, ada beberapa nama khusus, salah satunya adalah '_self' yang merujuk pada win / tab yang digunakan oleh kode.;)
vdbuilder
5
'_self' tidak ditentukan dalam dokumen MDN [ developer.mozilla.org/en-US/docs/Web/API/Window/open] di window.open (). Solusi lintas-browser lainnya adalah dengan menggunakan location.replace ().
Bryan Rayner
1
Tautan MDN dalam komentar di atas secara otomatis terhubung ke 404. Tautan adalah developer.mozilla.org/en-US/docs/Web/API/Window/open
groovecoder
_selfdisebutkan di bagian 5.1.6 Menjelajahi nama konteks dari Rekomendasi HTML5 W3C 28 Oktober 2014 di: w3.org/TR/html/browsers.html#browsing-context-names (tetapi window.locationmasih lebih bersih).
Dem Pilafian
62

Untuk memastikan bahwa tautan dibuka di tab yang sama, Anda harus menggunakan window.location.replace()

Lihat contoh di bawah ini:

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

Sumber: http://www.w3schools.com/jsref/met_loc_replace.asp

andromeda
sumber
3
Itu tidak menjaga riwayat penjelajahan, kita tidak harus menggunakannya. alih-alih coba window.open (" google.com", "_ top" ) tautan referensi geeksforgeeks.org/…
shyam_
2
ini baik untuk saya, terima kasih Bung
Angelus Roman
28

Anda dapat membawanya ke halaman yang sama tanpa menentukan url:

window.open('?','_self');
Tom Berthold
sumber
Itu bukan halaman yang sama. Ini akan menghapus string kueri apa pun dari URL yang ada.
Quentin
20

Jika Anda memiliki halaman Anda di dalam "bingkai" maka "Window.open ('logout.aspx', '_ self')"

akan diarahkan ke dalam bingkai yang sama. Jadi dengan menggunakan

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

kami dapat memuat halaman sebagai permintaan baru.

Magesh
sumber
11

Salah satu fitur javascript yang paling menonjol adalah untuk mengaktifkan penangan onclick on the fly. Saya menemukan mekanisme berikut lebih dapat diandalkan daripada menggunakan location.href=''atau location.reload()atau 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);
}

Kode di atas juga membantu untuk membuka tab / jendela baru dan melewati semua pemblokir pop-up !!! Misalnya

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);
}
Muaz Khan
sumber
10

Buka url lain seperti tautan klik di

window.location.href = "http://example.com";
DarckBlezzer
sumber
8

Apakah Anda harus menggunakan window.open? Bagaimana dengan menggunakan window.location="http://example.com"?

Jeffrey Zhao
sumber
5

window.open(url, wndname, params), ia memiliki tiga argumen. jika Anda tidak ingin itu terbuka di jendela yang sama, cukup tetapkan wndname yang berbeda. seperti :

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).

Berikut detailnya window.open(), Anda bisa mempercayainya!
https://developer.mozilla.org/en/DOM/window.open

Selamat mencoba ~~

ijse
sumber
7
Pertanyaannya sangat jelas tentang keinginan untuk membuka di jendela dan tab yang sama !
SNag
2

Dengan html 5 Anda dapat menggunakan API riwayat .

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

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

Kemudian pada halaman berikutnya Anda dapat mengakses objek keadaan seperti itu

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

Cukup mudah. Buka jendela pertama sebagaiwindow.open(url, <tabNmae>)

Contoh: window.open("abc.com",'myTab')

dan untuk semua window.open selanjutnya, gunakan nama tab yang sama, bukan _self, _parentdll.

Samit
sumber
1

Persis seperti ini window.open("www.youraddress.com","_self")

Terima kasih
sumber
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> 
Siddharth Shukla
sumber
Sama sekali tidak masuk akal untuk memicu pemuatan ulang halaman saat ini dan kemudian membatalkannya di pernyataan berikutnya dengan memuat halaman baru.
Quentin
-3

Sebagai ref MDN mengatakan, hanya perlu memberikan nama baru window/ tab.

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

buka di halaman tab saat ini menggunakan _self

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

buka di halaman tab baru menggunakan _blank

demo 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");
    },
xgqfrms
sumber
Anda tidak dapat dengan andal mengetahui nama jendela saat ini. Lebih baik mengikuti saran dari jawaban 2011 ini dan menggunakan nama _self khusus.
Quentin
Contoh pertama Anda salah. _blank, secara eksplisit, adalah jendela atau tab baru tanpa nama .
Quentin
tidak semuanya! jika saya mengatur _self, itu akan terbuka di halaman saat ini yang buruk bagi saya, saya hanya perlu satu halaman baru.
xgqfrms
Pertanyaannya bukan tentang apa yang Anda butuhkan! Jika Anda ingin menjawab pertanyaan tentang apa yang Anda butuhkan, maka temukan pertanyaan yang menanyakannya.
Quentin