2012-04-10 3 views
2

Есть ли кто-нибудь, кто знает, как обрабатывать поведение Safari Web Browser, который устанавливает текущую страницу на предыдущую страницу всякий раз, когда пользователи нажимают клавишу возврата? В настоящее время я испытываю эту проблему на Mac OSX Lion 10.7.2 и приложении silverlight, когда наши пользователи пытаются исправить поля, используя клавишу backspace/Delete.Safari Mac OSX Backspace Issues

ответ

1

У меня была эта проблема и в прошлом. Я провел хорошую неделю или около того, пытаясь придумать решение, и в конечном счете, лучший способ обойти эту проблему (я никогда не нашел «исправить», так сказать) было следующее:

  1. Приостановить все событий в нижнем пространстве, используя Javascript. Не допускайте, чтобы какие-либо события backspace достигали контейнера Silverlight. Это означает, что Silverlight никогда не перенесет вас на предыдущую страницу, но вы также не сможете удалить текст в текстовом поле! В пункте 2 объясняется, как обойти это.

  2. Прикрепите обработчик события KeyUp к контроллеру Silverlight RootVisual. KeyEventArgs «Исходный источник - это TextField, и сам ключ был Key.Back, тогда мы должны удалить текст внутри текстового поля вручную. Мы делаем это, просматривая свойства TextBox SelectionStart и SelectionLength. SelectionStart дает вам местоположение, которое вы хотите удалить, и SelectionLength дает вам, сколько символов вы хотите удалить. Наконец, вам нужно найти правильное местоположение, где должен находиться курсор. Это должно быть просто равно значению свойства SelectionStart.

Существует недостаток с таким подходом. Поскольку мы должны вручную прослушивать события KeyUp, событие Key.BackKeyUp запускается только при отпускании клавиши backspace. Это означает, что если вы используете Safari и удерживаете резервное копирование вниз, будет удален только один символ. Вам нужно будет освободить backspace и снова нажать его, чтобы удалить другой символ. По моему мнению, это небольшая цена, учитывая, что альтернативы - это просмотр предыдущей страницы или вообще не обращение к обратному пространству!

Стоит отметить, что все это может быть специфичным для Mac/Safari. Вы можете использовать HtmlPage.BrowserInformation.UserAgent, чтобы найти тип браузера, и прикрепите приставку RootVisual_KeyUp, если браузер - Safari. Если вы только приостановите события backspace в javascript в Safari, это будет иметь эффект только в Mac/Safari и будет поддерживать функциональность по умолчанию для каждого другого браузера.

Удачи! Надеюсь это поможет!

+0

Почему кто-то проголосовал за мой ответ? Это полностью работающее решение, которое я использую сейчас, без каких-либо жалоб. Я изложил, почему это не идеальное решение, но я очень сомневаюсь, что вы сможете найти его, пока эта ошибка Safari/Silverlight существует. –