Gibt es eine Möglichkeit, firefox dazu zu bringen, Werte, die document.location.hash zugewiesen sind, nicht automatisch per URL zu dekodieren?

9

Ich benutze document.location.hash, um den Status auf der Seite beizubehalten, und ich setze URL-codierte Schlüsselwertpaare dort oben, getrennt durch "& amp;" Zeichen. So weit, ist es gut.

Ich stoße jedoch auf ein lästiges Problem mit Firefox - Firefox wird den Hash-Wert auf dem Weg leise url-dekodieren, also wenn Sie es später rausbekommen, wurde es entschlüsselt.

Ich kann das Problem patchen, indem ich erkenne, wenn ich Firefox starte und codeURIComponent zweimal auf dem Weg rufe, aber offensichtlich ist das scheußlich und ich will das nicht wirklich machen .

Hier ist ein einfaches Beispiel, in dem ich "=" als "% 3D" kodiere, es in den Hash einfüge, und wenn ich es später heraushole, wird es automatisch in "=" zurückverwandelt:

%Vor%

Ich drücke die Daumen, dass es vielleicht ein verstecktes DOM-Element gibt, das Firefox erstellt, das den tatsächlichen (nicht dekodierten) Hash-Wert darstellt?

Aber unter dem Strich - hat das schon irgendjemand erlebt und eine bessere Lösung gefunden als nur die Browser-Erkennung und den Aufruf von encodeURIComponent zweimal in Firefox?

HINWEIS: einige andere Fragen, die ich denke, haben die gleiche Ursache. Vor allem dieser:

Ссылка

    
nmealy 26.04.2011, 23:31
quelle

2 Antworten

1

Ich würde dringend davon abraten, den Hash-Wert zu verwenden, um den Status zu erhalten. Hash soll auf die Fragment-ID eines Objekts verweisen, wie in RFC 1630

erklärt
  

Dies repräsentiert einen Teil von, ein Fragment von oder eine Unterfunktion innerhalb von      Objekt. (...) Die Fragment-ID folgt der URL des gesamten Objekts, aus dem sie besteht      getrennt durch ein Rautenzeichen (#).

Gibt es etwas, das Sie davon abhält, Cookies zu verwenden, um den Status zu erhalten? Cookies sind einfach genug, um sie in JS, , die auf den Geko DOM Reference-Seiten beschrieben sind, zu verwenden, und würden dies ruhig tun , ohne Werte an die URL anzuhängen, die niemals hübsch ist.

Wenn Sie unbedingt Hash verwenden müssen, sollten Sie in Erwägung ziehen, '=' durch ein anderes Zeichen zu ersetzen, z. ":".

    
Jacek Ciolek 18.03.2012 02:09
quelle
0

Was Sie tun könnten, ist das Ändern des "=" zu etwas anderem mit

var string = string2.replace("=", "[$equals]")

Sie müssen die Zeile möglicherweise einige Male ausführen, abhängig davon, wie viele "=" es gibt.

Dann war der gleiche Prozess wie oben.

Hinweis: Wenn Sie es für weiteren Code benötigen, können Sie [$ equals] zurück auf "=" setzen, nachdem Sie den Hash in ein Array aufgeteilt haben.

    
dp4 19.06.2013 09:07
quelle

Tags und Links