Verhindert, dass Javascript angehalten wird, wenn ein Fehler auftritt

Lesezeit: 6 Minuten

Unser Produkt fügt ein Skript in die Websites des Kunden ein, ähnlich wie eine Live-Chat-Box.

Oft haben die Websites von Kunden fehlerhaftes Javascript, das auch unseren Code stoppt (der Browser stoppt die Ausführung, wenn Fehler auftreten). Gibt es eine Möglichkeit, unseren Code trotzdem auszuführen, obwohl es Fehler in der Konsole zu Dingen wie undefinierten Methoden oder Variablen gibt?

Vielen Dank für Ihre Hilfe.

  • Theoretisch nicht, es sei denn, Sie führen Ihr Skript vor allem anderen auf der Seite aus (was normalerweise nicht möglich oder sogar wünschenswert ist).

    – Chris Tonkinson

    31. Mai 2012 um 0:25 Uhr


  • So ähnlich wie wenn der Flugzeugmotor ausfällt, gibt es keine Möglichkeit, ihn einfach weiterlaufen zu lassen

    – CD Smith

    31. Mai 2012 um 0:25 Uhr

  • Ich denke nicht, dass Sie Kundenseiten babysitten sollten. Wenn ihre Seiten fehlerhaft sind, ist es ihr eigenes Problem. Es würde sie auch dazu motivieren, den Code tatsächlich zu reparieren, anstatt eine Problemumgehung nach der anderen hinzuzufügen.

    – Fabrício Matté

    31. Mai 2012 um 0:27 Uhr


  • @AlfalfaStrange schließen, aber dies ist weniger mit einem allgemeinen Versagen vergleichbar als mit einer tatsächlichen Explosion. 🙂 +1

    – Chris Tonkinson

    31. Mai 2012 um 0:27 Uhr


  • @D3mon-1stVFW: Meinst du das ernst? Ein Applet? Wir haben 2012, nicht 2000. Aber verschwenden Sie keine Zeit damit, Ihre Sachen auf kaputten Seiten zum Laufen zu bringen. Wenn sie es wollen, sollen sie ihre Sachen reparieren.

    – Meister der Diebe

    31. Mai 2012 um 0:51 Uhr


Benutzeravatar von Chris Tonkinson
Chris Tonkinson

Die kurze Antwort ist, dass Sie es wirklich nicht können.

“Lösung” #1: Sie könnten darauf bestehen, dass IHR Code von Drittanbietern vor dem Code aller anderen ausgeführt wird. In den meisten Fällen ist dies nicht möglich oder sogar wünschenswert.

“Lösung” #2: Sie könnten darauf bestehen, dass die 1st-Party-Ingenieure den gesamten 3rd-Party-Code einpacken try/catch Blöcke. Aber diese Lösung kauft Ihnen wirklich keine Garantie, weil sehr häufig Bibliotheken von Drittanbietern zusätzliche hinzufügen <script> Tags auf der Seite – diese würden nicht unter die “Gerichtsbarkeit” der fallen try/catch Gültigkeitsbereich, der den Code umschließt, der dieses/diese Tag(s) erstellt hat.

“Lösung” #3: Sie könnten IHRE App vollständig im Rahmen einer erstellen <iframe>, wodurch das Problem vollständig vermieden wird. Selbst wenn Sie sehr schlau sind, werden Sie leider schnell auf domänenübergreifende Verstöße, Cookie-Einschränkungen von Drittanbietern und dergleichen stoßen. Es ist sehr wahrscheinlich, dass dies bei Ihnen nicht funktioniert.

„Lösung“ Nr. 4: Sie könnten Ihrem Kunden das Problem erklären und verlangen, dass der andere Drittanbietercode sauber ausgeführt wird. Ich sage, dies ist eine “Lösung”, weil es ehrlich gesagt keine “Lösung” für Ihre Frage ist, wenn Ihre Frage eine ist wie man genau das vermeidet.

