Ich habe mein Javascript in verschiedene Dateien aufgeteilt. Ich möchte verhindern, dass Javascript-Dateien doppelt geladen werden. Wie kann ich das machen?Wie kann ich überprüfen, ob bereits eine JS-Datei enthalten ist?
Antwort
Ohne ein Framework (das ich kenne), können Sie nur tun, indem Sie überprüfen, ob eine bestimmte Variable im globalen Bereich bereits deklariert wurde.
Sie könnten eine Variable var include1 = true;
innerhalb include1.js
, erklären und etwas tun, wie
if (window.include1 !== true) {
// load file dynamically
}
Sie sie nicht zweimal enthalten. Sie sind es schließlich, die das Includes machen.
Wenn Sie diese Einbeziehungen dynamisch ausführen, können Sie jedoch überprüfen, ob eine globale Funktion oder ein Objekt vom Skript festgelegt wurde. Zum Beispiel, wenn ich das Skript unten in einer Datei haben:
Foo = function() {};
Und dann schließe ich es wie folgt aus:
<script src="../foo.js"></script>
Davor Script-Tag vom Browser analysiert wird, Foo
ist undefined
. Nachdem das Tag verarbeitet wurde, ist Foo
ein Function
. Sie könnten eine Logik verwenden, die darauf basiert, um zu bestimmen, ob Sie eine Datei hinzufügen oder nicht.
Hier ist ein Test, um zu sehen, ob ein Skript basiert auf dem Weg in die js-Datei enthalten ist:
für alle Skriptefunction isScriptAlreadyIncluded(src){
var scripts = document.getElementsByTagName("script");
for(var i = 0; i < scripts.length; i++)
if(scripts[i].getAttribute('src') == src) return true;
return false;
}
Es funktioniert nicht durch AJAX geladen, wenn Sie es ändern möchten, wenn Sie haben JSONP-Code ausgeführt.
Ich mag diese Antwort, weil es zeigt, dass es möglich ist, zu verfolgen, welche Dateien enthalten sind, aber in der Praxis würde ich diesen Ansatz nie empfehlen, da Sie Ihre Skripte möglicherweise aufgeteilt haben Sie können diese Dateien später in einer Datei zusammenfassen, um eine bessere Leistung zu erzielen. In diesem Fall würde dieser Ansatz nicht mehr funktionieren. –
@MattBrowne Ich stimme im Prinzip zu, aber oft ist es nicht so einfach. Manchmal arbeitet man innerhalb eines Rahmens (oder aus irgendeinem anderen Grund nicht unter Kontrolle), der eine Skriptdatei enthalten kann oder nicht. – cwallenpoole
Genau @ Cwallenpoole! Das ist ein RIESIGER Punkt! +1! –
Sie müssten dies manuell nachverfolgen und sicherstellen. UweBs Vorschlag würde auch funktionieren.
Sie können sich auch Require.js anschauen, die Ihnen helfen könnte, Ihre Dateien zu organisieren.
Ich habe das auf mehrere Arten angegangen.
1 - durch ein neues leeres Array in meiner Basisdatei oder ein Skript zu erklären, die immer geladen werden, dh die Haupt-Seite in meinem Fall index.php und Triggern auf Last laufen,
var scriptsLoaded = new Array();
Dann öffne ich als eine öffnende Zeile in jedem dynamisch geladenen Skript, indem ich einen benutzerdefinierten String-Wert zu diesem Array hinzufüge. Ich habe die Namenskonvention verwendet, die einfach der Dateiname ist. Zum Beispiel der erste Zeile in einem dynamischen Laden Skript ist
scriptsLoaded[] = 'thisScriptName.js';
Dann ist es ein ziemlich einfacher Fall zu prüfen, ob der Dateiname existiert.
Dies funktioniert auch für Ajax geladene Skripte.Und scheint in Bezug auf das Skript Fein die meiste Zeit zu arbeiten tatsächlich
und 2, eine weitere Verbesserung der Methode geladen ist, eine andere Zeile am unteren Rand anzuhängen, eine benutzerdefinierte Funktion auf die Datei zB js geladen:
function JSthisScriptName() {return true}
Von hier aus einem einfachen try-catch Ansatz überprüfen kann, ob das Skript tatsächlich vor der Ausführung geladen wird und wenn kein Timeout
ich schätze setzen sie diese nicht vollständig automatisiert ist, aber es scheint robust. Wenn Sie die Kürze dieses Artikels entschuldigen möchten, ist eine andere Methode, die ich verwendet habe, eine Checker-Funktion anstelle der externen Skriptfunktion aufzurufen, bei der der Checker den Funktionsnamen und den Skriptnamen übernimmt und prüft ob es verwendbar ist, bevor ein Timeout versucht und eingestellt wird und und das Skript geladen wird
- 1. Wie kann ich überprüfen, ob bereits eine Ausnahme ausgelöst wurde?
- 2. Kann ich überprüfen, ob die Datei bereits geöffnet ist?
- 3. Wie überprüfen, ob eine Aufgabe bereits in Python-Warteschlange ist?
- 4. überprüfen, ob ein Benutzer bereits angemeldet ist?
- 5. jQuery überprüfen, ob Attributstring enthalten ist
- 6. überprüfen, ob Umgebungsvariable bereits gesetzt ist
- 7. Kann ich überprüfen, ob eine Karte bereits vorhanden ist, bevor Sie eine neue erstellen?
- 8. Wie kann ich überprüfen, ob eine Zeichenfolge auf Englisch ist?
- 9. Wie kann ich überprüfen, ob ein Wert eine Zahl ist?
- 10. Wie überprüft require_once "ob die Datei bereits enthalten ist"?
- 11. Überprüfen Sie, ob eine DLL-Bibliothek bereits geladen ist? (Java)
- 12. Wie überprüfen, ob id bereits vorhanden - codeigniter
- 13. Überprüfen Sie, ob eine Browser-Registerkarte bereits geöffnet ist, damit ich keine zusätzlichen Registerkarten anlegen kann.
- 14. TweetSharp: Wie Sie überprüfen, ob Ihre Anwendung bereits autorisiert ist?
- 15. Wie kann man überprüfen, ob Element existiert bereits auf Liste
- 16. Wie überprüfen Sie, ob eine Realm-Instanz bereits geschlossen wurde?
- 17. Wie kann ich überprüfen, ob ein bestimmter Typ bereits im C-Compiler definiert ist?
- 18. Woher weiß ich, ob eine JavaScript-Datei bereits in einer Top-Level-Seite enthalten ist?
- 19. Wie zu überprüfen, ob eine Domain bereits in SWF existiert
- 20. Wie kann ich testen, ob bereits eine andere Installation läuft?
- 21. Wie kann ich überprüfen, ob eine Datenbankabfrage Ergebnisse liefert?
- 22. Überprüfen Sie, ob die JS-Datei enthalten ist
- 23. Wie kann ich feststellen, ob eine Sitzung aktiv ist?
- 24. wie überprüfen, ob Objekt existiert bereits in einer Liste
- 25. Überprüfen Sie, ob ein Ereignis bereits
- 26. Wie kann man überprüfen, ob eine Datei
- 27. Wie kann ich überprüfen, ob ein Zertifikat selbstsigniert ist?
- 28. Wie kann ich überprüfen, ob der doppelte Wert übergelaufen ist
- 29. Wie kann ich überprüfen, ob ein Dialog geschlossen ist?
- 30. Wie kann ich überprüfen, ob ein AD-Konto gesperrt ist?
Fügen Sie sie nur einmal ein. Nein, ernsthaft, wie schließt du sie ein? –
können Sie den Inhalt der JS-Dateien ändern – ferdynator
Normalerweise sollten Sie nur eine oder vielleicht ein paar mehr js-Dateien (Verkettung/Verkleinerung) haben, so dass es ziemlich einfach ist, das von Hand zu überprüfen. –