Javascript-Dateien "on the run" einbinden
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
angreifer
attribut
ausprobieren
bedacht benutzen
besucher
code
datei
dokument
einbinden
endeffekt
http
jemand
laden
laufzeit
machen
objekt
problem
server
sicherheit
url
-
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? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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()); -
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. -
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 -
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 :) -
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 -
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? -
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" -
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? -
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 -
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. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage