somebody1981: Nachgeladenes Javascript entfernen

hallo liebe profis,

ich habe ein kleines problem mit dem nachladen von inhalten über ajax in welchen javascript enthalten ist! nein, nicht das beliebte thema, wie führe ich es aus, sondern komplett anders!

wie werde ich es wieder los???

ich lade über ajax (mein bevorzugtes framework is mootools) diversen content eines cms nach. in manchen resposes ist auch javascript drin!

ich habe mir nun einen kleinen parser gebastelt, der den resposetext nach skriptelementen durchsucht und diese an den richtigen stellen im document platziert (alle mit src in head, die anderen ans ende in den body).

um multiscripting zu verhindern checkt der nun auch, dass das script im head oder im body nicht vorhanden ist und bei jedem neuen request, räumt er vorher auch wieder auf ... also alle nachgeladenen werden wieder gelöscht.

aber genau hier liegt da problem!!!!

z.B. ist in einem conten swfobject enthalten ... das ist nach dem entfernen aus dem head anscheinend immer noch aktiv, denn es erzeugt fortwährend fehler, obwohl das scripttag schon längst weg ist!

kennt also bitte irgendjemand eine möglichkeit, wie ich die sachen wieder loswerde?? uneval() gibts ja leider net :(

vielleicht seh ich auch vor lauter bäumen den wald nicht mehr :(
wär aber trotzdem total lieb, wenn mir einer von euch profis hier mal einen tipp geben könnte!!

mit freundlichen grüßen
some

  1. Hallo!

    z.B. ist in einem conten swfobject enthalten ... (...) kennt also bitte irgendjemand eine möglichkeit, wie ich die sachen wieder loswerde?? uneval() gibts ja leider net :(

    Setze das Objekt auf null und grüße den Garbage Collector:

    swfobject = null;

    Gruß, LX

    --
    RFC 1925, Satz 3: Mit ausreichendem Schub fliegen Schweine wunderbar. (...)
    1. hallo lx,

      und danke für deine schnelle antwort! und ja du hst recht, das sollte funktionieren, cool.

      doch gibt es vielleicht eine allgemeinere lösung. das nächste mal isses vielleicht nich mehr swfobject. geht ja wie gesagt um ein cms (genauer in diesem fall ein joomla 1.5.x) was recht modular ist und ich würde mich ungern von vornherein einschränken, weis also nich, was in 3 monaten geladen wird.

      und um deinen ansatz, der wirklich eigentlich sehr cool ist, allgemeingültig machen, müsste meine loader-klasse ja alle geladenen skripte nach eventuellen objekten, klassen oder variablen durchsuchen, diese speichern und beim erneuten request nullen ... das wär etwas heavy.

      aber trotzdem vielen lieben dank. darauf wär ich schon erstmal nich gekommen ;)

      lg
      some

      1. Lieber somebody1981,

        doch gibt es vielleicht eine allgemeinere lösung. das nächste mal isses vielleicht nich mehr swfobject. geht ja wie gesagt um ein cms (genauer in diesem fall ein joomla 1.5.x)

        sprechen wir hier von Besucherseiten, oder von Bearbeitungsseiten, auf denen Du Deine JavaScripte filtern willst? Im ersteren Falle ist das ein klarer Fall von Designkatastrophe, da die Seiten für den Besucher absolut auch ohne JavaScript nutzbar sein müssen. Bei Bearbeitungsseiten ist das etwas anderes. Da kommen nur angemeldete Besucher hin. Also um welche Art von Seiten handelt es sich bei Dir?

        Liebe Grüße,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. hallo felix,

          ich habs doch gewusst, nennt man joomla tangiert man recht schnell den bereich noob :-D
          nein, nur spass! ich bin keiner von diesen templatejockey, die dann nicht mal ein css selber umstylen können. ich beschäftige mich schon seit der 1.0.x version sehr intensiv mit diesem cms bzw. seit der 1.5 wohl treffende als framework zu bezeichnen. ergo ... lassen wir das mal bitte bei seite ich hätte genau so typo, drupal o.ä schreiben können ;)

          bitte sei mir jetzt auch nicht böse und bitte glaub mir, dass ich für jede antwort hier dankbar bin, doch meine frage bezog sich keinesfalls auf abwärtskompatiblität. welche ich natürlich gewährleiste!! hat der user nämlich kein js an läuft alles wie wie gehabt ... muss er halt auf ein paar js-gimmicks verzichten!

          aber ich danke dir trotzdem, dass du dir die mühe gemacht hast, den beitrag zu lesen und dich mit meinem problem zu beschäftigen!

          lg
          some

          1. hallo nochmal,

            nachdem ich mich nun 2 stunden durch die endlosen weiten des netzes gequält hab, steht wohl fest, dass einmal geladene/definierte funktionen und co. im speicher festsitzen bis die seite erneut geladen wird. da man das ja versucht mit ajax zu umgehen hat man ein problem :(

            nun denn, da werde ich mich mal ranmachen, den weg von lx weiter zu verfolgen!

            lieben dank nochmal an alle.

            lg
            some

            1. nachdem ich mich nun 2 stunden durch die endlosen weiten des netzes gequält hab, steht wohl fest, dass einmal geladene/definierte funktionen und co. im speicher festsitzen bis die seite erneut geladen wird. da man das ja versucht mit ajax zu umgehen hat man ein problem :(

              Wieso versucht man das mt AJAX zu umgehen?
              Mit AJAX kannst du dynamisch Inhalte nachladen, aber das dabei JS nachgeladen wird halte ich eher für einen konzeptionelles Problem. Ich würde versuchen beides voneinander zu trennen.

              Struppi.

              1. hallo struppi,

                ich denke, dass du da definitv nicht falsch liegst. nur liegt leider die konzeption - will ich nicht zu viel am core verändern oder möglichst viel funktionalität des cms jür leute ohne js beibehalten - leider nicht in meiner macht liegt. das cms ist eben enorm modular und ich möchte das ajax-framework (wenn man es derzeit überhaupt so nennen kann) ja nicht nur für eine spezifische seite verwenden, sondern schon so allgemein, wie nur irgend möglich halten.

                doch ich bin grad an einem versuch an der konzeptionsschraube auch ein wenig zu drehen, in dem ich ich noch ein bis zwei serverseitige sachen zwischenschalte, die aber nur von meiner js-klasse bedient werden, so dass der user ohne js damit gar nich konfrontiert wird.

                diese sollen mir dann eine saubere trennung zwischen content und js ermöglichen und mir gleich noch sauberes json zurückliefern.

                ich danke dir auf jeden fall schonmal sehr für deinen ratschlag!

                lg
                some

          2. Lieber somebody1981,

            ich habs doch gewusst, nennt man joomla tangiert man recht schnell den bereich noob :-D

            echt? War mir neu. ;-)

            bitte sei mir jetzt auch nicht böse und bitte glaub mir, dass ich für jede antwort hier dankbar bin

            Schon klar.

            doch meine frage bezog sich keinesfalls auf abwärtskompatiblität. welche ich natürlich gewährleiste!! hat der user nämlich kein js an läuft alles wie wie gehabt ...

            OK. Das ist doch schonmal prima!

            muss er halt auf ein paar js-gimmicks verzichten!

            "Gimmicks"? Welche denn?

            aber ich danke dir trotzdem, dass du dir die mühe gemacht hast, den beitrag zu lesen und dich mit meinem problem zu beschäftigen!

            Du hast mir wenig Möglichkeiten gegeben, Dir von größerer Hilfe zu sein. Poste doch einmal einen Link zu einer Beispielseite, auf der sich Deine JavaScripts so richtig schön in die Quere kommen! Erläutere dazu ein bisschen etwas vom Konzept hinter dem jeweiligen "Gimmick" und schon kann man besser mitreden.

            Liebe Grüße,

            Felix Riesterer.

            --
            ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  2. um multiscripting zu verhindern checkt der nun auch, dass das script im head oder im body nicht vorhanden ist und bei jedem neuen request, räumt er vorher auch wieder auf ... also alle nachgeladenen werden wieder gelöscht.

    Das ist unnötig -  wenn ein Script einmal ausgeführt wurde, ist es egal, ob dazu noch ein script-Element im head herumliegt.

    z.B. ist in einem conten swfobject enthalten ... das ist nach dem entfernen aus dem head anscheinend immer noch aktiv, denn es erzeugt fortwährend fehler, obwohl das scripttag schon längst weg ist!

    Die Frage ist doch eher: Warum erzeugt es Fehler?

    Es ist nicht »noch aktiv«, sondern das Script wurde halt einmal ausgeführt und hat bei diesem Durchlauf globale Objekte angelegt. Wie gesagt, diese kannst du (wenn sie dir alle bekannt sind) nachträglich wieder löschen. Schwieriger wird es, wenn das Script z.B. Event-Handler regstriert hat. Dann ist es mit dem Löschen (Überschreiben) irgendeines Objektes nicht getan.

    Dass also irgendwelche Objekte existieren, erzeugt an sich noch keinen Fehler. Um welche Fehler geht es?

    Mathias

    1. hallo mathias,
      bitte entschuldige, dass ich erst jetzt deine antwort mitbekommen hab aber ich bin total verwirrt, dass man hier auch nonlinear antworten kann :(
      ... sorry ganz doll, weil deine antwort ist wirklich die hilfreichste!

      »» um multiscripting zu verhindern checkt der nun auch, dass das script im head oder im body nicht vorhanden ist und bei jedem neuen request, räumt er vorher auch wieder auf ... also alle nachgeladenen werden wieder gelöscht.

      Das ist unnötig -  wenn ein Script einmal ausgeführt wurde, ist es egal, ob dazu noch ein script-Element im head herumliegt.

      das mit dem aufräumen ist wirklich quatsh (bei denen im head mit absoluter sicherheit sogar) ... das habe ich mittlerweile auch eingesehen! ich habe bisher immer nur sporadisch mal js auf einer seite nachgeladen und war mit dieser thematik eher weniger vertraut.

      das überprüfen hab ich aber mal noch drin gelassen, da es ja nicht gewollt ist, dass der head nach dem anklicken von verschiedenen seiten und dabei ab und zu der selben 25 mal das selbe script-element enthält (hatte ja die nachgeladenen skripte dirigiert ... also alles mit src in head und alles ohne ans ende vom body ... somit muss ich ja prüfen, ob ich das überhaupt noch im head einsetzen muss)

      »» z.B. ist in einem conten swfobject enthalten ... das ist nach dem entfernen aus dem head anscheinend immer noch aktiv, denn es erzeugt fortwährend fehler, obwohl das scripttag schon längst weg ist!

      Die Frage ist doch eher: Warum erzeugt es Fehler?

      der fehler erscheint, sobald der damit implementierte flashplayer aus dem dom entfernt wird ... keine ahnung warum mus ich zu meiner schande gestehen.

      Es ist nicht »noch aktiv«, sondern das Script wurde halt einmal ausgeführt und hat bei diesem Durchlauf globale Objekte angelegt. Wie gesagt, diese kannst du (wenn sie dir alle bekannt sind) nachträglich wieder löschen. Schwieriger wird es, wenn das Script z.B. Event-Handler regstriert hat. Dann ist es mit dem Löschen (Überschreiben) irgendeines Objektes nicht getan.

      und diese aussage ist mit abstand die nützlichste! das mit den events hatte ich noch gar nicht bedacht! danke!

      Dass also irgendwelche Objekte existieren, erzeugt an sich noch keinen Fehler. Um welche Fehler geht es?

      es ist ja blos der eine, sobald ich den player, der vom swfobject erzeugt wurde wieder aus dem dom entferne kommt ein fehler "n ist null oder nicht definiert" (sowohl ie als auch gecko)

      ich danke dir jeden falls sehr für deine hilfe!

      lg
      some