Öffnen Sie die URL im selben Fenster und auf derselben Registerkarte


361

Ich möchte einen Link im selben Fenster und auf derselben Registerkarte öffnen, die die Seite mit dem Link enthält.

Wenn ich versuche, einen Link mithilfe von zu öffnen window.open, wird er in einer neuen Registerkarte geöffnet - nicht in derselben Registerkarte im selben Fenster.

Antworten:


600

Sie müssen das Namensattribut verwenden:

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

Bearbeiten : URL sollte mit Protokoll vorangestellt werden. Ohne es versucht, relative URL zu öffnen. Getestet in Chrome 59, Firefox 54 und IE 11.


2
Das zweite Argument ist nur ein Name für das neue Fenster, wie das Attribut target=tag a. Tatsächlich können Sie Ihr Fenster beliebig benennen. Sie müssen lediglich einen anderen Wert festlegen, damit er nicht im selben Fenster oder auf derselben Registerkarte geöffnet wird.
ijse

12
@ijse Tatsächlich gibt es einige spezielle Namen, von denen einer '_self' ist und sich auf den Gewinn / Tab bezieht, in dem der Code ausgeführt wird .;)
vdbuilder

5
'_self' ist in den MDN- Dokumenten [ developer.mozilla.org/en-US/docs/Web/API/Window/open] unter window.open () nicht angegeben . Eine browserübergreifendere Lösung ist die Verwendung von location.replace ().
Bryan Rayner

1
Der MDN-Link im obigen Kommentar ist eine automatische Verknüpfung zu einem 404. Der Link lautet developer.mozilla.org/en-US/docs/Web/API/Window/open
Groovecoder

_selfwird in Abschnitt 5.1.6 Durchsuchen der Kontextnamen der HTML5 W3C-Empfehlung vom 28. Oktober 2014 unter w3.org/TR/html/browsers.html#browsing-context-names erwähnt (ist aber window.locationimmer noch sauberer).
Dem Pilafian


62

Um sicherzustellen, dass der Link auf derselben Registerkarte geöffnet wird, sollten Sie verwenden window.location.replace()

Siehe das folgende Beispiel:

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

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


3
Der Browserverlauf wird nicht beibehalten, wir sollten ihn nicht verwenden. Versuchen Sie stattdessen window.open (" google.com", "_ top" ) Referenzlink geeksforgeeks.org/…
shitam_

2
Das ist gut für mich, danke Alter
Angelus Roman

28

Sie können es auf dieselbe Seite gehen lassen, ohne die URL anzugeben:

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

Das ist nicht die gleiche Seite. Es werden alle Abfragezeichenfolgen aus der vorhandenen URL entfernt.
Quentin

20

Wenn Sie Ihre Seiten in "frame" haben, dann "Window.open ('logout.aspx', '_ self')"

wird innerhalb desselben Frames umgeleitet. Also mit

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

Wir können die Seite als neue Anfrage laden.


11

Eine der bekanntesten Funktionen von Javascript ist das sofortige Abfeuern von On-Click-Handlern. Ich fand folgenden Mechanismus zuverlässiger als die Verwendung von location.href=''oder location.reload()oder 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);
}

Der obige Code ist auch hilfreich, um einen neuen Tab / Fenster zu öffnen und alle Popup-Blocker zu umgehen !!! Z.B

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);
}

10

Öffnen Sie eine andere URL wie einen Klick-Link

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

8

Müssen Sie verwenden window.open? Was ist mit window.location="http://example.com"?


5

window.open(url, wndname, params)Es hat drei Argumente. Wenn Sie nicht möchten, dass es im selben Fenster geöffnet wird, legen Sie einfach einen anderen wndnamen fest. sowie :

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

Hier sind die Details zu window.open(), Sie können darauf vertrauen!
https://developer.mozilla.org/en/DOM/window.open

versuche es ~~


7
Die Frage ist ganz klar, ob man im selben Fenster und auf derselben Registerkarte öffnen möchte !
SNag

2

Mit HTML 5 können Sie die Verlaufs-API verwenden .

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

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

Dann können Sie auf der nächsten Seite wie folgt auf das Statusobjekt zugreifen

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

1

Das ist ziemlich einfach. Öffnen Sie das erste Fenster alswindow.open(url, <tabNmae>)

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

und für die nächsten alle window.open verwenden gleiche Registernamen statt _self, _parentusw.



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> 

Es macht überhaupt keinen Sinn, ein erneutes Laden der aktuellen Seite auszulösen und diese dann in der nächsten Anweisung durch Laden einer neuen Seite abzubrechen.
Quentin

-3

Wie die Refs von MDN sagen, müssen Sie nur einen Namen für das neue window/ angeben tab.

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

Öffnen Sie in der aktuellen Registerkarte mit _self

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

Öffnen Sie in einer neuen Registerkarte mit _blank

vue Demo

    <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");
    },

Sie können den Namen des aktuellen Fensters nicht zuverlässig kennen. Befolgen Sie besser die Ratschläge aus dieser Antwort von 2011 und verwenden Sie den speziellen Namen _self.
Quentin

Ihr erstes Beispiel ist einfach falsch. _blank ist explizit ein unbenanntes neues Fenster oder eine neue Registerkarte.
Quentin

keineswegs! Wenn ich mich selbst einstelle, wird es auf der aktuellen Seite geöffnet, was für mich schlecht ist. Ich brauche nur eine neue Seite.
xgqfrms

Die Frage ist nicht, was Sie brauchen! Wenn Sie eine Frage zu dem, was Sie brauchen, beantworten möchten, finden Sie eine Frage, die Sie danach fragt.
Quentin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.