Javascript on-demand, please

Thema:

Eine der Königsdisziplinen beim »Ajaxifizieren« (grin!) einer Webseite ist es sicherlich, Javascript-Code nach dem Laden der Seite vom Server zu holen und auszuführen. Möglich ist dies beispielsweise via XHR: so macht es das Package Load System des Dojo Toolkits.

Auf Ajaxian kann man sich gerade ansehen, wie das funktioniert. Der auszuführende Code wird per XHR am Server abgeholt und per eval() zur Ausführung gebracht. Dabei lauern allerdings ein paar Fallstricke. Zunächst einmal sei darauf hingewiesen, dass eval() eine nicht ganz ungefährliche Funktion ist, denn was dort hineingepackt wird, wird auf dem Client ausgeführt, ist also so, als wenn man es selbst direkt in den Code geschrieben hätte. Um dabei kein Sicherheitsrisiko entstehen zu lassen, muss man sicher stellen, dass alles was an der eval-Methode ankommt, vertrauenswürdig ist.

Die restlichen Probleme die auftreten, liegen in der unterschiedlichen Art, wie verschiedene Browser eval() umsetzen. Firefox seht eval() als Methode von Object, IE sieht das natürlich anders. Ausserdem muss man den evaluierten Code schon global zur Verfügung stellen, denn sonst kann man ja später da nur noch schlecht drauf zugreifen. In Dojo wird dies mit eine globalen Variable dj_global relalisiert, IE kennt eine eigene Funktion execScript, die Code direkt in das window-Objekt evaluiert.

All das zusammen sieht dann so aus (übersetztes Beispiel von Ajaxian):

[Beispiel entfernt.]

Das ist natürlich stark vereinfacht (der XHR selbst und seine Absicherung fehlen bspw.), aber so ungefähr kann das gehen. Anstatt wie Dojo eine eigene global Variable zu nutzen, kann man auch direkt das window-Objekt benutzen, also return window.eval ? window.eval(code) : eval(code).

Noch keine Kommentare.

Datenschutzhinweis

Daten die in dieses Formular eingegeben werden, werden mit Hilfe des Dienstes welcomments.io verarbeitet. Dabei fallen die in der Datenschutzerklärung dieses Dienstes aufgeführten Daten (IP-Adresse, Browserversion) an, die dort auch gespeichert werden. Gebe keine persönlichen Daten in dieses Formular ein, im Zweifelsfall nutze einen Spitznamen, alles eingegebene wird hier öffentlich angezeigt. Es werden keine Cookies gespeichert, lediglich der Kommentartext wird im Localstorage des Browsers zwischengespeichert.

GitHub-flavored Markdown und einfache HTML-Tags werden unterstützt.

Hinweis…

Diese Seite enthält Videos von Youtube. Diese sind standardmäßig deaktiviert. Falls Du unten auf „Ja“ klickst, werden Daten von Youtube auf Deinen Rechner geladen und so mindestens Deine IP-Adresse an Youtube weiter gegeben. Cookies werden nicht verwendet. Mehr Infos.

Möchtest du Youtube auf dieser Seite aktivieren?