Ole.: Autocomplete etc. für Input-Elemente wirksam deaktivieren?

Guten Morgen,

ich bin auf ein kleines Problem gestoßen:

Nutzer können sich mit mobilen Endgeräten nicht mit einem Formular anmelden, weil sie die Autokorrektur oder die Autovervollständigung zur Vervollständigung ihres Benutzernamens nutzen und es dadurch vorkommt, dass

a) der Anfangsbuchstabe groß geschrieben,
b) am Ende ein Leerzeichen hinzugefügt oder
c) ein total falscher Benutzername eingefügt wird.

Punkt (a) kann man mit autocapitalize="none" (nicht "false" wie es so häufig zu finden ist! siehe iOS Dev Lib) zumindest auf iOS-Geräten in den Griff bekommen.

Mein Sorgenkind sind aktuell die Android-Geräte.

Mein Input sieht mittlerweile so aus:

  
<input type="text" id="username" value="" autocapitalize="none" autocomplete="off" autocorrect="off" spellcheck="false">  

Auf den Android-Geräten die ich zum testen hier habe, wird immer noch die Autovervollständigung angezeigt und wenn man dann einen dort vorgeschlagenen String nutzt, wird automatisch ein Leerzeichen angehangen, was wiederum dazu führt, dass (b) und (c) eintreten können.
Dass ich gegen (c) im Grunde generell machtlos bin ist mir klar, nur würde ich gerne die technisch unterstützte Blödheit ausschließen.

Gibt es weitere Möglichkeiten, die ich bisher nur noch nicht berücksichtigt habe?

