2016-05-05 11 views
0

Ich habe ein serverseitiges Skript, das dynamisch eine js-Datei in einem s3-Bucket erstellt, nachdem eine bestimmte URL eine Seite angezeigt hat. Das serverseitige Skript wird alle 1 Minute ausgeführt.So überprüfen Sie, ob eine dynamisch erstellte Datei in AWS S3 mit JS existiert

Auf einer beliebigen URL auf der Website habe ich ein Skript, das versucht, diese dynamisch erstellte Datei aufzurufen.

wie:

var host = window.location.host; 
var pathName = window.location.pathname; 
var script = document.createElement('script'); 
script.async = true; 
script.type = 'text/javascript'; 
script.src="https://s3.amazonaws.com/some_bucket/"+host+pathName+".js; 
var node = document.getElementsByTagName('script')[0]; 
node.parentNode.insertBefore(script, node); 
})(); 

Das Problem ist, dass, wenn eine neue URL wird auf der Website erstellt und die ersten Besucher gehen auf diese Seite dann der cron-Job eine Chance zu laufen, hatte und deshalb die js Datei existiert noch nicht im Bucket. Dies verursacht einen 404-Fehler, aber verursacht auch einen Fehler in der On-Page-Javascript oberhalb der js-Bibliothek, die es enthält.

Gibt es eine Möglichkeit, das Vorhandensein der Datei im laufenden Betrieb zu prüfen und eine andere Datei als Standard zu verwenden, wenn die dynamisch erstellte Datei noch nicht erstellt wurde?

Zum Beispiel (Pseudocode):

try{ 
    script.src="https://s3.amazonaws.com/some_bucket/"+host+pathName+".js; 
} 
catch(e){ 
    404error = true; 
} 
finally{ 
    if(404error == true){ 
     script.src="https://s3.amazonaws.com/some_bucket/DEFAULT.js"; 
    } 
} 

Aktualisiert Code mit einer anderen Datei auf Fehler aufrufen. Dies ruft die andere Datei erfolgreich auf, verursacht jedoch weiterhin einen 404-Fehler in Chrome.

var host = window.location.host; 
var pathName = window.location.pathname; 
var script = document.createElement('script'); 
script.async = true; 
script.type = 'text/javascript'; 
script.onerror = function(){ 
    var host = window.location.host; 
    var pathName = window.location.pathname; 
    var script = document.createElement('script'); 
    script.async = true; 
    script.type = 'text/javascript'; 
    script.src="https://s3.amazonaws.com/some_bucket/some_default_file.js"; 
    var node = document.getElementsByTagName('script')[0]; 
    node.parentNode.insertBefore(script, node); 
} 
script.src="https://s3.amazonaws.com/some_bucket/"+host+pathName+".js; 
var node = document.getElementsByTagName('script')[0]; 
node.parentNode.insertBefore(script, node); 
})(); 

Antwort

0

Verwendung script.onerror:

var pathName = window.location.pathname; 
var script  = document.createElement('script'); 
script.async = true; 
script.type = 'text/javascript'; 
script.onerror = function() { 
    console.log('script failed to load'); 
}; 
script.src  = "https://s3.amazonaws.com/some_bucket/" + host + pathName + ".js"; 
var node  = document.getElementsByTagName('script')[0]; 
node.parentNode.insertBefore(script, node); 
+0

gab ich dies einen Schuss aber Chrome wirft noch einen 404. Mit der onerror Funktion ich das Skript versuchte, erneut ausführen, die den Aufruf der Standard-Datei erfolgreich, aber wieder macht, Der 404 wird immer noch geworfen. –

+0

Ich bin mir nicht sicher, ob ich verstehe, was du sagst. Sie können nicht verhindern, dass 404 auftritt, aber Sie * können * es entdecken und eine andere Ressource laden. – andlrc

Verwandte Themen