it-swarm.com.de

Ignorieren Sie Javascript-Syntaxfehler auf einer Seite, und fahren Sie mit der Ausführung des Skripts fort

Ich entwickle Plugins für WordPress. Es verwendet etwas Jquery auf der Benutzerseite (Themes) als Jquery-Plugin ..__ Das Problem ist, wenn ein Javascript-Fehler mit anderen Plugins von anderen Autoren gemacht wird, kann das JavaScript meines Plugins nicht ausgeführt werden.

Und das Schlimmste ist, dass die Leute denken, dass mein Plugin einen schwerwiegenden Fehler hat, obwohl es zu 100% mit Fehlerbehandlungsbedingungsanweisungen funktioniert. Es liegt jedoch an einigen anderen Javascript-Syntaxfehlern einiger anderer WP -Plugin-/Theme-Autoren.

Gibt es eine Möglichkeit, mein Plugin JS weiterhin auszuführen und dabei andere JS-Fehler zu ignorieren. Oder kann ich Vorschläge zur Behandlung dieses Problems haben?

enter image description here

47

Versuchen :

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

Das heißt, wenn Sie dies vor der Ausführung des fehlerhaften Skripts einfügen können.

22
Cosmin

Sie sollten den alten JavaScript-Fehler korrigieren, da er viele Probleme verursachen kann, nicht für jetzt, sondern für das nächste Mal.

Setzen Sie Ihre JavaScript-Datei/-Code oben ein (bevor JS einen Fehler aufweist), und rufen Sie sie auf, bevor JavaScript von anderem JavaScript-Code ausgeführt wird.

Wenn Sie zur Laufzeit mit JavaScript-Ausnahmen umgehen müssen, ist die beste Option

try { /* run js code */ } 
    catch (error){ /* resolve the issue or bug */ }
8
Krishna Kumar

Sie sollten jeden Fehler mit dem Ereignis error schlucken können:

$(window).error(function(e){
    e.preventDefault();
});

Ich habe das noch nie versucht, aber es sollte theoretisch funktionieren.

Es sei darauf hingewiesen, dass dies wahrscheinlich keine gute Lösung für Ihr Problem ist. Es kann sein, dass Ihr Plugin andere Plugins stört. Es ist natürlich möglich, dass die Fehler nicht von Ihnen selbst verschuldet sind, im Allgemeinen (bei öffentlich veröffentlichten Plugins) ist dies jedoch nicht der Fall.

4
Shmiddty

Ich bin auf das gleiche Problem gestoßen: Es gibt eine Reihe von Plugins, die zu viele Annahmen machen und JavaScript-Fehler auf Ihrer Seite verursachen, selbst wenn Sie ein guter Bürger sind. Diese Fehler haben nichts mit Ihrem Plugin zu tun.

Es macht keinen Sinn, Fehler in anderen Plugins zu behandeln - IMO ist es besser, in sich geschlossen zu sein, aber widerstandsfähig gegenüber Fehlern.

In meinem Fall stoppten die Fehler das Ereignis DOM ready von jquery, und mein JavaScript-Init-Code wurde nicht ausgeführt. Die genaue Form des Fehlers ist jedoch nicht wichtig - die Lösung besteht nur darin, bei mehreren Ereignissen auszulösen.

Die Lösung für mich bestand darin, zusätzlich zum jQuery DOM ready -Ereignis Fallbacks zu haben:

  1. Ich habe jeden Code, den ich auf das DOM-ready-Ereignis auslösen wollte, in seine eigene Funktion verpackt - z. my_hardened_init_action ();
  2. Ich habe eine Funktion hinzugefügt, my_hardened_init (), die nur einmal ausgeführt wird. Es ruft my_hardened_init_action () beim ersten Aufruf auf und führt bei nachfolgenden Aufrufen nichts aus.
  3. Ich habe verschiedene Methoden hinzugefügt, um my_hardened_init () in der WordPress-Fußzeile aufzurufen. In meinem Fall brauchte ich nur zwei. Versuchen Sie zunächst die übliche jQuery-DOM-Init, aber Sie können auf ein einfaches setTimeout () zurückgreifen. Wenn also die jQuery-DOM-Init aufgrund defektem JavaScript nie ausgelöst wird, wird das Zeitlimit kurz danach ausgelöst, wenn die Seite vollständig geladen wurde.

Sie können mehrere andere Fallbacks hinzufügen - bei Bedarf sogar den Code zum Header hinzufügen. Da my_hardened_init () nur einmal ausgeführt wird, können Sie es so oft versuchen, wie Sie möchten, um es auszulösen.

Dies hat auf einer Reihe von Client-Sites mit einer Reihe anderer defekter Plugins funktioniert.

Hoffe das hilft.

4
Jhong
2
ScottE

Wenn Ihre Seite läuft. Benutzen:

$(window).error(function(e){
        e.preventDefault();
});  // IGNORE ALL ERROR JQUERY!

oder verwenden Sie:

window.onerror = function(){
   return true;
}  // IGNORE ALL ERROR JAVASCRIPT!
1
<script>
var _z = console;
Object.defineProperty(window, 'console', {
    get: function(){
        if (_z._commandLineAPI) {
         return true;   
        }
        return _z;
    },
    set: function(val) {
        _z = val;
    }
});
</script>
1

Rufen Sie das Plugin auf 

try{
  ......
}
catch(e){

}
0
Rahul

Vielleicht könnten Sie versuchen, Ihre Js in einem HTML-Objekt abzulegen, so dass es auf einer separaten Seite ausgeführt wird. Das hilft wahrscheinlich nicht viel, wenn die Js auf der Hauptseite nicht mit dem Objekt interagieren. Nur etwas zum Spielen.

0
Ian Wizard

Das ist für mich gearbeitet:

try{
    //your code
}
catch(error)
{
    return true;
}
0
Enginerd Sunio

Ein normaler Try-Catch-Befehl funktioniert bei diesen Arten von Fehlern nicht. 

Mögliche Problemumgehungen:

Verwenden Sie inline-css, um die Leiste anstelle von jQuery nach links zu verschieben (ich bin nicht sicher, was die volle Funktion Ihres Plugins ist, aber wenn die Leiste nur nach links gleitet, warum nicht einfach css verwenden?)

Haben Sie einen unsichtbaren iframe, der versucht, Code auf der übergeordneten Seite auszuführen. Wenn dies fehlschlägt, wird der Benutzer (in diesem Iframe) darauf hingewiesen, dass es nicht Ihre Schuld war :)

0
codelove