window.open target _self v window.location.href?

71

Ich muss den Benutzer mit JavaScript umleiten. Welches ist die bevorzugte Methode?

window.open("webpage.htm", "_self");

oder

window.location.href = "webpage.htm";
Rebecca
quelle
öffnet der erste nicht ein neues Fenster? Ich bin mir eigentlich nicht sicher.
Shamim Hafiz
@ Gunner, Nein, es wird es im selben Fenster öffnen, daher das "_self"dort ...
Jacob Relkin
Wenn Sie _self durch _blank ersetzen, wird es in einem neuen Fenster geöffnet
DOK

Antworten:

83

Auf jeden Fall wird die zweite Methode bevorzugt, da Sie nicht den Overhead eines anderen Funktionsaufrufs haben:

window.location.href = "webpage.htm";
Jacob Relkin
quelle
1
Jacob lieferte eine bessere Erklärung als Or W. Frédéric Hamidi fügte der Antwort ebenfalls hinzu, und ich möchte die Antwort an Sie beide vergeben, aber anscheinend muss ich eine auswählen. Da Jacob zuerst geantwortet hat, geht die Antwort an Sie.
Rebecca
Es ist erwähnenswert, dass bei Verwendung dieser Methode die Verwendung eines Links wie ../../folder/page.aspx?Source=abcdnicht funktioniert. Ich musste die andere Methode verwenden, damit mein Link funktioniert, und selbst dann konnte ich "_self" nicht damit verwenden.
Christine268
4
Overhead des Funktionsaufrufs? Funktionsaufrufe haben zwar Kosten, aber ich bin mir nicht sicher, ob dies relevant ist. Ich gehe ausnahmsweise davon aus, dass Funktionsaufrufe heutzutage für alle praktischen Zwecke so effizient sind wie der Zugriff auf Eigenschaften. Bei JVM erwarte ich mit den Leistungssprüngen, die V8 gemacht hat, dasselbe hier. Stimmt hier etwas mit meiner Analyse nicht?
Faizan
1
Offensichtlich ist es keine einfache Eigenschaft, wenn der Browser aufgrund seiner Einstellung eine Aktion ausführt. Außerdem ist der Aufwand für das Aufrufen einer Funktion ein Tropfen auf den heißen Stein im Vergleich zu dem, was der Browser tut, um eine Seite tatsächlich zu laden. Also kaufe ich das Argument nicht.
Nafg
31

Hoffentlich wird jemand anderes durch das Lesen gerettet.

Bei Webkit-basierten Browsern ist Folgendes aufgetreten:

window.open("webpage.htm", "_self");

Der Browser würde abstürzen und sterben, wenn wir zu viele DOM-Knoten hätten. Als wir unseren Code auf die akzeptierte Antwort von:

location.href = "webpage.html";

alles war gut Wir haben eine Weile gebraucht, um herauszufinden, was das Problem verursacht hat, da nicht klar war, warum unsere Seite regelmäßig nicht geladen werden konnte.

Garry Polley
quelle
Bin gerade selbst darauf gestoßen. War sehr überrascht, konnte zunächst nicht herausfinden, worum es ging.
Antoni4
Airbnb Linter mag nicht location.herf. Erwähnen Sie das Fenster am Anfang ist das Muss.
Kick Buttowski
21

Wie andere gesagt haben, wird normalerweise der zweite Ansatz bevorzugt.

Die beiden Codefragmente sind jedoch nicht genau gleichwertig: Das erste setzt tatsächlich window.openerauf das Fensterobjekt selbst, während das zweite es zumindest unter Firefox unverändert lässt.

Frédéric Hamidi
quelle
6

Sie können weglassen windowund einfach verwenden location.href. Zum Beispiel:

location.href = 'http://google.im/';
Davidhiggins
quelle
3
window.location.href = "webpage.htm";
Oder Weinberger
quelle
-2

Bitte benutzen Sie dies

window.open("url","_self"); 
  • Der erste Parameter "url" ist der vollständige Pfad der Seite, die Sie öffnen möchten.
  • Der zweite Parameter "_self" wird zum Öffnen einer Seite auf derselben Registerkarte verwendet. Wenn Sie die Seite in einem anderen Tab öffnen möchten, verwenden Sie bitte "_blank".
Mohammed Shaheen MK
quelle
3
Diese Antwort steht der vorgeschlagenen Antwort direkt entgegen und kann zum Absturz von Browsern führen. Siehe meine Antwort in diesem Thread. Außerdem sagt dies nicht aus, warum man sich für diese Methode entscheiden würde, sondern nur, warum man sie verwenden soll.
Garry Polley