Wowbagger: Cookies, Frames und der NN

Hallo forumsgemeinde,

ich habe da ein kleines problem mit cookies, sofern ich diese gemeinsam mit frames und dem NN einsetzte...die konstellation ist wie folgt:

Ich habe eine formularseite in einem frame, welche ihre daten in einem cookie ablegt. Nun kann man diese seite über diverse links verlassen, welche sich innerhalb einer menubar eines anderen frames befinden. Beim onUnload sollten die ganzen daten dann im cookie hinterlegt werden, was bei o.g. konstellation im verbindung mit dem NN-dinosaurier nicht so recht funktionieren will (IE wie immer völlig problemlos). Ohne frames funktioniert die identische formularseite dann allerdings auch im NN reibungslos.
Mir ist bei der ganzen angelegenheit ganz ehrlich gesagt *nicht* so recht klar, wo jetzt genau das problem liegt, bzw. wo ich noch näher danach suchen sollte (cookies in verbindung mit frames? onUnload-event-handler in verbindung mit frames? oder...?)

Hat jemand vielleicht schon einmal etwas ähnliches erlebt? Oder liege ich mit meinen "problem-theorien" völlig daneben? (ich hab' mir den source verkniffen, weil ein wenig umfangreich und weil das problem nicht so ganz eindeutig ist...das forum ist ja auch kein debugger :-))

Bis denn, dann
/*,*/
Wowbagger

  1. Hallo forumsgemeinde,

    ich habe da ein kleines problem mit cookies, sofern ich diese gemeinsam mit frames und dem NN einsetzte...die konstellation ist wie folgt:

    Also erstmal was grundsätliches zu dem Thema:
    Beim Netsi und dem IE werden die cookies etwas anders verwaltet. eine ausführliche doku zu dem thema findest du auf den netscape-developers server. ich habe dieses problem umgangen in dem ich die cookies in das framset fenster geschrieben habe. zusätzlich ist noch zu sagen das ich mit den onLoad und onUnload events immer etwas probleme bei dem ns hatte.

    das nachfolgende script sollte hauptsächllich das problem lösen das der anwender bei verschiedenen kontakt formularen nicht immer wieder sein namen eingeben musste. es funktioniert aber inerhalb eines framsets 100%tig.

    Zum Script: das formular hies allg. es wird über onLoad und ein Send button gesteuert. es enthält zusätzlich noch eine komplette formular überprüfung. laufend kannst du dir das auf www.walter-lohse.de anschauen.

    <script language="JavaScript">

    var cont="0123456789/-"
    var cont2="01234567890.@_abcdefghijklmnopqrstuvwxyz"
    var nix="keine#nicht vorhanden#-#%#"

    // Ist Element  ausgefüllt oder gecheckt wir Forces gefordert
    function contex_check(element,forces) {
    test = plausi_check(element,false)

    if (test == "") test = plausi_check(forces,true)
    if (test == "-") test = ""

    return test

    }
    // Ist force gesetzt wird eine leeres Feld als Fehlerhafte eingabe gewehrtet
    function plausi_check(element,force) {

    if (element.type == "text") {return inhalt_ana(element.name,element.value,force)}
    if (element.type == "radio") { if (element.checked == true)  return "";
                    else return "-"; }

    if (element.type == "checkbox") { if (element.checked == true)  return "";
                    else  return "-";
            }

    return "";

    }
    function inhalt_ana(wie,was,soll) {

    if (was == "" && soll == true) return "\n"+wie+" wurde nicht ausgefüllt."
            if (was == "")  return ""
            if (wie =="Nachname") return check_name(was,3,wie) ;
    if (wie =="Vorname") return check_name(was,2,wie) ;
    if (wie =="Email")return check_email(was) ;
    if (wie =="Telefon")return check_number(was,wie) ;
    if (wie =="Betreff")return check_name(was,2,wie) ;
    if (wie =="Strasse")return check_name(was,3,wie) ;
    if (wie =="PLZ") return check_number(was,5,wie) ;
    if (wie =="Ort") return check_name(was,2,wie) ;
    if (wie =="Nachricht") return check_name(was,5,wie) ;
    return "" ;
    }

    function check_name(was,min,wie) {
    if (was.length < min) return "\n"+wie+": Eingabe ist zu kurz um sinnvoll zu sein.";
    return "" ;
    }

    function check_email(was) {

    if ( was.indexOf("@") == -1 ) return "\n"+was+": Ist keine Gültige E-Mail Adresse";
    if ( was.substring(0,was.indexOf("@")).length < 3 was.substring(was.indexOf("@"),was.length).length < 5 was.substring(was.indexOf("@"),was.length).indexOf(".") == -1 )  return "\n"+was+": Fehlerhafte Email-Adresse.";
    x = illegal(was.toLowerCase(),cont2);
    if ( x != "" ) return "\n"+wie+": Email enthält folgende ungültige Zeichen: \n\t "+x;
    return ""

    }

    function check_number(was,min,wie) {

    if  (was.length < min )  return "\n"+wie+": Eingabe ist zu kurz um sinnvoll zu sein.";
    x = illegal(was,cont);
    if ( x != "" ) return "\n"+wie+": Eingabe enthält folgende ungültige Zeichen: \n\t "+x;
    return ""

    }

    function illegal(test,mit) {
    var x = ""
    for (var a=0 ;  a<= test.length ; a++ ) {
      if (mit.indexOf(test.charAt(a)) == -1) x = x + test.charAt(a)
      }
    return x
    }

    function doit(fail_txt) {
    var err_header = "<HTML><HEAD></HEAD><BODY><b>Bei der analyse Ihrer Eingabe traten folgende Fehler auf:<br><br></b>";
    var err_header ="Es traten in Ihrer Eingabe folgende Fehler auf:\n\n"
    err = contex_check(document.allg.kontakt[0],document.allg.Email);
    err = err +plausi_check(document.allg.Nachname,true)
    err = err +contex_check(document.allg.Anrede[0],document.allg.Vorname)
    err =  err + contex_check(document.allg.Anrede[1],document.allg.Vorname)
    err = err + contex_check(document.allg.kontakt[1],document.allg.Telefon)
    err = err +contex_check(document.allg.kontakt[2],document.allg.Strasse)
    err = err +contex_check(document.allg.kontakt[2],document.allg.Hausnummer)
    err = err + contex_check(document.allg.kontakt[2],document.allg.Ort)
    err = err +contex_check(document.allg.kontakt[2],document.allg.PLZ)
    err =err + plausi_check(document.allg.Betreff,true)
    err =  err +plausi_check(document.allg.Nachricht,true)

    if (err != "") {
            alert(err_header+err+fail_txt)
            return "-"
            }
    if (err == "" ) return ""

    }
    function do_send() {
    err = doit("\n Das Formular wurde nicht gesendet !")
    if (err == "") {
            document.allg.submit();
            write_cookie();
            }
    }
    function get_cookie()
    {
         var Wert = "";
         if(parent.document.cookie)
         {
          Wertstart = parent.document.cookie.indexOf("=") + 1;
          Wertende = parent.document.cookie.indexOf(";");
          if(Wertende == -1) Wertende = parent.document.cookie.length;
          Wert = parent.document.cookie.substring(Wertstart,Wertende);
         }
         return Wert;
    }

    function output_cookie(was) {
    fill_in = was.split("#");
    if ( fill_in.length < 9 ) return;
    document.allg.Anrede[0].checked = ( fill_in[0] == "Herr" ) ? true : false ;
    document.allg.Anrede[1].checked = ( fill_in[0] == "Frau" ) ? true : false ;
    document.allg.Anrede[2].checked = ( fill_in[0] == "Firma" ) ? true : false ;
    document.allg.Vorname.value = fill_in[1]
    document.allg.Nachname.value = fill_in[2]
    document.allg.Email.value = fill_in[3]
    document.allg.Telefon.value = fill_in[4]
    document.allg.Strasse.value = fill_in[5]
    document.allg.Hausnummer.value = fill_in[6]
    document.allg.Ort.value = fill_in[7]
    document.allg.PLZ.value = fill_in[8]
    document.allg.titel.value = fill_in[9]
    }

    function write_cookie()
    {
    was = ( document.allg.Anrede[0].checked == true ) ? "Herr#" : "";
    was = ( document.allg.Anrede[1].checked == true) ? "Frau#" : was;
    was = ( document.allg.Anrede[2].checked == true ) ? "Firma#" : was;
    was = was + document.allg.Vorname.value +"#";
    was = was + document.allg.Nachname.value +"#";
    was = was + document.allg.Email.value +"#";
    was = was + document.allg.Telefon.value +"#";
    was = was + document.allg.Strasse.value +"#";
    was = was + document.allg.Hausnummer.value +"#";
    was = was + document.allg.Ort.value +"#";
    was = was + document.allg.PLZ.value +"#";
    was = was + document.allg.titel.value +"#";
         var jetzt = new Date();
         var Auszeit = new Date(jetzt.getTime() + 1000*60*60*24*730 );
         parent.document.cookie = "Benutzer="+was+"; expires="+Auszeit.toGMTString()+";";
        }

    function do_save()
    {
    err = doit("\n Die Daten wurden nicht gespeichert !")
    if (err == "") write_cookie()
    }

    function do_load()
    {
    load = get_cookie()
    if (load != "") output_cookie(load)
    }

    </script>

    so ich hoffe ich kriege von niemanden mecker weil ich keine lust hatte das ding auseinander zu klabüstern..

    Timo