Leider ist Option Nr. 4 die beste Wahl. Es kann hilfreich sein, wenn Sie beobachten, dass andere Bibliotheken von Drittanbietern auf die gleiche Weise „kaputt“ gehen: Sie können Ihrem Kunden sagen: „Hey, das liegt nicht nur an mir – X, Y und Z sind alle ebenfalls „kaputt“ wegen .” Es kann dazu führen, dass sie den anstößigen Code unter Druck setzen, was das Web zu einem glücklicheren Ort für alle Beteiligten macht.

  • Also packen Sie die Funktionen in eine ‘Schließung’ wie $(function() { function myLibraryFunction() {...} } wird nicht helfen und die Codeausführung isolieren, wie es die Funktionsnamen und Variablen isoliert?

    – Chloe

    16. Oktober 2017 um 15:21 Uhr


  • Nicht erfasste Fehler, die in einem Skript ausgelöst werden (<script></script>) sollte nur dieses Skript abbrechen und keine anderen Skripts auf der Seite. Selbst dann könnte es möglicherweise eine Wiederherstellung/einen erneuten Versuch geben … zum Beispiel, wenn a setTimeout aufgerufen wurde, bevor der nicht abgefangene Fehler auftrat, der es ermöglichte, den Status zu überprüfen, neu zu starten, es erneut zu versuchen usw. Fehler beim Abfangen/Behandeln von Fehlern für verschiedene Skripte von Drittanbietern waren nicht gut, da das Tag-Management für das Laden verantwortlich war.

    – mattpr

    12. September 2022 um 13:24 Uhr


Benutzeravatar von Jason Kulatunga
Jason Kulatunga

Wie andere gesagt haben, ist es vielleicht nicht das Beste, nach einem Fehler fortzufahren, aber Sie können Folgendes versuchen:

function ignoreerror()
{
   return true
}
window.onerror=ignoreerror();

Mehr Details Hier

Das onerror-Ereignis wird immer dann ausgelöst, wenn ein JavaScript-Fehler auftritt (je nach Konfiguration Ihres Browsers wird möglicherweise ein Fehlerdialog angezeigt). Das onerror-Ereignis ist an das window-Objekt angehängt, ein ziemlich ungewöhnlicher Ort, an den man sich zurückziehen kann, aber aus gutem Grund. Es wird auf diese Weise angehängt, damit es alle JavaScript-Fehler auf einer Seite überwachen kann, sogar die im Abschnitt der Seite.

Opera hat eine Seite mit mehr Details

Browsers supporting window.onerror
Chrome 13+
Firefox 6.0+
Internet Explorer 5.5+
Opera 11.60+
Safari 5.1+

  • Beachten Sie die MDN-Dokumentation: “Beachten Sie, dass einige/viele Fehlerereignisse nicht window.onerror auslösen, Sie müssen speziell darauf lauschen.” (developer.mozilla.org/en/DOM/window.onerror)

    – Chris Tonkinson

    31. Mai 2012 um 1:24 Uhr

  • Ich habe festgestellt, dass window.onerror immer noch dazu führt, dass der Code nicht mehr ausgeführt wird. Alles, was true zurückzugeben scheint, ist zu unterdrücken, dass die Ausnahme in der Konsole erscheint. Der folgende Code (getestet in Chrome 42 und IE 10) veranschaulicht meinen Standpunkt: window.onerror = function(){return true;}; var s = “”; s.push(“H”); alarm(“test”); Der Fehler wird unterdrückt, aber der Alarmcode wird nie erreicht.

    – Scott Marcus

    3. September 2015 um 18:57 Uhr


  • Verwenden onerror return true; oder addEventListener .preventDefault() verhindert nur die Anmeldung an der Konsole. Ein nicht abgefangener Fehler bricht immer das CURRENT SCRIPT ab. Der Schlüssel besteht darin, Ihren Code in einen separaten Skript-BLOCK (z <script></script>). Das Problem ist wahrscheinlich, dass ihr Code von einem einzelnen “Tag-Management” -Skript geladen wird, das selbst fehlerhaft ist oder Fehler für geladene Skripte nicht isoliert. Wenn also ein Fehler auftritt, wird er nicht behandelt und sie erhalten ihn nicht Gelegenheit zum Laden.

    – mattpr

    12. September 2022 um 13:19 Uhr

Sie können nicht von Ihrem Code aus – sie müssen verwendet werden try/catch für fragwürdige Schriftstücke.

Benutzeravatar von Shaz
Shaz

Sie könnten sie eine einfügen lassen iframe in ihre Seite, anstatt dass Sie versuchen, Code mit a einzufügen script Tag so: http://jsfiddle.net/EzMGD/ Beachten Sie, wie das Skript einen Fehler auslöst, aber wir können den Inhalt immer noch im Iframe sehen. Der Iframe sollte dabei helfen, gegebenenfalls die Variablen des anderen zu verwenden.

<script>
    MeaningOfLife();
</script>

<iframe src="http://bing.com"></iframe>​

Oder fügen Sie den Code ein, damit es der allererste oder allerletzte ist script.

Nun, für mich funktioniert das gut:

element = document.querySelector('.that-pretty-element');
if (element != null) {
    element.onclick = function () {
        alert(" I'm working beibi ;) ");
    }
}

querySelector() kehrt zurück falsealso können wir mit überprüfen if's

1446450cookie-checkVerhindert, dass Javascript angehalten wird, wenn ein Fehler auftritt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy