# Angezeigte URL ändern?



## multimolti (9. November 2008)

Hallo!

Ich dachte, das sei unmöglich, aber es scheint doch irgendwie zu gehen: mit JavaScript die URL, die oben in der Adressleiste angezeigt wird, verändern (natürlich ohne auf eine andere Seite zu verlinken). 
Facebook macht das, wenn ich auf einem anderen Profil bin, sieht meine URL so aus:

```
http://www.facebook.com/profile.php?v=feed&id=646798359#/profile.php?v=feed&id=646798359&pub=2915120374
```
Und wenn ich dann auf "Share Link" klicke, ändert sich die Adresse in

```
http://www.facebook.com/profile.php?v=feed&id=646798359#/profile.php?v=feed&id=646798359&pub=2309869772
```
(es ändert sich nur der Parameter "pub")
Wie macht man sowas? Facebook hat den JavaScript Code natürlich "obfuscated" (kp wie das auf deutsch heißt), daher will ich mich da jetzt nicht durchwühlen.

Danke für eure Hilfe!


----------



## Gumbo (9. November 2008)

Diese Änderung findet im Fragment der URL statt, was keine erneute Anfrage auslöst. Dies wird häufig zusammen mit Ajax verwendet, um dennoch die Verlaufsfunktionen des Browsers nutzen zu können.


----------



## multimolti (9. November 2008)

Und wie genau macht man das? Gibt's ne fertige Funktion dafür?


----------



## Gumbo (9. November 2008)

Nimm einfach die aktuelle URL, tausche die gewünschten Daten aus und setz sie als neue aktuelle.


----------



## multimolti (9. November 2008)

Und wie mache ich das?


----------



## Gumbo (9. November 2008)

Die aktuelle URL steht im document.location-Objekt, entweder direkt zusammengesetzt in document.location.href oder die einzelnen Teile jeweils in document.location.protocol, document.location.host, etc. Damit kann die aktuelle URL beliebig verändert werden und anschließend mittels document.location.assign()-Methode wieder zugewiesen werden.


----------



## multimolti (9. November 2008)

Okay, vielen Dank! Das ist genau das, was ich haben wollte!


----------



## Noeden (9. Juni 2011)

Sorry, ich habe das gleiche Problem und verstehe es nicht ganz. 

Also ich möchte auch per AJAX Inhalte laden und die entsprechenden Get-Variabeln in der Adresszeile ändern und setzen, damit man auch über ein Lesezeichen dahinkommt, oder die URl verschicken kann. 

Wenn ich folgendes mache lädt er die Seite aber neu und ich lese irgendwie überall im Internet, dass man die Adresszeile nicht ändern könne ohne die Seite neu zu laden.


```
window.location.assign($(this).children("a").attr("href"));
```

PS Ich nutze das jQuery-FW

Dankeschonmal

PS: Mit document.loccation.assign das gleiche.


----------



## vadim_justus (23. Juni 2011)

Hallo Noeden,

bin gerade über diesen Eintrag gestolpert, da ich zur Zeit ein jQuery-Plugin entwickle, welches so funktioniert wie hier beschrieben. Hoffe es hilft dir und jedem der ebenfalls über diesen Eintrag stolpert weiter. http://www.dreiwerken.de/jquery-hashevent-plugin.html

Habe mich da auch von Facebook insperieren lassen, jedoch um die URL so zu manipulieren wie es Facebook macht, braucht man ein riesiges Workaround. Wenn ich das richtig verstehe greift Facebook sehr tief in die nativ-Funktionen des Browsers ein und verändert diese.

Mein Plugin arbeitet mit Hash-Tags. Das Ergebnis ist das Gleiche 

Viel Spaß damit und hoffe es hilft dem einen oder anderem bei seinem nächsten Projekt 

Viele Grüße
Vadim Justus


----------



## CPoly (12. August 2011)

Wollte hier auch noch kurz was einwerfen. Habe gerade mit der HTML5 history API gearbeitet (wie Facebook) und bin absolut begeistert. Alles was ich brauche ist


```
if ('replaceState' in history) {
    history.replaceState(null, document.title, url);
}
```

Firefox, Opera und Chromium funktioniert perfekt und IE ignoriert es. Damit kann ich absolut leben, weil meine AJAX Suchmaske vorher völlig ohne URL Änderung aus kam. Und ich habe keine Lust auf ein Workaround mittels Hash. Die drei Zeilen JavaScript konnte ich einfach in meine vorhandene Anwendung einbinden


----------

