fedderle: eval() 2mal im IE!

Habe ein kleines Problem!

Ich versuche mich ein bisschen in Ajax!
Jetzt möchte ich teilweise Javascript Funktionen per Ajax nachladen!
Habe also eine php Datei auf dem Server, in der ich die Javascript Funktionen ausgebe!
Sieht in etwa so aus:

$script = $script ."deletenewsbox = function(NID)"
  ."{"
  ." params = giveLoginParams();"
  ." params += "&NID="+ NID;"
  ." intLoadsite1('intern/admin/newsbox/deleteentry.php',         'updatenewsboxdiv'+ NID, params);"
  ."};";

echo "##". $script ."##";

also im Moment ist es noch so, dass diese Funktionen mit geladen werden, wenn eine bestimmte Seite vom Nutzer aufgerufen wird. Das heisst, der Browser erhält vom Server folgende Antwort:
<HTML-Code>##<javascript-code>##<html-code>

Das werte ich nun in javaascript aus und lasse nur über den javascriptcode (also alles zwischen den ## eval() laufen.

Das funktioniert im Firefox auch wunderbar.
Im IE funktioniert das genau einmal! Beim zweiten laden, wird der HTML Code der mitgeschickt wird nicht mehr angezeigt.
Habe versucht das zu umgehen, in dem ich sicherstelle, dass die Funktionen nur einmal an das eval geschickt werden.
Dann geht das auch im IE.
Aber wenn ich jetzt die Seite komplett neu aufrufe (also F5), dann muss ich ja von ausgehen, dass die Funktionen noch nicht geladen sind.
Aber der IE speichert sie anscheinend dauerhaft im Browserverlauf ab und der Fehler tritt wieder auf! Zumindest genau einmal! Beim ersten laden! Beim zweiten kann ich ja dann wieder ermitteln, dass die Funktionen schon geladen wurden! Lade sie also nicht mehr neu und der IE zeigt wieder den HTML code an!
Irgendjemand eine Idee???

Hoffe habe das hier jetzt verständlich erklären können.
Falls jemand eine insgesamt bessere Methode kennt, bin für alles offen!
Ich würde die Javascript Funktionen auch nicht so umständlich nachladen. Aber ich will gewählreisetet haben, dass man nicht irgendwie den javascript Quellcode dieser Funktionen sehen kann!
Gibt es da evtl eine leichtere Möglichkeit???
Dann könnte man das Problem ja leichter umgehen???

Danke schon mal im Vorraus!

Gruß fedderle

  1. Ich würde die Javascript Funktionen auch nicht so umständlich nachladen.

    Tipp: lass es!

    Aber ich will gewählreisetet haben, dass man nicht irgendwie den javascript Quellcode dieser Funktionen sehen kann!

    nach ein paar Blicken ins vorhandene JavaScript könntest du jederzeit mittels eines einfachen alert irgendwelchen Variableninhalt ausgeben, du musst nur wissen, wie sie heißt, einfach in die Browseradresszeile javascript:alert(Variable) eingeben und schon könntest du auch den Text deiner Funktion einsehen. Es ist aber mühsam, und ich wüsste nicht wozu (gibt es eigentlich irgendein Tool, das gleiches macht? Irgendein Firefox-Addon?).
    Aus dem gleichen Grund sehe ich aber auch nicht, warum du dir diese Mühe überhaupt machst.

  2. [...]

    Hoffe habe das hier jetzt verständlich erklären können.

    Neee...;)

    Ich würde die Javascript Funktionen auch nicht so umständlich nachladen. Aber ich will gewählreisetet haben, dass man nicht irgendwie den javascript Quellcode dieser Funktionen sehen kann!

    Ach, den kann man immer sehen, egal, was Du für Klimmzuege machst. Notfalls kann man auch die komplette Kommunikation zwischen Server und client mitschneiden.

    Ich habe aber auch noch keine einzige Zeile JS gesehen, die mir schuetzenswert genug erschienen waere...;)

    Wenn's darum geht, den Zugang zu erschweren: JS scramblen. Ohne diesem Unsinn einen tieferen Sinn andichten zu wollen, hier gibt's einen schönen Thread zum Thema: http://forum.de.selfhtml.org/archiv/2005/2/t102265/#m628784. Da findest Du auch weitere Links.

    cul,
    Falk

  3. Hallo,

    <HTML-Code>##<javascript-code>##<html-code>

    Das werte ich nun in javaascript aus und lasse nur über den javascriptcode (also alles zwischen den ## eval() laufen.

    Wenn du mit PHP eine JavaScript-Ressource erzeugen willst, dann bindest du das Script einfach über <script type="text/javascript" src="Script-URI"></script> ein und sendest im Script die richtigen Header:

    [code lang=php]<?php  
    header('Content-Type: application/x-javascript');  
    ?>
    

    deletenewsbox = function(NID) {
       params = giveLoginParams();
       params += "&NID="+ NID;
       intLoadsite1('intern/admin/newsbox/deleteentry.php',
          'updatenewsboxdiv'+ NID, params);
    };[/code]

    XMLHttpRequest und eval() brauchst du da gar nicht.

    Wobei dieses Beispiel natürlich Unsinn ist, weil das PHP-Script überhaupt nichts generiert und das eingebundene JavaScript völlig statisch ist. Man könnte es also genauso gut auch als einfache .js-Datei auf den Server legen, das kommt auf dasselbe heraus.

    Das funktioniert im Firefox auch wunderbar.
    Im IE funktioniert das genau einmal! Beim zweiten laden, wird der HTML Code der mitgeschickt wird nicht mehr angezeigt.

    Was heißt angezeigt? Welcher HTML-Code wird wie »mitgeschickt« und wie sollte er denn angezeigt werden?

    Habe versucht das zu umgehen, in dem ich sicherstelle, dass die Funktionen nur einmal an das eval geschickt werden.

    Aber der IE speichert sie anscheinend dauerhaft im Browserverlauf ab und der Fehler tritt wieder auf! Zumindest genau einmal! Beim ersten laden!

    Welcher Fehler tritt auf?

    Beim zweiten kann ich ja dann wieder ermitteln, dass die Funktionen schon geladen wurden!

    Wenn ein Dokument neu geladen wird, werden alle im Fenster definierten Variablen gelöscht; da speichert ein Browser nichts.

    Ich würde die Javascript Funktionen auch nicht so umständlich nachladen. Aber ich will gewählreisetet haben, dass man nicht irgendwie den javascript Quellcode dieser Funktionen sehen kann!

    Mit dieser Methode machst du es nur dir schwer, aber nicht demjenigen, der deinen Quellcode sehen will.

    Gibt es da evtl eine leichtere Möglichkeit???
    Dann könnte man das Problem ja leichter umgehen???

    Womöglich, was hast du denn vor? Was macht die ultrageheime Funktion denn? Soll die URI des Löschscriptes deleteentry.php geheim bleiben? Willst du das Script irgendwie absichern? Gegen was?

    Mathias

    1. Hallo! Danke für die Antworten:

      Also!
      Warum ich das mache: Die Funktion die ich hier gegeben habe ist ja nur eine von vielen!
      Das mit dem nachladen deshalb. Weil ich dachte man kann so den Code der Funktionen nicht sehen! Wollte damit quasi ein "halbsicheres" login verwirklichen!

      Mit Fehler meinte ich den html Code der nicht angezeigtz wird!
      Das ist der HTML Code der vom server mitgelierfert wird.
      Also: ich bekomme ja diese Antwort: <html-code>##javascript##<html-code>

      OK! Der einwand mit dem alert im link ist natürlich richtig! Hmm!

      Dann muss ich meine Frage wohl am besten umstellen und Fragen,
      wie ich ein Login mit Ajax realisisere! Naja da werd ich mir erst noch mal ein paar Tutorials anschauen!

      Ja wenn ein Dokument nachgeladen wird werden die variablen gelöscht das ist mir so weit klar! Nur komischerweise löscht der IE nicht die Funktionen die ich nachgeladen habe! Keine Ahnung warum! Macht der IE aber so! Hab es ausprobiert und die Funktionen sind troptz dass ich sie nicht neu lade noch bekannt!

      OK! Dann verwerf ich meinen Gedanken! Blebt aber die Frage, wie ich ein Login am besten in Ajax realisiere!
      Also für links zuu tutzorials oder sonstiges wäre ich sehr dankbar!
      Evtl habt ihr bessere Quellen als ich bei google finde! ;)

      Gruß fedderle!

      1. Hallo,

        Wenn du die Scripte schützen willst bzw. sie individuell generiert werden, dann machst du das genauso, wie du es bei HTML-Dokumente tust. Zum Beispiel mit PHP-Sessions und Sessions-Cookies. Wird keine gültige Session-ID per Cookie angegeben, bricht das Script ab.
        XMLHttpRequest ist dazu immer noch nicht notwendig.

        Mathias

        1. Danke Euch für die antworten!

          Hab nochmal über das ganz Nachgedacht und werde das jetzt komplett anders machen als ich es vorhatte! Danke für eure tipps!
          Frag mich selbst wieso ich auf diese Idee kam das so zu machen! War ja eigentlich total unsinnig! ^^

          Gruß

          fedderle!