wake-up-neo.com

JavaScript window.location einstellen

Momentan setze ich die Eigenschaft window.location.pathname, um den Benutzer zu einer relativen URL umzuleiten. Die neue URL enthält Parameter, sodass die JavaScript-Zeile folgendermaßen aussieht:

window.location.pathname = window.location.pathname.substring( 0, window.location.pathname.lastIndexOf( '/' ) + 1 ) + 'myPage.xhtml?u=' + selected_user.Username;

Dies ist in Firefox jedoch erfolgreich. Chrome codiert das Fragezeichen mit '% 3F' und die Anforderung schlägt anschließend fehl.

Ich bin nicht sicher, ob ich window.location richtig verwende. Muss ich Eigenschaften von window.location wie Pfadname oder href verwenden? Ich habe festgestellt, dass der Speicherort nach dem Festlegen einer Eigenschaft erneut geladen wird. Daher können beispielsweise die Eigenschaften für Suche und Pfadname nicht separat festgelegt werden. Kann window.location direkt gesetzt werden? Ich muss nur eine relative URL mit einem Parameter festlegen.

40
Mark

pathname und viele andere Eigenschaften von location und Links geben nur Teil der URL wieder:

http:  //www.example.com/path/to/example.html?param1=2&param3=4#fragment
^protocol^hostname      ^pathname            ^search           ^hash

Wie Sie sehen können, ist der Teil ?... Der URL nicht Teil des pathname; Es macht keinen Sinn, einen Wert mit ? bis location.pathname zu schreiben, da dieser Teil einer URL kein Fragezeichen enthalten darf. Chrome korrigiert Ihren Fehler, indem das Zeichen in eine Sequenz kodiert wird, die ein wörtliches Fragezeichen bedeutet, das pathname nicht beendet.

Diese Eigenschaften eignen sich hervorragend, um eine URL in ihre Bestandteile zu zerlegen, die Sie verarbeiten können. In diesem Fall möchten Sie jedoch wahrscheinlich nicht in sie schreiben. Schreiben Sie stattdessen an location.href. Dies stellt die gesamte URL dar, aber es ist vollkommen in Ordnung, eine relative URL dazu zu schreiben. Dies wird relativ zum aktuellen Wert berechnet, so dass das pathname überhaupt nicht gelesen und aufgeteilt werden muss:

location.href= 'myPage.xhtml?u='+encodeURIComponent(selected_user.Username);

Beachten Sie die URL-Kodierung. Wenn ein Benutzername andere Zeichen als alphanumerische Zeichen enthalten kann, benötigen Sie diese wahrscheinlich, um zu verhindern, dass Zeichen den Parameter verletzen. Codieren Sie beliebige Zeichenfolgen immer mit einer URL, bevor Sie sie in eine URL einfügen.

59
bobince

Versuchen Sie, location.href Eigenschaft anstelle von window.location.pathname.

13
Chris Laplante

Mit window.location.href wird als der sicherste Weg angesehen, eine URL zu setzen . Ich denke, dies sollte das Codierungsproblem beheben.

window.location.href = window.location.pathname.substring( 0, window.location.pathname.lastIndexOf( '/' ) + 1 ) + 'myPage.xhtml?u=' + selected_user.Username;

Wenn das nicht hilft, zeigen Sie bitte eine Beispiel-URL.

7
Pekka 웃