Danke & Gruß
Ole

  1. Gibt es weitere Möglichkeiten, die ich bisher nur noch nicht berücksichtigt habe?

    Ja.
    Einen Zufallsparameter, den Du serverseitig später wieder wegkürzt.

    Gruß, Heinz

    1. Ja.
      Einen Zufallsparameter, den Du serverseitig später wieder wegkürzt.

      Z.b. einmal als hidden-field im Formular übergeben. Und einmal als Anhängsel Deines name-Attributs des Input-fileds.

      Dann serverseitig erst das das hidden-Element Deines Request-Arrays auslesen, danach weißt Du, wie Dein name-Elemet heißt, welches den Usernamen beinhaltet.

      Die Zufalls-ID kannst Du mit php erstellen, dazu hat es eine Funktion.

      Gruß, Heinz

      1. Hallo Heinz,

        der name des input-Elements hat nichts mit der Autovervollständigung bzw. Autokorrektur auf Mobilen Geräten zu tun.

        Bei Mobilen Geräten wird meiner Erfahrung nach das interne Wörterbuch mit der vom User getätigten Eingabe verglichen und Vorschläge gemacht, unabhängig vom Namen des Feldes.

        Danke & Gruß
        Ole

        1. Bei Mobilen Geräten wird meiner Erfahrung nach das interne Wörterbuch mit der vom User getätigten Eingabe verglichen und Vorschläge gemacht, unabhängig vom Namen des Feldes.

          Ach, dieser Kack ist das.
          Ok, dann ist meine Lösung nur für echte Browser in echten Rechnern geeignet.

          Und was (vor allem) Android angeht, das hat Win2-Niveau, ich ärgere mich täglich darüber.

          Gruß, Heinz

  2. Hi,

    Auf den Android-Geräten die ich zum testen hier habe, wird immer noch die Autovervollständigung angezeigt und wenn man dann einen dort vorgeschlagenen String nutzt, wird automatisch ein Leerzeichen angehangen, was wiederum dazu führt, dass (b) und (c) eintreten können.
    Dass ich gegen (c) im Grunde generell machtlos bin ist mir klar, nur würde ich gerne die technisch unterstützte Blödheit ausschließen.

    Dann schließe zumindest (b) serverseitig aus.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hallo,

      Dann schließe zumindest (b) serverseitig aus.

      Das ist leider nicht möglich, da das Leerzeichen, zumindest theoretisch, ein valides Zeichen des Benutzernamens ist, auch am Anfang und am Ende ... so unsinnig das auch ist. Ist nicht auf meinem Mist gewachsen und habe ich auch keinen Einfluss drauf.

      Um den Benutzernamen also um ein Leerzeichen am Ende zu kürzen müssten sämtliche Benutzerdaten (>100.000) in mehreren Systemen (Shop, ERP, CRM etc.) überprüft und ggf. geändert und die User dann darüber informiert werden, dass "einfach so" ihre Benutzernamen geändert wurden.

      Außerdem müsste dann obendrein noch Anmelde- und Validierungsprozess(e) überarbeitet werden.

      Unterm Strich heißt das: ich kann (b) nicht ausschließen.

      Danke & Gruß
      Ole

      1. Hi,

        Das ist leider nicht möglich, da das Leerzeichen, zumindest theoretisch, ein valides Zeichen des Benutzernamens ist, auch am Anfang und am Ende ... so unsinnig das auch ist. Ist nicht auf meinem Mist gewachsen und habe ich auch keinen Einfluss drauf.

        Dann bleibt nur noch, der verantwortlichen Person den “Some people are Idiots – and You are one of them!”-Orden am goldenen Band zu verleihen.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Hi

          Dann bleibt nur noch, der verantwortlichen Person den “Some people are Idiots – and You are one of them!”-Orden am goldenen Band zu verleihen.

          Nette Idee, aber leider auch nicht praktikabel, da diese Person(engruppe(n)) wohl schon lange nicht mehr im Unternehmen ist und die folgenden Generationen, mangels eines Problems mit diesem Unterfangen nie eine Änderung durchgeführt haben.

          Im Hintergrund hängt ein Systemmolloch der über viele Jahre gewachsen und durch viele Hände gegangen ist und mit dem mehr als 5000 Personen arbeiten.

          Danke & Gruß
          Ole

      2. Hi!

        Außerdem müsste dann obendrein noch Anmelde- und Validierungsprozess(e) überarbeitet werden.

        Du könntest zumindest Anmeldungen von Benutzernamen mit Leerzeichen am Ende, bzw. groß geschriebenen Anfangsbuchstaben, akzeptieren, wenn das Passwort zum "korrigierten" Benutzernamen passt.

        FG Ulysses

        1. Hi

          Du könntest zumindest Anmeldungen von Benutzernamen mit Leerzeichen am Ende, bzw. groß geschriebenen Anfangsbuchstaben, akzeptieren, wenn das Passwort zum "korrigierten" Benutzernamen passt.

          Sowas in der Richtung werden wir jetzt wohl auch implementieren.

          Danke & Gruß
          Ole

  3. Moin!

    Aeh. Ich versuch mal zu erlaeutern, wie ich dich verstehe. Danach, warum ich gar kein Problem sehe.

    Du hast folgendes Problem:
    User "arthurdent98" moechte sich anmelden.
    Er geht auf das Inputfeld wo er seinen Namen eingen soll und frueher oder spaeter erscheint eine Auswahl die er auch nutzt.
    Dein Problem ist nun, dass Du sowas bekommst:
    "Arthurdent98" Oder noch schlimmer "Arthurdent98 "

    Du versuchst nun das Inputfeld zu zwingen alles klein aufzunhemen, damit Du wieder "arthurdent98" bekommst, aber weisst dann immer noch nichts mit "arthurdent98 " anzufangen.

    Wenn das so stimmt, dann zu  meiner Gegenfrage:
    Wo ist denn das Problem? Du schreibst nichts zu Deiner Programmiersprache, aber gibts wirklich eine Programmiersprache die nicht upper-/lowercase und trim beherrscht? Du musst nichts am Eingabefeld drehen sondern an Deiner Ueberpruefung. Lediglich bei Passwoertern musst Du die Eingabe scharf pruefen.

    --
    Signaturen sind blöd!
    1. Hallo,

      Du versuchst nun das Inputfeld zu zwingen alles klein aufzunhemen, damit Du wieder "arthurdent98" bekommst, aber weisst dann immer noch nichts mit "arthurdent98 " anzufangen.

      Nein, nicht ganz. Alle gelisteten Version können valide sein, da der Benutzername case sensetive ist. Ich möchte nur verhindern, dass die Eingabe des Users ggf. durch die technischen Hilfsmittel des Smartphones verfälscht wird.

      Es gibt 3 mögliche Einflussnamen Seitens der Geräte:

      1. Autocapitalize

      Damit wird der erste Buchstabe immer groß gemacht, egal was der User eingetippt hat.

      1. Autocorrect

      Die klassische Rechtschreibkorrektur, die im Zweifel alles versemmeln kann.

      1. Autocomplete

      Eine Autovervollständigung bzw. Wortvervorschlagung bei welcher dem User Worte aus der Datenbank des Gerätes vorgeschlagen werden um seine Buchstaben sinnvoll zu ergänzen.
      Bei einigen Geräten führt die Auswahl dieser vorgeschlagenen Worte dazu, dass ein Leerzeichen angehängt wird, weil das Gerät davon ausgeht, dass auf ein Wort ein weiteres folgt.

      Bei iOS ist, wie im Ursprungspost beschrieben bereits gelungen diese Funktionen zu unterbinden. Unter Android ist aber (3) mit den mir bekannten Mitteln nicht zu unterbinden.

      Wo ist denn das Problem? Du schreibst nichts zu Deiner Programmiersprache, aber gibts wirklich eine Programmiersprache die nicht upper-/lowercase und trim beherrscht?

      Die Sprache ist zwar irrelevant, aber ich habe Java und Javascript (jQuery, Angular) zur Verfügung.

      Du musst nichts am Eingabefeld drehen sondern an Deiner Ueberpruefung.

      Leider doch.

      Danke & Gruß
      Ole

      1. Hallo,

        könnte man nicht das input-Element gegen ein textarea-Element ersetzen? Meines Erachtens kommt die Autocomplete-Funktion bei diesem Element nicht zur Anwendung.

        Gruss,
        Worf

        1. Hallo Worf,

          könnte man nicht das input-Element gegen ein textarea-Element ersetzen? Meines Erachtens kommt die Autocomplete-Funktion bei diesem Element nicht zur Anwendung.

          Habe ich probiert. Auch hier ist die Autovervollständigung aktiv.

          Danke & Gruß
          Ole

      2. Om nah hoo pez nyeetz, Ole.!

        Ich würd da gar nichts machen. Der User sollte wissen, wie er sein Smartphone zu bedienen hat.

        Du verhätschelst den User ohne dass er weiß, dass du es bist, der ihn verhätschelt. Er denkt an BS-Update und erwartet die Funktionalität dann auch von anderen Internetseiten.

        Matthias

        --
        1/z ist kein Blatt Papier.

        1. Hallo Matthias,

          Ich würd da gar nichts machen. Der User sollte wissen, wie er sein Smartphone zu bedienen hat.

          Ein frommer Wunsch. Aber leider als Argument gegenüber meinem Vorgesetzten nicht zu gebrauchen ... da spreche ich aus Erfahrung.

          Ein Kunde, der sich, und sei es aus eigener oder technisch unterstützter Inkompetenz, nicht anmelden kann, kann keinen Umsatz generieren. Das gilt es um jeden Preis zu vermeiden.

          Danke & Gruß
          Ole

          1. Om nah hoo pez nyeetz, Ole.!

            Ein Kunde, der sich, und sei es aus eigener oder technisch unterstützter Inkompetenz, nicht anmelden kann, kann keinen Umsatz generieren. Das gilt es um jeden Preis zu vermeiden.

            Dann finde heraus, ob dieses T9 tatsächlich für alle Eingabe-Elemente aktiviert wird.

            Matthias

            --
            1/z ist kein Blatt Papier.

            1. Hallo Matthias,

              Dann finde heraus, ob dieses T9 tatsächlich für alle Eingabe-Elemente aktiviert wird.

              Passwortfelder werden nicht ergänzt ... sind aber auf der anderen Seite auch sehr unpraktisch (oder zumindest unüblich) zur Eingabe eines Benutzernamens.

              Danke & Gruß
              Ole

              1. Hi!

                Passwortfelder werden nicht ergänzt ... sind aber auf der anderen Seite auch sehr unpraktisch (oder zumindest unüblich) zur Eingabe eines Benutzernamens.

                Nicht unueblicher, als casesensitive Usernamen, schaetze ich.

                --
                Signaturen sind blöd!
              2. Om nah hoo pez nyeetz, Ole.!

                Passwortfelder werden nicht ergänzt ... sind aber auf der anderen Seite auch sehr unpraktisch (oder zumindest unüblich) zur Eingabe eines Benutzernamens.

                Wenn dein Chef das von dir will, würde ich mit einigen anderen Typen probieren. url und email dürften bestimmt auch nicht T9 auslösen. (Zur Not auch <input type="myfantasyinputtype">). Aber wie gesagt, es ist nicht deine Aufgabe, die Clients deiner Kunden zu konfigurieren.

                Bleibt zu testen: Was ist mit denen, die das nicht kennen.

                Matthias

                --
                1/z ist kein Blatt Papier.

      3. Hoi!

        Du versuchst nun das Inputfeld zu zwingen alles klein aufzunhemen, damit Du wieder "arthurdent98" bekommst, aber weisst dann immer noch nichts mit "arthurdent98 " anzufangen.

        Nein, nicht ganz. Alle gelisteten Version können valide sein, da der Benutzername case sensetive ist.

        Das ist meiner Meinung nach ein Designfehler. "ArthurDent", "arthurdent" und "arthurdent " sollte die gleiche Person sein. Aber gut. Wenn Du also Benutzernamen wie Passwoerter behandelst, dann hast Du damit Deinen Usern die Pflicht aufgedrueckt, sich um die korrekte Eingabe zu kuemmern. Meinetwegen. Es ist NICHT Dein Problem die Clients deiner User zu konfigurieren.

        --
        Signaturen sind blöd!
        1. Om nah hoo pez nyeetz, Steel!

          Es ist NICHT Dein Problem die Clients deiner User zu konfigurieren.

          EinsElf

          Matthias

          --
          1/z ist kein Blatt Papier.

          1. Moin

            Es ist NICHT Dein Problem die Clients deiner User zu konfigurieren.

            EinsElf

            Damit rennt ihr bei mir offene Türen ein. :)

            Danke & Gruß
            Ole

  4. Absolut ultimative Lösung:

    Sende den Input mit einem zufälligen Name und speichere dessen Name serverseitig in der Session oder in einem weiteren Textfeld.

    Hier das Beispiel, wie es in PHP aussehen könnte:

    $fname= "f_" + mt_rand();  
    print "Benutzername: <input type='text' name='$fname' / ><input type='hidden' name='benutzerfeldname' value="$fname" />;  
    
    

    Das Auswerten geht dann etwa so:

    $username=$_POST[$_POST['benutzerfeldname']];

    1. Absolut ultimative Lösung:

      Leider nicht.

      Sende den Input mit einem zufälligen Name und speichere dessen Name serverseitig in der Session oder in einem weiteren Textfeld.

      Das ist die leider der gleich Ansatz, wie ihn Heinz schon vorschlug.

      Danke & Gruß
      Ole