7 Stimmen

Erkennen und protokollieren, wenn externe JavaScript- oder CSS-Ressourcen nicht geladen werden können

Ich habe mehrere <head> Verweise auf externe js und css Ressourcen. Meistens sind diese für Dinge wie Drittanbieter-Analysen, etc. Von Zeit zu Zeit (anekdotisch), diese Ressourcen nicht zu laden, was oft in Browser-Timeouts. Ist es möglich, auf dem Server zu erkennen und zu protokollieren, wenn externe JavaScript- oder CSS-Ressourcen nicht geladen werden?

Ich erwog eine Art von Lazy-Loading-Mechanismus, bei dem im Falle eines Fehlers eine spezielle URL aufgerufen wird, um diesen Fehler zu protokollieren. Irgendwelche Vorschläge da draußen?

Was ich denke, passiert:

  1. Der Benutzer ruft unsere Seite auf und der Server verarbeitet die Seite erfolgreich und stellt sie bereit.

  2. Auf der Client-Seite versucht der HTML-Header, eine Verbindung zu unseren 3rd-Party-Integrationspartnern herzustellen, in der Regel durch ein Javascript-Include, das mit "http://www.someothercompany.com..." beginnt.

  3. Das andere Unternehmen kann unsere Last nicht bewältigen oder hat eine miserable Betriebszeit, so dass die Verbindung ausfällt.

  4. Der Benutzer sieht eine allgemeine IE-Seite nicht gefunden, nicht von unserem Server.

Obwohl meine Website funktioniert und auch sonst alles in Ordnung ist, kommt es zu einer Fehlermeldung, nur weil ein Aufruf an die Server von Drittanbietern fehlgeschlagen ist, und zwar in der Kopfzeile einer HTML-Seite.

1 Stimmen

@hippietrail, bitte entfernen Sie #comment10730182_538848 aus dieser URL.

0 Stimmen

5voto

joseeight Punkte 894

Wenn Ihre Anwendung/Seite von JS abhängig ist, können Sie den Inhalt mit JS laden, ich weiß, es ist verwirrend. Wenn Sie diese mit JS laden, können Sie Rückrufe haben, die es Ihnen ermöglichen, nur die Funktionalität des geladenen Inhalts zu haben und sich nicht um das kümmern zu müssen, was Sie nicht geladen haben.

var script = document.createElement("script");
script.type = "text/javascript";
script.src = 'http://domain.com/somefile.js';
script.onload = CallBackForAfterFileLoaded;
document.body.appendChild(script);
function CallBackForAfterFileLoaded (e) {
//Do your magic here...
}

Ich habe in der Regel diese ein bisschen komplexer sein, indem sie Arrays von JS und Dateien, die voneinander abhängig sind, und wenn sie nicht laden, dann habe ich einen Fehlerzustand.

Ich vergaß zu erwähnen, dass ich natürlich nur zeige, wie man ein JS-Tag erstellt. Für die anderen Dateitypen, die Sie laden möchten, müssen Sie Ihre eigene Methode erstellen.

Ich hoffe, das hilft Ihnen, Prost!

1 Stimmen

Das ist mehr oder weniger das, was ich gesucht habe. Ich habe auch diese Technik gefunden: friendlybit.com/js/lazy-loading-asyncronous-javascript

0 Stimmen

Ich nehme an, Sie meinen script.onload = CallBackForAfterFileLoaded; , ohne ()

0 Stimmen

Ja, das tut mir leid!

1voto

alex Punkte 457905

Sie können nach dem Vorhandensein eines Objekts in JavaScript suchen, z.B. um zu sehen, ob jQuery geladen ist oder nicht...

if (typeof jQuery !== 'function') {
   // Was not loaded.
}

jsFiddle .

Sie können auch prüfen, ob CSS-Stile fehlen, wenn Sie zum Beispiel wissen, dass eine bestimmte CSS-Datei die Hintergrundfarbe auf #000 .

if ($('body').css('backgroundColor') !== 'rgb(0, 0, 0)') {
   // Was not loaded.
}

jsFiddle .

Wenn diese fehlschlagen, können Sie eine XHR an den Server senden, um diese Fehler zu protokollieren.

0 Stimmen

Wenn die Seite nicht geladen wird, kann ich keines von beiden tun. Siehe die Bearbeitung, die ich zur Klärung der Frage vorgenommen habe.

0voto

Pei Li Punkte 33

Was ist mit ServiceWorker? Wir können ihn verwenden, um alle HTTP-Anfragen abzufangen und den Antwortcode zu erhalten, um zu protokollieren, ob die externe Ressource nicht geladen werden kann.

-1voto

Majid Fouladpour Punkte 27459

Erstellen Sie einen Hash des JS-Namens und des Sitzungs-Cookies und senden Sie sowohl den JS-Namen in Klartext als auch den Hash. Auf der Serverseite wird derselbe Hash gebildet. Wenn beide gleich sind, wird protokolliert, wenn nicht, wird angenommen, dass es sich um Missbrauch handelt.

0 Stimmen

Wenn die ganze Seite nicht geladen wird, kann ich nichts ausrichten. Siehe die Bearbeitung, die ich zur Klärung der Frage vorgenommen habe.

0 Stimmen

Ich meine, Sie kombinieren dies mit Lazy Loading 3rd party js, après Ihre Seite wird funktionsfähig; und pingen Sie Ihre js_failed_logger.php mit dem Namen und dem Hash für den Fall, dass js nicht geladen werden kann. Ihre Frage deutet darauf hin, dass Sie sich Gedanken darüber machen, wie dies ausgenutzt werden kann, und nicht darüber, wie man es implementiert.

0 Stimmen

Danke. Ich denke, ich bin zunächst daran interessiert, wie ich es umsetzen kann. Wenn es funktioniert, kann ich herausfinden, wie man es sichern kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X