2012-04-10 12 views
2

Gibt es jemanden da draußen, der weiß, wie das Verhalten des Safari Web Browsers zu handhaben ist, der die aktuelle Seite auf die vorherige Seite setzt, wenn Benutzer die Rücktaste gedrückt haben? Dieses Problem tritt derzeit bei Mac OSX Lion 10.7.2 und einer Silverlight-Anwendung auf, wenn unsere Benutzer Felder mithilfe der Rücktaste/Entf-Taste korrigieren wollten.Safari Mac OSX Backspace-Probleme

Antwort

1

Ich hatte dieses Problem in der Vergangenheit auch. Ich verbrachte eine gute Woche oder so versuchen, mit einer Lösung zu kommen, und schließlich den besten Weg, um dieses Problem zu arbeiten (ich fand nie eine „reparieren“ sozusagen) war die folgende:

  1. Suspend all der Rücktaste Schlüssel Ereignisse mit Javascript. Lassen Sie keine Backspace-Ereignisse den Silverlight-Container erreichen. Dies bedeutet, dass Silverlight Sie nie mehr zur vorherigen Seite bringt, aber Sie können auch keinen Text in einem Textfeld löschen! In Punkt 2 wird erläutert, wie dies zu umgehen ist.

  2. Verbinden Sie einen KeyUp Event-Handler mit dem RootVisual Ihres Silverlight-Steuerelements. KeyEventArgs 'Originalquelle ist ein TextField und der Schlüssel selbst war Key.Back, dann müssen wir manuell Text innerhalb des Textfelds löschen. Wir tun dies, indem wir die Eigenschaften der TextBox SelectionStart und SelectionLength betrachten. SelectionStart gibt Ihnen den Speicherort, von dem Sie löschen möchten, und gibt Ihnen an, wie viele Zeichen Sie löschen möchten. Schließlich müssen Sie herausfinden, wo sich der Cursor jetzt befinden soll. Dies sollte nur dem Wert der Eigenschaft SelectionStart entsprechen.

Es gibt einen Fehler bei diesem Ansatz. Da wir die Ereignisse KeyUp manuell abhören müssen, wird das Ereignis Key.BackKeyUp nur ausgelöst, wenn die Rücktaste losgelassen wird. Dies bedeutet, dass wenn Sie Safari verwenden und die Rücktaste gedrückt halten, nur ein Zeichen gelöscht wird. Sie müssen die Rücktaste loslassen und erneut drücken, um ein anderes Zeichen zu löschen. Dies ist ein kleiner Preis, der meiner Meinung nach jedoch zu zahlen ist, wenn man bedenkt, dass die Alternativen die vorherige Seite anzeigen oder Backspace überhaupt nicht behandeln!

Es ist erwähnenswert, dass all dies Mac/Safari-spezifisch sein kann. Sie können den Browsertyp HtmlPage.BrowserInformation.UserAgent verwenden und nur den Handler RootVisual_KeyUp anhängen, wenn der Browser Safari ist. Wenn Sie in Safari auch nur Rückschritt-Ereignisse in Javascript aussetzen, wirkt sich dies nur auf Mac/Safari aus und behält die Standardfunktionalität für jeden anderen Browser bei.

Viel Glück! Hoffe das hilft!

+0

Warum hat jemand meine Antwort abgelehnt? Es ist eine voll funktionsfähige Lösung, für die ich jetzt ohne Beanstandungen eingesetzt habe. Ich habe erklärt, warum es keine perfekte Lösung ist, aber ich bezweifle sehr, dass Sie eine finden werden, während dieser Safari/Silverlight-Fehler existiert. –