web-dev-qa-db-de.com

Wie kann ich die Abfragezeichenfolge aus der URL entfernen, nachdem die Seite geladen wurde?

Ich habe eine URL mit einer langen Abfragezeichenfolge ... Nach dem Laden der Seite benötige ich keine Abfragezeichenfolge. Daher möchte ich die Abfragezeichenfolge aus der Adressleiste entfernen, ohne die Seite neu laden zu müssen.

Ich habe versucht parent.location.hash = ''; und window.location.href = '/#'

Sie haben keinen Unterschied gemacht.

23
Sangam254

Sie können dies nicht tun, ohne die Seite erneut zu laden. Stellen Sie sich vor, Sie könnten das, was Sie wollten, in die Adressleiste des Browsers einfügen. Sicherheitsspaß :)

Obwohl Sie jetzt in HTML5 (das funktioniert nur bei Browsern, die dies unterstützen) mit der neuen history-API arbeiten können, ist es realistisch, dass Ihr Szenario am besten ein Umschreiben rechtfertigt, anstatt das hinzuzufügen (scheint ein Hammer zu knacken eine Nuss).

Wie Sie sagten, Sie brauchen die Abfragezeichenfolge nicht, nachdem die Seite geladen wurde, sollten Sie wirklich zurückschreiben und dann nach Abschluss der Verarbeitung an eine andere URL umleiten.

7
mattytommo

Wie andere schon gesagt haben, können Sie dies mit der History API in modernen Browsern (IE10 +, FF4 +, Chrome5 +) tun. Es gab kein vollständiges Beispiel in den Antworten, also dachte ich, ich würde meine Lösung teilen, da ich gerade die gleiche Anforderung hatte:

history.pushState(null, "", location.href.split("?")[0]);

Wenn Sie Modernizr verwenden, können Sie auch prüfen, ob die History-API verfügbar ist:

if (Modernizr.history) {
    history.pushState(null, "", location.href.split("?")[0]);
}
36
germankiwi

Das ist in modernen Browsern mit der History-API erreichbar, aber wahrscheinlich nicht die beste Lösung für Ihr Problem.

history.replaceState({}, 'some title', '/');

Es klingt, als würden Sie die Daten besser verarbeiten und dann zur Homepage umleiten, anstatt ein HTML-Dokument direkt zurückzugeben.

Da Sie die URL nicht beibehalten möchten, ist sie für das Lesezeichen nicht hilfreich. Daher ist es wahrscheinlich, dass Sie besser eine POST -Anfrage stellen.

Dies legt nahe, dass Sie das POST-Redirect-GET-Muster verwenden sollten.

16
Quentin

Entfernen Sie den Wert der Abfragezeichenfolge aus der Adressleiste

var uri = window.location.toString();
if (uri.indexOf("?") > 0) {
    var clean_uri = uri.substring(0, uri.indexOf("?"));
    window.history.replaceState({}, document.title, clean_uri);
}
3
Fezal halai

Verwenden Sie history.replaceState({}, "Title", "page.html");

gleiche Syntax für pushState. Allerdings müssen Sie einen Weg finden, um IE das zu verstehen.

Ein besserer Weg wäre die Verwendung des Apache mod_rewrite-Moduls. Es ist ziemlich einfach zu benutzen.

2
d4rkpr1nc3

Ich habe das gleiche Problem gehabt. Meine Lösung war diese: Holen Sie sich die Anfrage wie folgt:

operation.aspx?opr=lock

Nach dem Beenden der Operation leiten Sie so um:

Response.Redirect("operation.aspx");

Wenn in der Antwort eine Nachricht angezeigt wird, drucke ich sie wie folgt aus:

if (Session["InfoMessages"] != null)
{
    lblMessage.Text = (string)Session["InfoMessages"];
    Session["InfoMessages"] = null;
}

Ich hoffe es hilft anderen :)

0
Recev Yildiz

Aktualisierter Code Nun wird es funktionieren

Fügen Sie einfach folgenden Code auf Ihrer Seite hinzu, dessen Link Sie ändern möchten.

// javascript function

   function buildLin(first) {
    var firs = first.toString()
       //alert(firs);
       //document.getElementById("team").value = "1";
           document.location.hash = "#" + firs.replace(/ /g, "_");
        //alert(document.location.hash);
    }

 //jQuery to call above function after page loads

  $(document).ready(function () {
      buildLin(2);
  });

Vergessen Sie nicht, http://code.jquery.com/jquery-latest.js .__ hinzuzufügen. auf Ihrer Seite

0
Code Spy

Ich möchte eine weitere Möglichkeit hinzufügen, dies zu tun, insbesondere für diejenigen, die $routeProvider Verwenden.

Wie in einigen anderen Antworten bereits erwähnt, verwenden Sie dazu Folgendes:

var yourCurrentUrl = window.location.href.split('?')[0]; 
window.history.replaceState({}, '', yourCurrentUrl ); 

oder indem Sie einen neuen Datensatz im Verlaufsstapel erstellen:

window.history.pushState({}, '', yourCurrentUrl );  

Für eine sehr ausführliche und nette Erklärung, wie man mit history.pushState Und history.replaceState Umgeht, lesen Sie dieser Beitrag auf SO .

Wenn Sie jedoch Angular $routeProvider In Ihrer App verwenden, wird diese Änderung trotzdem erfasst, wenn sie mit einem vorhandenen Muster übereinstimmt. Um dies zu vermeiden, vergewissern Sie sich, dass in Ihrem $routeProviderreloadOnSearch Flag auf false gesetzt ist, da es standardmäßig true ist.

Zum Beispiel:

$routeProvider.when("/path/to/my/route",{
   controller: 'MyController',
   templateUrl: '/path/to/template.html',
   //Secret Sauce
   reloadOnSearch: false//Make sure this is explicitly set to false
});
0
curiousBoy

Ich verwende dieses Code-Snippet in meinen persönlichen Projekten, in denen ich URL-Parameter entfernen muss, ohne sie erneut zu laden:

var newURL = location.href.split("?")[0];
window.history.pushState('object', document.title, newURL);
0
ChristianG