History.js Hash-Fallbacks im Internet Explorer und pushState-Problem

8

Ich implementiere eine Website, die ihre URLs dynamisch mit History.js einstellt, wenn neue Abschnitte über Ajax auf die Startseite geladen werden.

Dies scheint gut zu funktionieren, aber es gibt ein Problem mit dem Hash-Abschnitt in der URL, den History.js als Fallback in Internet Explorer erstellt.

Hier sind Beispiele für Links auf der Seite, die mit jquery erstellt wurden:

%Vor%

Die .htaccess-Datei leitet alle URLs wie Ссылка zu um Ссылка , wo das Javascript die URL analysiert und den entsprechenden Abschnitt über ajax-Anfragen im changeState-Handler lädt.

Das Javascript prüft auf URLs wie

%Vor%

AND für äquivalente Fallback-URLs, die in Internet Explorer erstellt wurden, d. h.

%Vor%

Das funktioniert alles OK - Also:

In Firefox , wenn ich die Site im Stammverzeichnis der Site öffne, Ссылка , und klicke auf einen Link Wie oben, wird der Inhalt geladen (im ChangeState-Handler), und die URL wird von History.pushState als:

gesetzt %Vor%

Wenn ich dann auf einen anderen Link klicke, wird die URL beispielsweise wie folgt gesetzt:

%Vor%

In IE wird der Inhalt geladen, wenn ich die Site im Stammverzeichnis der Site öffne und wie oben auf einen Link klicke, und die URL wird mit einem Hashwert wie folgt festgelegt:

%Vor%

Wenn ich dann auf den nächsten Link klicke, wird die URL wie folgt gesetzt:

%Vor%

Das Problem tritt auf, wenn ich eine Seite in IE öffne, die in Firefox als Lesezeichen gespeichert wurde, und nicht über den Hash in der URL. Nehmen wir unser übliches Beispiel:

%Vor%

Wenn ich diese URL direkt im Internet Explorer, über ein Lesezeichen oder durch Einfügen der URL in die Adressleiste des Browsers öffne, leitet der .htaccess erfolgreich um, die URL wird von der js-Datei analysiert und der Inhalt wird geladen. Wenn ich jedoch auf den Link category_b klicke, wird die URL von History.pushState auf:

gesetzt %Vor%

Was ich wirklich wollte, war die URL wie folgt zu setzen:

%Vor%

History.js scheint jedoch die gesamte vorherige URL als Basis-URL für nachfolgende Push-Zustände zu verwenden. Ich habe versucht, absolute URLs in History.pushState zu setzen, aber ohne Erfolg. Wie Sie im Codeblock oben sehen können, habe ich eine IE-spezifische pushState-Anweisung. Ich habe versucht, dies auf verschiedene Arten zu konfigurieren. Wie kann ich History pushState erkennen lassen:

%Vor%

als Basisteil der URL, an die der Hash-Abschnitt angehängt werden soll? Oder gibt es einen besseren Weg, sich dem zu nähern, als ich oben beschrieben habe?

    
Lemmy 06.06.2012, 21:01
quelle

1 Antwort

0

AFAIK, die History-API wird immer die gesamte URL (ohne Hash) verwenden, die für das erstmalige Laden der Seite angefordert wurde. Sobald die Seite geladen ist, können Sie die History-API verwenden, um zu ändern, was nach dieser anfänglichen URL kommt. Sie können Hash-Änderungen verwenden, um das nach der URL zu ändern. Es gibt jedoch keine Möglichkeit, Änderungen vorzunehmen, ohne die gesamte Seite neu zu laden / p>

Die einzige Option, die ich kenne, um das zu erreichen, wonach Sie suchen, besteht darin, dass Ihr Server alle URLs an Ihre gewünschte Basis-URL umleitet und dann Ihren Pfad, Dateinamen, Parameter, Hash usw. an Ihren Client weiterleitet Seite Router / Controller. Ich rate davon ab, weil (ohne zu viel Detail) Links von Ihrer Website, die auf Facebook geteilt werden, immer http://example.com/ oder was auch immer Ihre Basis-URL sein wird.

Meiner Meinung nach und in meiner Praxis verwende ich keine History-API und verwende stattdessen Hash-Änderungen, weil es überall funktioniert. Es ist nicht immer schön, aber ich denke, dass Sie sich bemühen sollten, neben dem Hash eine angemessene Webserver-Antwort für URLs zu haben. Dies ist eine besonders hässliche URL von meiner Website: Ссылка , aber wenn sie geladen ist In einem Browser antwortet der Server mit dem, was Sie hier sehen: Ссылка und dann lädt der clientseitige Controller, was Sie sehen Hiernach: Ссылка Das sollte dasselbe laden wie: Ссылка

    
curiouser 16.10.2015 04:12
quelle