Sebastian: www.xyz.de/?parameter#anker

Hallo alle zusammen,

ich hab nen verdammten scheiß Fehler gemacht. Ich hab jemanden für ne Drucksache nen Link bzw. ne Adresse gegeben, ohne sie vorher frei zu schalten und zu testen, da der Inhalt noch nicht fertig war. Ich bemerkte erst nach dem Drucken mein Problem, nämlich das ich den Link, so wie er war, nicht zum funzen bekam. Da sich das Drucken nicht mehr rückgängig machen lässt, mir aber bis zur Veröffentlichung noch n paar Tage bleiben, versuche ich schon seit ner Weile, des in den Griff zu bekommen, nur "mit ohne" passenden Erfolg.

Problem: Da ich ein Frameset verwende und trotzdem Links direkt von außen auf Unterseiten verweisen können sollen, lade ich die Unterseiten über ein Parameter stehend nach dem netten Fragezeichen per JavaScript in den betreffenden Frame. Da ich nun für bewusste Sache mit Textankern zu hantieren begann, dachte ich, ich mach einfach nach dem Parameter noch ne Raute und den Anker und lese das auch per JavaScript aus. Das ergebe dann das Muster "www.xyz.de/?parameter#anker".
So weit so gut: Im MSIE geht sowas sogar, nur unter Mozillas und Operas und Konquerors muggt die Sache. Ich komm nicht an den Text nach der Raute rann, FireFox entfernt ihn sogar ganz aus der URI, was noch um so hässlicher ist.

Ich benötige: Möglichst ne Idee für einen der genannten Browser bzw. am besten ne allgemeingültige Crossbrowserlösung (falls einer Bock hat, mir beim bauen von einer zu helfen). Ich würde dabei gern den String der Parameter (im Beispiel "parameter") und des Ankers (im Beispiel "anker") oder einfach alles zusammen (also z.B. "?parameter#anker") in einer JavaScript-Variable stehen haben wollen, um die restliche Zerlegung ist schon gesorgt.

Mein bisheriger Ansatz:

function initframe(){

werta = location.search + ""
if(werta != ""){
  wertb = werta.split("?")
  if(wertb[1] != ""){

if(wertb[1].indexOf("%26")>-1){ werte = wertb[1].split("%26") } else { werte = wertb[1].split("&") }
   if(werte[0].length == 1){ spindex = 1 } else { spindex = 0 }
   if(werte[0].length == 1){ if(werte.length > 1){ initframel(werte[0],true) } else { initframel(werte[0],false) } } else { zeichne() }

wertc = ""

if(spindex > 0 && werte.length > 1){
    if(werte[spindex].length > 1){
     // Diese If-Schleife sucht nach einem zweiten Parameter, welches eine Version in einer jeweiligen Sprache einer Datei ansteuern kann.
     wertc = werte[0] + "ni4j__" + werte[spindex].split("%7C")[0] + ".htm"
    }
   } else {
    if(spindex == 0) {
     wertc = "dni4j__" + werte[spindex].split("%7C")[0] + ".htm"
    }
   }

alert(werte[spindex])  // Versucht ma, ob ihr eine brauchbare Ausgabe mit der Alertbox bekommt ...
   if(werte[spindex].split("%7C").length > 1){
    wertc = wertc + "#" + werte[spindex].split("%7C")[1]
   }

if(wertc.length > 0 && wertc.indexOf("fallback") == -1) {
    wertd = window.setTimeout("zielframe.location.href = '" + wertc + "'",1)
   }

} else weitereladefunktionen()
} else weitereladefunktionen()

}

"%7C" ist die Kodierung der Raute ("#").
Das Parameter "fallback" steht nicht für einen Dateinamen, sondern für Bildschirme mit weniger als 1024 px Breite, weswegen es auch aussortiert wird.
Zum Aufbau der Dateinamen:
Ich verwende Dateinamen des folgenden Musters: "dni4j__name.htm"
"d" ist die Sprache (hier Deutsch, "e" ist Englisch usw., "x" ist sprachneutral)
"ni4j" stammt noch aus den guten alten Zeiten von Netscape 4.X und MSIE 4. Dabei steht genau jene Zeichenfolge allgemein für Crossbrowser-Kompatibilität.
"name" steht für den wirklichen Inhalt.

Ich würde mich über jede Hilfe freuen
Beste Grüße
Sebastian

  1. hi,

    So weit so gut: Im MSIE geht sowas sogar, nur unter Mozillas und Operas und Konquerors muggt die Sache. Ich komm nicht an den Text nach der Raute rann, FireFox entfernt ihn sogar ganz aus der URI, was noch um so hässlicher ist.

    hast du es bereits über location.hash versucht?

    "%7C" ist die Kodierung der Raute ("#").

    warum sollte hier eine kodierung stattfinden?
    zum einen wird der URL doch, wenn ich richtig verstanden habe, vom benutzer direkt eingetippt und aufgerufen.
    wenn die raute kodiert wäre - dann würde sie ja nicht mehr zur abtrennung eines ankernamens dienen, sondern wäre teil des query strings.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Ich würde dabei gern den String der Parameter (im Beispiel "parameter") und des Ankers (im Beispiel "anker") oder einfach alles zusammen (also z.B. "?parameter#anker") in einer JavaScript-Variable stehen haben wollen, um die restliche Zerlegung ist schon gesorgt.

    document.URL oder habe ich da etwas falsch verstanden?

    Grüngrüß.

  3. function initframe(){

    werta = location.search + ""
    if(werta != ""){
      wertb = werta.split("?")
      if(wertb[1] != ""){

    if(wertb[1].indexOf("%26")>-1){ werte = wertb[1].split("%26") } else { werte = wertb[1].split("&") }

    Das ganze kannst du dir sparen, wenn du den Parameter einfach unescape() behandelst.

    if(spindex > 0 && werte.length > 1){
        if(werte[spindex].length > 1){
         // Diese If-Schleife sucht nach einem zweiten Parameter, welches eine Version in einer jeweiligen Sprache einer Datei ansteuern kann.

    Es gibt keine If schleifen.

    Der Rest ist mir jetzt zu undurchschaubar.

    Struppi.

  4. Hi Sebastian,

    schonmal daran gedacht auf # zu verzichten und stattdessen & zu verwenden... damit solltest du weniger probleme bekommen (zumindest wenn du Parameter und Anker an die URL anhängst)!

    Weiterhin kannst du dir ja mal folgendes anschauen und zu deinen Zwecken umbauen:

    <!--
    var url;
    var varget = window.location.href;
       var url = varget.substring(varget.indexOf("?")+1,varget.length);
       function varread() {
       fenster.location.replace(url);
    }
    //-->

    Sicher kannst du oben 2mal abfragen einmal komplett nach ? und ein weiteres mal nach & und dann deinen Anker anvisieren.

    Ich habe diesen Funktion dann über onload im Body-Element aufgerufen:

    onload="javascript:varread(url);"

    Viel Spaß damit...

    Grüße

    Uli

  5. Hi Sebastian,

    Da ich nun für bewusste Sache mit Textankern zu hantieren begann, dachte ich, ich mach einfach nach dem Parameter noch ne Raute und den Anker und lese das auch per JavaScript aus. Das ergebe dann das Muster "www.xyz.de/?parameter#anker".

    So weit so gut: Im MSIE geht sowas sogar, nur unter Mozillas und Operas und Konquerors muggt die Sache. Ich komm nicht an den Text nach der Raute rann, FireFox entfernt ihn sogar ganz aus der URI, was noch um so hässlicher ist.

    der anker ist nicht dafür gedacht, um als variable missbraucht zu werden.

    nimm doch ?variable:wert|variable2:wert2|undso:weiter, das splitst du erst nach "|", und dann nach ":".

    Gruß, Marian