Ich habe eine Javascript-Funktion, die ich schreibe, die verwendet wird, um eine externe JS-Datei enthalten, aber nur einmal. Der Grund, warum ich eine solche Funktion benötige, ist, dass sie aufgerufen wird, wenn ein Inhalt über AJAX geladen wird und ich seitenbezogenen Code für diesen Inhalt ausführen muss (nein, nur mit .live
nicht abdecken wird).
Hier ist mein Versuch, der Kürze halber gekürzt:
$.include_once = function(filename) {
if ($("script[src='" + filename + "']").length === 0) {
var $node = $("<script></script>")
.attr({
src : filename,
type : "text/javascript"
})
;
$(document.body).append($node);
}
};
Das funktioniert einwandfrei: Die Funktion wird aufgerufen, die externe Datei wird geladen, und diese Datei wird beim Laden ausgeführt. Perfekt.
Das Problem ist, dass die externe Datei immer wieder neu geladen wird: Die Abfrage, mit der ich das Vorhandensein des Skripts prüfe, findet immer nichts!
Bei der Fehlersuche habe ich einige Zeilen hinzugefügt:
alert($("script").length); // alerts: 4
$(document.body).append($node);
alert($("script").length); // alerts: 4
Wenn ich mir den dynamischen Quelltext ansehe (die HTML-Registerkarte von Firebug), kann ich das Skript-Tag überhaupt nicht finden.
Ich weiß, dass ich ein Array von Dateien beibehalten könnte, die ich zuvor eingeschlossen habe, aber ich hoffte, mit einer Methode wie diese zu gehen, die (wenn es funktioniert), scheint ein bisschen robuster, da nicht alle JS-Dateien auf diese Weise eingeschlossen werden.
Kann jemand das Verhalten in diesem zweiten Schnipsel erklären?