Inhalt einer JS Funktion auslesen.

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Inhalt einer JS Funktion auslesen.

    hi.

    ich habe einen js-url der mir eine funktion liefert.

    den namen der fkt kenne ich, jedoch nicht den inhalt.

    wie kann ich den inhalt dieser js-fkt auslesen?

    gruss
    haxe
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |



  • #2
    Re: Inhalt einer JS Funktion auslesen.

    Original geschrieben von Abraxax
    ich habe einen js-url der mir eine funktion liefert.
    Wie meinen?
    den namen der fkt kenne ich, jedoch nicht den inhalt.

    wie kann ich den inhalt dieser js-fkt auslesen?
    alert(Funktionsname);

    Dabei wird implizit die toString-Methode des Funktionsobjektes aufgerufen - kann man aber natürlich auch explizit manuell machen, wenn man den Funktionscode in anderem Kontext haben will, um ihn ein einem String abzulegen o.ä.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Re: Re: Inhalt einer JS Funktion auslesen.

      Original geschrieben von wahsaga
      Wie meinen?
      es gibt einen url
      Code:
      <script type="text/javascript" src="http://irgendwo.de/javascript.js"></script>
      dieser liefert mir verschiedene js-funktionen zurück. die namen der functions sind mir bekannt. deren inhalt jedoch nicht.

      viele der functions liefern mit einen wert per return zurück. eine bestimmte function jedoch nicht. hier ist massenhaft document.write() enthalten.

      ich muss innerhalb dieser function einen wert ersetzen. d.h. ich brauche den inhalt der funktion. damit ich diesen wert ersetzen/erweitern kann. anschliessend soll die function aufgerufen werden und sich so verhalten, als habe ich nichts daran geändert.

      das ist der theoretische plan.

      Original geschrieben von wahsaga
      alert(Funktionsname);
      wenn ich das so aufrufe, erhalte ich ein undefined zurück.

      Original geschrieben von wahsaga
      Dabei wird implizit die toString-Methode des Funktionsobjektes aufgerufen - kann man aber natürlich auch explizit manuell machen, wenn man den Funktionscode in anderem Kontext haben will, um ihn ein einem String abzulegen o.ä.
      das klingt nach einem logischem ansatz.

      dies scheint mein problem wahrscheinlich zu lösen ....

      Code:
      // klappt
      alert(funktionsname.toString());
      
      // klappt NICHT
      alert(funktionsname().toString());
      ich werde dann mal weiter basteln.

      danke dir



      direkt mal noch eine frage vorweg ... gibt es eine möglichkeit diesen string wieder in eine function zu verwandeln, nachdem ich daran "manipuliert" habe?
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        Re: Re: Re: Inhalt einer JS Funktion auslesen.

        Original geschrieben von Abraxax
        // klappt
        alert(funktionsname.toString());

        // klappt NICHT
        alert(funktionsname().toString());
        Mit letzterem führst du die Funktion aus, und wendest toString auf ihren Rückgabewert an ...
        gibt es eine möglichkeit diesen string wieder in eine function zu verwandeln, nachdem ich daran "manipuliert" habe?
        new Function(...)
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          irgendwie hänge ich fest ....

          Code:
          <script type="text/javascript" src="http://irgendwo.de/javascript.js"></script>
          
          <script type="text/javascript">
          
          // normaler aufruf ...
          cu_129567();
          
          // nun soll es aber verändert werden.
          
          // fkt in string umwandeln.
          scu_129567 = cu_129567.toString();
          // testausgabe ist ok.
          alert(scu_129567);
          
          // hier muss noch die ersetzung rein.
          // habe ich noch nicht und hänge auch hier fest.
          // dazu aber später mehr. erst einmal das
          // grundsätzliche prinzip ....
          
          // string wieder als fkt umwandeln
          fcu_129567 = new Function(scu_129567);
          // type prüfen: ausgabe 'function'
          // also alles ok.
          alert(typeof(fcu_129567));
          
          
          // liefert ...
          // function anonymous {
          // function cu_129567 {
          // ....
          // }
          // }
          alert(fcu_129567);
          // ist also nicht korrekt. das function um meine function
          // muss weg. das ist der part mit regex wo ich nicht
          // weiter komme ...
          
          
          // liefert undefined
          alert(fcu_129567());
          
          </script>

          kannst du mir hier noch einmal einen tipp geben, wie ich
          1. die bereinigung des function-strings scu_129567 machen, sodass der alte fkt-kopf wegfällt und nach der umwandlung in eine fkt kein doppelkopf enthalten ist.
          2. nach der umwandlung mit new Function() der funktionsname einen anderen namen erhält.


          ich denke, dass sind die grundlegenden punkte, wo ich nicht weiter komme.
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            Original geschrieben von Abraxax
            // fkt in string umwandeln.
            scu_129567 = cu_129567.toString();
            // testausgabe ist ok.
            alert(scu_129567);
            Ergibt was?

            Vermutlich irgendwas mit "cu_129567() { ... }".

            // string wieder als fkt umwandeln
            fcu_129567 = new Function(scu_129567);

            // liefert ...
            // function anonymous {
            // function cu_129567 {
            Klar, weil du im String scu_129567 ja auch noch "cu_129567() { ... }" drin stehen hast - das ist bereits eine function expression, also kommt da beim erzeugen einer neuen Funktion mit new Function() eine in eine Funktion gekappselte Funktion heraus.

            Übergebe nur den Code der Funktion.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Original geschrieben von wahsaga
              Ergibt was?
              Vermutlich irgendwas mit "cu_129567() { ... }".
              genau. hier sehe ich die korrekte definition der funktion samt kopf.

              Original geschrieben von wahsaga
              Übergebe nur den Code der Funktion.
              womit wir wieder beim thema regex sind. ich raff's einfach nicht. s.o. punkt 1

              hast du hier einen tipp?
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                Kannst du nicht die .js-Datei einmal runterladen, anpassen und auf deimem Space hosten? Oder ist das so ein Pseudo Web-Service, der immer mal was anderes zurückgibt? Dann könntest du doch die .js-Datei trotzdem serverseitig verarbeiten (so eine Art Proxy), oder geht das überhaupt nicht?

                Weil das, was du da jetzt vorhast ist irgendwie etwas eigenartig (um nicht zu sagen WTF!?).
                hopka.net!

                Kommentar


                • #9
                  hi hopka
                  Original geschrieben von Hopka
                  Kannst du nicht die .js-Datei einmal runterladen, anpassen und auf deimem Space hosten? Oder ist das so ein Pseudo Web-Service, der immer mal was anderes zurückgibt?
                  die js könnte ich zwar laden aber bei mir nicht hochladen, da sich der inhalt immer ändert. ;-) ein pseudo webservice ist es aber nicht. hängt aber mit meiner arbeit zusammen. also keine weiteren details.

                  Original geschrieben von Hopka
                  Dann könntest du doch die .js-Datei trotzdem serverseitig verarbeiten (so eine Art Proxy), oder geht das überhaupt nicht?
                  wahrscheinlich könnte ich die datei mit einem php script laden verarbeiten und so an den browser schicken. aber das würde den webserver belasten und die abrufe sind enorm. also will ich das lieber beim user machen lassen.

                  Original geschrieben von Hopka
                  Weil das, was du da jetzt vorhast ist irgendwie etwas eigenartig (um nicht zu sagen WTF!?).
                  ich weiss, dass es eigenartig ist. muss aber so sein. ich würde mir in dem dynamischen js auch eine fkt wünschen, die mir den inhalt als string liefert. aber es hat nicht sollen sein und ich muss halt selber fummeln.

                  hier nun der funktionierende code für diese aktion.

                  Code:
                  // fkt in string wandeln.
                  scu_129567 = cu_129567.toString();
                  
                  // testausgabe ok.
                  alert(scu_129567);
                  
                  // alten funktionskopf entfernen
                  s_start = scu_129567.indexOf('{');
                  s_end   = scu_129567.lastIndexOf('}');
                  scu_129567 = scu_129567.substr( s_start+1 , s_end - s_start - 1);
                  
                  // zusätzlicher ersetzung innerhalb des funktionsstrings
                  // nur deshalb die ganze aktion überhaupt. :-D
                  scu_129567 = scu_129567.replace( 'SUCHEN', 'ERSETZEN' );
                  
                  // testausgabe ok
                  alert(scu_129567);
                  
                  // neue funktion definieren
                  fcu_129567 = new Function('', scu_129567);
                  
                  // type ist korrekt 'function'
                  alert(typeof(fcu_129567));
                  
                  // testausgabe ok
                  // ( allerdings function anonymous() im kopf )
                  alert(fcu_129567);
                  
                  // (neue) funktion aufrufen
                  // klappt trotz anonymous, s.o. )
                  fcu_129567();
                  
                  // alle freuen sich. ;-)
                  danke an euch beide.

                  wenn jemand noch ne vereinfachung hat, dann her damit ....
                  Zuletzt geändert von Abraxax; 12.07.2006, 17:24.
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    Für Vereinfachungen bin ich immer zu haben

                    Code:
                    // böse Funktion
                    function foo() {
                    	document.write('hallo! ');
                    	document.write('dies ist ein tset');
                    }
                    
                    // document.write sichern
                    backup = document.write;
                    // der Text landet hier:
                    var txt = "";
                    // document.write überschreiben
                    document.write = function(text) {
                    	txt += text;
                    }
                    
                    // böse Funktion aufrufen
                    foo();
                    
                    // document.write wiederherstellen
                    document.write = backup;
                    // text ausgeben
                    alert(txt);
                    // document.write funktioniert wieder wie gehabt.
                    document.write('Hallo');
                    hopka.net!

                    Kommentar


                    • #11
                      ob das gut ist? ich werde es morgen mal testen.
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        so. ich habe das mal getestet und es scheint auch zu funktionieren.

                        ist deine variante aus deiner sicht sauberer und funktioniert überall? oder ist die von mir erarbeitete lösung sauberer?
                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar


                        • #13
                          habs grad mal im IE getestet. hier scheint deine lösung nicht korrekt zu funktionieren. ich bleibe daher bei meiner lösung.
                          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                          Kommentar


                          • #14
                            Also bei mir funktioniert meine Methode im IE 6.

                            Außer natürlich, dass document.write('Hallo'); das gesamte restliche Dokument überschreibt. Aber das hat nichts mit meinem JavaScript-Code zu tun, sondern ist im IE halt so.
                            hopka.net!

                            Kommentar


                            • #15
                              ich bekomme eine nichtssagenen js fehler im ie. ist ja auch egal. die andere lösung klappt ja.
                              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                              Kommentar

                              Lädt...
                              X