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?
Versuchen :
window.onerror = function(){
return true;
}
Das heißt, wenn Sie dies vor der Ausführung des fehlerhaften Skripts einfügen können.
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 */ }
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.
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:
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.
Was ist mit window.onerror
?
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!
<script>
var _z = console;
Object.defineProperty(window, 'console', {
get: function(){
if (_z._commandLineAPI) {
return true;
}
return _z;
},
set: function(val) {
_z = val;
}
});
</script>
Rufen Sie das Plugin auf
try{
......
}
catch(e){
}
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.
Das ist für mich gearbeitet:
try{
//your code
}
catch(error)
{
return true;
}
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 :)