2012-04-10 13 views
2

ユーザーがバックスペースキーを押すたびに現在のページを前のページに設定するSafari Webブラウザの動作を処理する方法を知っている人はいますか?バックスペース/ Deleteキーを使用してフィールドを修正しようとしているときは、Mac OSX Lion 10.7.2とSilverlightアプリケーションでこの問題が発生しています。Safari Mac OSXのバックスペースに関する問題

答えて

1

私はこれまでもこの問題を抱えていました。私は解決策を考え出すしようとして良い一週間ほど過ごし、そして最終的にこの問題を回避するための最善の方法は、(私はいわば「修正」は見つかっていない)以下の通りであった:

  1. はすべてサスペンドJavascriptを使用したバックスペースキーダウンイベントのバックスペースイベントがSilverlightコンテナに到達することを許可しないでください。これは、Silverlightがこれ以上前のページに移動しないことを意味しますが、テキストフィールド内のテキストも削除することはできません。ポイント2は、これを回避する方法を説明します。

  2. KeyUpイベントハンドラーをSilverlightコントロールのRootVisualに添付します。 KeyEventArgs '元のソースがTextFieldで、キー自体がKey.Backだった場合、テキストボックス内の一部のテキストを手動で削除する必要があります。これを行うには、TextBoxのSelectionStartSelectionLengthのプロパティを調べます。 SelectionStartには削除する場所が表示され、SelectionLengthには削除する文字の数が表示されます。最後に、カーソルがどこにあるべきかの正しい場所を調べる必要があります。これはちょうどSelectionStartプロパティの値と等しいはずです。

この方法には欠陥があります。 KeyUpイベントを手動で聞く必要があるため、Key.BackKeyUpイベントは、バックスペースキーが離されたときにのみ発生します。つまり、Safariを使用してバックスペースを押したままにすると、1文字だけが削除されます。バックスペースを解除してもう一度押すと、別の文字が削除されます。これは、私の意見では、前のページを見るか、バックスペースをまったく処理しないという選択肢があると考えています。

これはすべてMac/Safari固有のものであることに注意する価値があります。 HtmlPage.BrowserInformation.UserAgentを使用してブラウザの種類を確認し、ブラウザがSafariの場合にのみRootVisual_KeyUpハンドラを添付します。 Safariでjavascriptでバックスペースイベントを一時停止するだけであれば、これはMac/Safariで効果があり、他のすべてのブラウザのデフォルト機能を保持します。

Good Luck!お役に立てれば!

+0

なぜ誰かが私の答えに投票しましたか?それは私が苦情なく今使っている完全に実用的な解決策です。なぜ完全な解決策ではないのかを説明しましたが、このSafari/Silverlightのバグが存在する間に見つけ出すことができます。 –

関連する問題