Hallo,
am liebsten wäre mir eine "globale" definition bei der ich den functionsnamen (libary.javascript()) sowie die parameter des functionsaufrufes bekomme, die in einer interception weiterverarbeitet werden kann.
So etwas gibt es in JavaScript nicht. Außer dem sehr unspezifischen window.onerror, wie gesagt.
Davon abgesehen kann man sich eine solche Nachlade-Logik programmieren, aber es ist schwierig, das mit Event-Handler-Attributen umzusetzen. Daher der Hinweis von ChrisB und mir auf das Registrieren von Event-Handlern mit JavaScript.
JavaScript ist funktional, sodass sehr einfach ist, Funktionen in andere zu verpacken. Die äußere Funktion lädt dann das fragliche Modul und führt bei Erfolg die innere Funktion aus. Beispiel:
<button id="button">Klick mich</button>
// Erzeugt eine Funktion mit einer Abhängigkeit
var dependency = function(module, f) {
return function() {
// Merke Kontext und Parameter des Aufrufs
var originalThis = this, originalArguments = arguments;
// Lade das Modul
jQuery.getScript('/scripts/' + module + '.js', function() {
// Rufe die Funktion mit dem Originalkontext und den Originalparametern auf
f.apply(this, arguments);
});
};
};
// Verpacke den Event-Handler in eine Lade-Funktion
// Abhängigkeit: Modul »helloWorld«
var eventHandler = dependency('helloWorld', function() {
// Wenn diese Funktion ausgeführt wird, existiert helloWorld
helloWorld.hello();
});
// Registriere einen Event-Handler
document.getElementById('button').[link:http://molily.de/js/event-handling-fortgeschritten.html@title=addEventListener]('click', eventHandler);
So funktioniert letztlich auch das Lazy-Loading in großen JavaScript-Anwendungen. JavaScript-Anwendungen verwenden eher Module-Loader wie Require.js, die auf AMD oder Common.js basieren.
Mathias