Javascript blues

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
Post Reply
svasti
Posts: 1649
Joined: Wed Dec 17, 2008 5:08 pm

Javascript blues

Post by svasti » Mon Jul 04, 2016 3:00 pm

:cry: :cry: :cry:
Auf localhost läufts prima, aber auf dem Server nicht.

Irgendwo ist ein Javascript Bug drin. Nur wo? Wie kriegt man das raus? Habe hier in Firefuchs mal die sog. Konsole aufgemacht und der sagt mir:

Type Error: inputs[0] is undefined
admin,js 530:13

Hä, wo isn das? scheint sich auf die admin.js des
cores zu beziehen, aber das kann's nicht sein

Code: Select all

/*
 * Initialize displaying of the meta description length.
 */
(function () {
    var form, description, indicator;

    function undoPasswordAutocompletion() {
        var inputs = document.getElementsByName(
            "PL3bbeec384_security_password_OLD"
        );
        if (inputs) {
            inputs[0].value = "";
        }
    }
 
Das Plugin, das zickt is Miniblog 0.5 rc
Zugang zu der Website, wo es hakt kann ich per PM geben

Ich habe im Javascript eine Fehlerabfangfunktion und die schlägt an (aber nur auf dem Server mit php 5.3):

Code: Select all

function mblogSendHeader () {
    window.onerror = function() {
        alert("Fehler beim Speichern der Kopfdaten. Bitte den Webmaster benachrichtigen. Der Inhalt des Blogbeitrags wird davon nicht beeinträchtigt und kann weiter bearbeitet werden.");
        return true;
    };

cmb
Posts: 13274
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: Javascript blues

Post by cmb » Mon Jul 04, 2016 4:06 pm

svasti wrote:Irgendwo ist ein Javascript Bug drin. Nur wo? Wie kriegt man das raus? Habe hier in Firefuchs mal die sog. Konsole aufgemacht
Jupp, das ist der richtige Ansatz. Und irgendwo in den Dev-Tools gibts auch noch einen Debugger mit allen Schikanen (Break-Points, Watches, etc.) Lohnt sich, sich damit mal zu beschäftigen (sollte ich auch mal tun!)
svasti wrote:Type Error: inputs[0] is undefined
admin,js 530:13

Hä, wo isn das? scheint sich auf die admin.js des
cores zu beziehen, aber das kann's nicht sein
Doch, leider noch immer in XH 1.6.7.
svasti wrote:Ich habe im Javascript eine Fehlerabfangfunktion und die schlägt an (aber nur auf dem Server mit php 5.3):
Einen error Listener für window würde ich nicht empfehlen, denn wenn ein anderes Plugin einen Fehler verursacht, dann wird dieser ebenfalls aufgerufen. Am besten den evtl. kritischen Code in ein try-catch einschließen (ist überall verfügbar, selbst Uralt-IEs):

Code: Select all

try {
    // Code, der eventuell eine Exception auslöst
} catch (ex) {
  // hier kann `ex` untersucht werden, und der Fehler behandelt werden
}
Besser ist es aber natürlich, einen Fehler erst gar nicht zu verursachen (Stichwort: defensive Programmierung).
svasti wrote:Zugang zu der Website, wo es hakt kann ich per PM geben
Zugang bräuchte ich vermutlich nicht, aber die URL schon. :)
Christoph M. Becker – Plugins for CMSimple_XH

svasti
Posts: 1649
Joined: Wed Dec 17, 2008 5:08 pm

Re: Javascript blues

Post by svasti » Mon Jul 04, 2016 4:46 pm

cmb wrote:Zugang bräuchte ich vermutlich nicht, aber die URL schon.
Die einzige Seite die öffentlich ist, ist die Memberpages-Anmeldeseite. Die Seite wo's den Blues gibt, ist die Seite wo die Mitglieder Blogbeiträge verfassen können und dazu die Überschrift etc per Ajax an den Server schicken. Hm, in Verision beta3 ging's noch, jetzt dachte ich, ich sei fertig, und 's geht nicht. :(

Habe dir also die Daten per PM geschickt.

svasti
Posts: 1649
Joined: Wed Dec 17, 2008 5:08 pm

Re: Javascript blues

Post by svasti » Mon Jul 04, 2016 4:58 pm

Das Verrückte ist, dass dasselbe Plugin auf einer anderen Site auf demselben Server wohl funktioniert.

cmb
Posts: 13274
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: Javascript blues

Post by cmb » Mon Jul 04, 2016 5:27 pm

Okay, ich habe mal debuggt. Damit ich da überhaupt was sehen konnte, habe ich window.onerror mal resettet. Und dann zeigt die Konsole:

Code: Select all

Blog-schreiben:251 Uncaught TypeError: Cannot read property 'checked' of undefined
mblogSendHeader @ ?Blog-schreiben:251
onclick @ ?Blog-schreiben:146
Also mal den relevanten Teil in der Konsole eintippen:

Code: Select all

document.getElementsByName("mblogcomments")
Ergebnis:

Code: Select all

[]

Es gibt also kein Element mit diesem Namen. Weiß nicht warum, aber da bietet sich im Zweifel defensive Programmierung an, z.B.:

Code: Select all

function getPropertyOfFirstElementByName(name, propertyName) {
    var elements = document.getElementsByName(name);
    if (elements && element.length>= 1) {
        var element = elements[0];
        if (propertyName in element) {
            return element.propertyName;
        }
    }
    return null;
Ich selbst verwende aber getElementsByName() eigentlich nie. Da ist forms.elements eleganter, finde ich. Also erst das Formular ausfindig machen, und dann

Code: Select all

form.elements.mblogcomments
Dazu müssen sich die Elemente aber im Formular befinden. Und ggf. muss auch hier berücksichtigt werden, dass ein Element nicht existiert. Aber immerhin muss man nicht immer auf das erste Element einer Liste ([0]) zugreifen.

Du kannst Dir auch mal XH.serializeForm() anschauen; evtl. kannst Du die Funktion sogar wiederverwenden (sie wird aber nur im Adminmodus geladen, also müsstest Du sie wohl sowieso kopieren).
Christoph M. Becker – Plugins for CMSimple_XH

svasti
Posts: 1649
Joined: Wed Dec 17, 2008 5:08 pm

Re: Javascript blues

Post by svasti » Mon Jul 04, 2016 5:57 pm

Aaaah, jetzt weiß ich, wo es hakt: in letzter Minute hatte ich die Möglichkeit zu Kommentieren eingebaut und damit eine neue Variable. Tja, und wenn diese Möglichkeit in der Config nicht aktiviert ist, fragt Javascript eine nicht existierende Variable ab.
cmb wrote:Ich selbst verwende aber getElementsByName() eigentlich nie.
Ich auch nicht, aber zuerst war's eine PHP-Post Abfrage, die ich dann zu Ajax aufgebohrt habe und da wusste ich nichts Besseres :oops:
cmb wrote:defensive Programmierung
hört sich gut an. Ich finde Javascript viel schwieriger als PHP, vor allem wegen der Fehler Mitteilungen. Ok, mit deinen Hinweisen komme ich schon mal ein Stück weiter. Merci beaucoup.

cmb
Posts: 13274
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: Javascript blues

Post by cmb » Mon Jul 04, 2016 7:33 pm

svasti wrote: Ich finde Javascript viel schwieriger als PHP, vor allem wegen der Fehler Mitteilungen.
Na ja, ich denke, dass sich beide Sprachen zumindest bei prozeduraler Programmierung nicht viel nehmen. Das Schwierige bei JavaScript ist halt die gewöhnungsbedürftige Browserumgebung.
svasti wrote:Ok, mit deinen Hinweisen komme ich schon mal ein Stück weiter.
Prima. :)
Christoph M. Becker – Plugins for CMSimple_XH

Post Reply