knockout.js und Firefox Passwörter beim Login speichern

8

Firefox füllt ein Formular mit meinem Benutzernamen / Passwort. Dies verwendet knockout.js, um die Eingabe zu binden, aber es aktualisiert die Werte für diese Art des Auffüllens nicht. Fehle ich etwas sagen auf einer Seitenladung? Wenn es ausgefüllt wird und der Benutzer Submits trifft, sind die Werte leer.

%Vor%     
Mike Flynn 27.10.2011, 23:34
quelle

3 Antworten

5

Wie ich in der Vergangenheit damit umgegangen bin, verwende ich einen Wrapper für die Bindung value , der den Wert aus dem aktuellen Wert des Elements initialisiert.

Es würde aussehen (dieses ist vereinfacht, nur mit Observablen zu arbeiten):

%Vor%

Also würden Sie valueWithInit anstelle von value verwenden. Sie müssen nur sicherstellen, dass ko.applyBindings nicht aufgerufen wird, bevor die automatische Vervollständigung ihre Aufgabe erfüllen konnte.

Ссылка

    
RP Niemeyer 28.10.2011, 00:52
quelle
3

Ich fand die Lösung hier nicht wirklich zufriedenstellend. Obwohl der Ansatz ziemlich interessant ist, schlägt er fehl, wenn der Benutzer das Konto später auswählt und der Browser die Verwendung der gespeicherten Anmeldeinformationen zulässt (z. B. wenn mehr als eine Anmeldeinformationen gespeichert sind). Es ist auch fehlgeschlagen, als du mit dem Eingeben des Passworts begonnen und gelöscht hast, um zum ursprünglichen Passwort zurückzukehren (zumindest in Firefox). Außerdem mochte ich die Zeitüberschreitung nicht wirklich, um dem Browser Zeit zu geben - einfach nicht so nett.

Meine Lösung: das ist nicht wirklich eins, aber ich dachte, ich teile trotzdem

Laden Sie einfach unser Modell manuell hoch, bevor Sie sich im Submit-Callback einloggen. Mit jQuery sollte etwas wie self.password($("#password").val()) es tun.

Alternativ dazu scheint die Verwendung der vorhandenen Bindungen auch das Auslösen eines Änderungsereignisses zu bewirken - z. $("#password").change() .

Die Profis:

  • ist nur für Anmeldefelder, also wahrscheinlich eine einmalige Sache für Ihre Site
  • ist einfach und sauber - ein oder zwei Zeilen am richtigen Ort
  • scheint immer zuverlässig zu funktionieren, unabhängig vom Browser, der Einrichtung der Anmeldeinformationen oder dem Nutzungsmuster

Die Nachteile:

  • bricht wieder die nette Trennung, die Knockout.js bietet
  • ist keine Lösung, sondern ein Workaround

Ich werde das jetzt beibehalten, weil ich es nur als zuverlässig empfunden habe. Es wäre schön, Knockout zu sagen, die Bindungen direkt neu zu bewerten, anstatt den Wert manuell zu speichern oder über das Änderungsereignis auszulösen. Aber ich habe noch nichts gefunden.

Ich denke nur ein bisschen voraus - das gleiche Problem sollte auftreten, wenn der Browser ein Formular automatisch ausfüllt (zB wie eine Adresse) - was bedeutet, dass irgendeine Art allgemeiner Funktion das oben genannte tun würde (wahrscheinlich den Change Trigger anrufend) jedes Eingabefeld des Formulars)

Bearbeiten: Ein schneller Code demonstriert die Idee

Das HTML:

%Vor%

Und das Javascript:

%Vor%     
Michael 12.03.2013 09:55
quelle
0

Nur für einige zusätzliche Informationen:

In der .NET MVC 5 SPA-Vorlage geschieht dasselbe.

Ich habe es behoben, indem ich die Eingabewerte den Observablen zugewiesen habe, kurz bevor die Anmeldung abgeschlossen ist:

in login.viewmodel.js

%Vor%     
Stefan 13.05.2014 11:05
quelle

Tags und Links