kostenloser Webspace werbefrei: lima-city


Javascript-Dateien "on the run" einbinden

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    nerdinator

    Kostenloser Webspace von nerdinator, auf Homepage erstellen warten

    nerdinator hat kostenlosen Webspace.

    Moin,

    hat jemand 'ne Ahnung, ob man Javascript-Dateien (.js) "on the run" in eine HTML-Datei einbinden kann? Also ich stelle mir das so vor, dass per Ajax den Standort einer .js-Datei bekomme und diese dann halt vollständig eingebunden wird. Für gewöhnlich macht man sowas afaik ja im Head-Bereich der HTML... Nun interessiert mich mal, ob das so ohne weiteres funktionieren würde. Selbstverständlich ohne die Seite neu zu laden oder so. Wenn nicht: Jemand 'ne Idee für 'nen Workaround?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. natürlich geht das.

    Wenn du mit AJAX zum Beispiel irgendeinen JS-Code bekommst (z.B. "alert(1+1)"), dann musst du einfach ein eval drüber laufen lassen.
    Also nach dem Motto eval(request.responseText());
  4. Autor dieses Themas

    nerdinator

    Kostenloser Webspace von nerdinator, auf Homepage erstellen warten

    nerdinator hat kostenlosen Webspace.

    nikic schrieb:
    natürlich geht das.

    Wenn du mit AJAX zum Beispiel irgendeinen JS-Code bekommst (z.B. "alert(1+1)"), dann musst du einfach ein eval drüber laufen lassen.
    Also nach dem Motto eval(request.responseText());


    Mein Problem ist ja, dass ich nicht eine einzelne Anweisung bekomme, sondern eine ganze .js-Datei im Nachhinein einbinden möchte.
  5. Hallo nerdinator,

    warum bindest du die Datei(en) nicht schon grundsätzlich ein? (oder entscheidest zb mit PHP welche dateien du benötigen könntest)

    Und rufst dann nur die entsprechenden Funktionen auf.

    Wenn nicht: villeicht hilft dir dieses Script:

    http://forum.jswelt.de/tutorials-javascript/36597-javascriptdatei-dynamisch-ajax-laden.html

    Naja das dortige ist villeicht noch ein wenig verbesserungsfähig.

    Im Endeffekt wird dort auch nur ein eval verwendet:

    eval(ljsf.responseText);


    hmm naja villeicht macht dieses Script auch nicht ganz seinen Dienst, aber kannst du ja mal ausprobieren
  6. Autor dieses Themas

    nerdinator

    Kostenloser Webspace von nerdinator, auf Homepage erstellen warten

    nerdinator hat kostenlosen Webspace.

    dussel schrieb:
    Hallo nerdinator,

    warum bindest du die Datei(en) nicht schon grundsätzlich ein? (oder entscheidest zb mit PHP welche dateien du benötigen könntest)

    Und rufst dann nur die entsprechenden Funktionen auf.

    Wenn nicht: villeicht hilft dir dieses Script:

    http://forum.jswelt.de/tutorials-javascript/36597-javascriptdatei-dynamisch-ajax-laden.html

    Naja das dortige ist villeicht noch ein wenig verbesserungsfähig.

    Im Endeffekt wird dort auch nur ein eval verwendet:

    eval(ljsf.responseText);


    hmm naja villeicht macht dieses Script auch nicht ganz seinen Dienst, aber kannst du ja mal ausprobieren


    Das Problem ist halt, dass auf der Seite sehr, sehr viele Scripts verwendet werden sollen. Allerdings wird die meiste Zeit halt nur ein Bruchteil von dem, was "verfügbar" wäre verwendet. So will ich nun durch eine "Modulare" behandlung der Scripts ein wenig Seitenladezeit sparen. (Die Lima-Server beispielsweise sind ja nicht gerade die zügigsten (; ) Soviel zum "warum".

    Nunja, ich hab nun inzwischen ein wenig probiert und herausgefunden, dass es wohl nicht geht, Java-Scripts im Nachhinein einzubinden. Ich denke ich werde das ganze nun so lösen, dass ich einfach die jeweils angeforderte .js-Datei per php einlese und dann via eval ausführen lasse. Auch wenn mir das eigentlich sehr unelegant vorkommt. Aber irgendwo sind wohl auch die Grenzen des Machbaren.

    Wenn jemand eine andere, vielleicht elegantere Methode kennt, ich bin für alles offen :)
  7. eval() sollte man mit Bedacht benutzen. Sonst fängt man sich ne XSS Lücke ein.

    Also, alles, was du eigentlich machen musst, ist ein neues Script-Element dynamisch in dein Dokument einfügen. die entsprechenden Dateien werden dann automatisch nachgeladen.
    http://de.selfhtml.org/javascript/objekte/document.htm#create_element
    http://de.selfhtml.org/javascript/objekte/document.htm#create_attribute
    http://de.selfhtml.org/javascript/objekte/node.htm#append_child
  8. Autor dieses Themas

    nerdinator

    Kostenloser Webspace von nerdinator, auf Homepage erstellen warten

    nerdinator hat kostenlosen Webspace.

    bladehunter schrieb:
    eval() sollte man mit Bedacht benutzen. Sonst fängt man sich ne XSS Lücke ein.

    Also, alles, was du eigentlich machen musst, ist ein neues Script-Element dynamisch in dein Dokument einfügen. die entsprechenden Dateien werden dann automatisch nachgeladen.
    http://de.selfhtml.org/javascript/objekte/document.htm#create_element
    http://de.selfhtml.org/javascript/objekte/document.htm#create_attribute
    http://de.selfhtml.org/javascript/objekte/node.htm#append_child


    Naja, mit Firebug beispielsweise lässt sich eine javascript ja prinzipiell so oder so umschreiben - also auch ein eval() rein schreiben. Und im Grunde kann ein Script ja nicht viel mehr als lokale Daten/Variablen verarbeiten. Auf dem Server macht das ja nichts, wenn man seine php-Seiten dementsprechend sicher gestaltet hat, oder irre ich mich da?

    Also wenn ich deinen Vorschlag richtig intepretiere meinst du etwas wie
    var Scriptelement  = document.createElement("SCIPT");
    document.appendChild(Scriptelement);
    Scriptelement.innerHTML = foobar.responseText;


    Oder so ähnlich?
  9. nerdinator schrieb:
    bladehunter schrieb:
    eval() sollte man mit Bedacht benutzen. Sonst fängt man sich ne XSS Lücke ein.
    Naja, mit Firebug beispielsweise lässt sich eine javascript ja prinzipiell so oder so umschreiben - also auch ein eval() rein schreiben. Und im Grunde kann ein Script ja nicht viel mehr als lokale Daten/Variablen verarbeiten. Auf dem Server macht das ja nichts, wenn man seine php-Seiten dementsprechend sicher gestaltet hat, oder irre ich mich da?

    Die Sicherheit deiner Besucher sollte dir nicht egal sein ;)
    Es mag sein, dass deinem Server nix passieren kann, aber falls es irgendwie blöd läuft, kann ein Angreifer z.B. JS-Variablen von anderen Benutzern auslesen.

    Also wenn ich deinen Vorschlag richtig intepretiere meinst du etwas wie
    var Scriptelement  = document.createElement("SCIPT");
    document.appendChild(Scriptelement);
    Scriptelement.innerHTML = foobar.responseText;


    Oder so ähnlich?


    So ähnlich. Aber ich bin gerade über eine noch leichtere Lösung gestolpert:
    http://de.selfhtml.org/javascript/objekte/htmlelemente.htm#script
    (Ein bißchen runterscrollen, dann kommt der Code)
    Und du kannst dem src-Attribut beliebige Werte zuweisen. also auch src="antwort.php?mach=was&tolles"
  10. Autor dieses Themas

    nerdinator

    Kostenloser Webspace von nerdinator, auf Homepage erstellen warten

    nerdinator hat kostenlosen Webspace.

    bladehunter schrieb:
    Die Sicherheit deiner Besucher sollte dir nicht egal sein ;)
    Es mag sein, dass deinem Server nix passieren kann, aber falls es irgendwie blöd läuft, kann ein Angreifer z.B. JS-Variablen von anderen Benutzern auslesen.


    Hm, ich nehme das mal einfach so hin - da ich schon oft gehört habe, dass eval böse ist ;)

    bladehunter schrieb:
    So ähnlich. Aber ich bin gerade über eine noch leichtere Lösung gestolpert:
    http://de.selfhtml.org/javascript/objekte/htmlelemente.htm#script
    (Ein bißchen runterscrollen, dann kommt der Code)
    Und du kannst dem src-Attribut beliebige Werte zuweisen. also auch src="antwort.php?mach=was&tolles"


    Das bringt mir im allgemeinen herzlich wenig. Denn die Seiten sollen ja Dynamisch zustande kommen - das heisst in der Laufzeit ändert sich das eine oder andere. Ich will jetzt nicht in Rätseln sprechen, also es sieht so aus: Ich möchte eine art "Desktop-System" machen, auf dem man nun jeweilige "Applikationen" starten kann. Dort werden ständig welche hinzugefügt, geändert, und ähnliches. Diese sollen dann sofort und in laufzeit verfügbar sein - ohne Seitenrefresh oder ähnliches. Deshalb soll er die Inhalte der "Applikationen" dynamisch vom Server laden. Die erste Variante erschien mir da Zweckmäßiger, als die jetzt vorgeschlagene.

    Oder habe ich die falsch verstanden?
  11. mastergamer6466

    mastergamer6466 hat kostenlosen Webspace.

    Oder du machst es wie in den mootools.js libary....

    @ Zeile 2441
    evalScripts: function(){
    	var script, scripts;
    	if (this.options.evalResponse || (/(ecma|java)script/).test(this.getHeader('Content-type'))) scripts = this.response.text;
    	else {
    		scripts = [];
    		var regexp = /<script[^>]*>([\s\S]*?)<\/script>/gi;
    		while ((script = regexp.exec(this.response.text))) scripts.push(script[1]);
    		scripts = scripts.join('\n');
    	}
    	if (scripts) (window.execScript) ? window.execScript(scripts) : window.setTimeout(scripts, 0);
    };


    ist nun hald auch ne Hardcore version.....
    Ich hatte es mal irgendwo schön zerpflückt und funktionsfähig.....weiß nur leider nimmer wo...^^

    lg mastergamer6466

    Beitrag zuletzt geändert: 14.1.2009 19:10:24 von mastergamer6466
  12. Autor dieses Themas

    nerdinator

    Kostenloser Webspace von nerdinator, auf Homepage erstellen warten

    nerdinator hat kostenlosen Webspace.

    So, nun habe ich woanders eine wirklich hilfreiche Antwort auf das Problem bekommen. Also wen es interessiert:

    var script = document.createElement ( 'SCRIPT' );
    script.src = path;
    
    document.getElementsByTagName ( 'head' )[ 0 ].appendChild ( script );


    Weil einfach einfach einfach ist. :biggrin:
  13. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!