737 Stimmen

Aktualisierung der Adressleiste mit der neuen URL ohne Raute oder Neuladen der Seite

Ich habe entweder davon geträumt, dass Chrome (Dev-Channel) eine Möglichkeit implementiert, die Adressleiste per Javascript zu aktualisieren (den Pfad, nicht die Domäne), ohne die Seite neu zu laden, oder sie haben das wirklich getan.

Ich kann jedoch den Artikel nicht finden, den ich denken Ich habe gelesen.

Bin ich verrückt oder gibt es eine Möglichkeit, dies (in Chrome) zu tun?

p.s. Ich spreche nicht von window.location.hash usw. Wenn die obige Datei existiert die Antwort auf diese Frage unwahr sein wird.

3 Stimmen

@tobiaskienzler Als diese Frage im Jahr 2009 gestellt wurde, war das nicht möglich.

8 Stimmen

Nein, natürlich nicht. Aber jetzt ist sie es, die Fragen dasselbe zu verlangen. Schade nur, dass die andere eine veraltete Antwort akzeptiert hat (von Ihnen, wie ich festgestellt habe)... Wissen Sie was? Niemand hat gesagt, dass das "Original" das ältere sein muss, es gibt sogar Präzedenzfälle

0 Stimmen

@tobiaskienzler, auf die andere Frage gibt es keine überholte akzeptierte Antwort.

985voto

David Murdoch Punkte 85120

Dies ist jetzt in den meisten "modernen" Browsern möglich!

Hier ist der Originalartikel, den ich gelesen habe (veröffentlicht am 10. Juli 2010): HTML5: Ändern der Browser-URL ohne Aktualisieren der Seite .

Für einen tieferen Einblick in pushState/replaceState/popstate (auch bekannt als die HTML5 History API) siehe die MDN-Dokumente .

TL;DR, Sie können dies tun:

window.history.pushState("object or string", "Title", "/new-url");

Siehe meine Antwort auf Ändern Sie die URL, ohne die Seite neu zu laden. für eine grundlegende Anleitung.

3 Stimmen

Ah, die Funktionalität ist in WebKit und wurde vor ein paar Monaten eingeführt < bugs.webkit.org/show_bug.cgi?id=36152 >. Schöner Fund!

0 Stimmen

Dies kann jetzt in Chrome, Safari, FF4+ und IE10pp3+ geschehen! (Aus David Murdochs Antwort auf stackoverflow.com/questions/824349/ )

0 Stimmen

Was ist mit IE9 und darunter? Gibt es ähnliche Lösungen für sie?

198voto

Pawel Punkte 12592

Nur das ändern, was nach der Raute kommt - alte Browser

document.location.hash = 'lookAtMeNow';

Ändern der vollständigen URL. Chrome, Firefox, IE10+

history.pushState('data to be passed', 'Title of the page', '/test');

Dadurch wird ein neuer Eintrag in den Verlauf eingefügt, und Sie können mit der Taste Zurück zum vorherigen Zustand zurückkehren. Um die URL an Ort und Stelle zu ändern, ohne einen neuen Eintrag zum Verlauf hinzuzufügen, verwenden Sie

history.replaceState('data to be passed', 'Title of the page', '/test');

Versuchen Sie jetzt, diese in der Konsole auszuführen!

20 Stimmen

replaceState war genau das, was ich brauchte, danke für die Erweiterung der ursprünglichen Antwort.

1 Stimmen

Die Domäne und das Protokoll müssen mit dem Original übereinstimmen!', um zu verhindern, dass einige Angelseiten die URL der Adressleiste ändern.

3 Stimmen

Sie sollten keine absolute URL an diese Funktion übergeben. Wenn Sie das tun, müssen Sie sie höchstwahrscheinlich dynamisch aus dem aktuellen Schema, dem Host und dem Port aufbauen - was eine Menge Arbeit ist, wenn Sie einfach eine relative URL ("foo.html" oder sogar "/foo.html") angeben und den Browser sich darum kümmern lassen könnten.

37voto

metamagikum Punkte 1117

Update zu Davids Antwort auf auch Browser erkennen, die Pushstate nicht unterstützen :

if (history.pushState) {
  window.history.pushState(stateObj, "title", "url");
} else {
  window.history.replaceState(stateObj, "title**", 'url');
  // ** It seems that current browsers other than Safari don't support pushState
  // title attribute. We can achieve the same thing by setting it in JS.
  document.title = "Title";
}

stateObj

Das state-Objekt ist ein JavaScript-Objekt, das mit dem an die replaceState-Methode übergebenen Verlaufseintrag verknüpft ist. Das state-Objekt kann null sein.

Titel

Die meisten Browser ignorieren diesen Parameter derzeit, obwohl sie ihn möglicherweise in Zukunft verwenden werden. Die Übergabe der leeren Zeichenkette hier sollte vor zukünftigen Änderungen an der Methode sicher sein. Alternativ können Sie auch einen kurzen Titel für den Status übergeben.

url Optional

Die URL des Historieneintrags. Die neue URL muss denselben Ursprung haben wie die aktuelle URL; andernfalls löst replaceState eine Ausnahme aus.

25 Stimmen

Document.location.href lädt die Seite neu

1 Stimmen

Hm, ich sehe die Kompatibilität in caniuse ( pushstate y Ersetzen Sie ), beide sind gleich, es ist keine Unterstützung für alte Browser

18voto

Kevin Mendez Punkte 552
var newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + '?foo=bar';
window.history.pushState({path:newurl},'',newurl);

11 Stimmen

Dieser Codeschnipsel kann die Frage zwar lösen, einschließlich einer Erläuterung trägt wirklich dazu bei, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für künftige Leserinnen und Leser beantworten, die die Gründe für Ihren Code-Vorschlag möglicherweise nicht kennen.

0 Stimmen

@MaxiMouse danke für Ihren Vorschlag, ich werde ihn berücksichtigen.

4 Stimmen

Vorgeschlagene Bearbeitung: const url = new URL(window.location); url.searchParams.set('foo', 'bar'); window.history.pushState({}, '', url);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X