Safari Mac OSX Backspace问题

时间:2012-04-10 06:28:24

标签: c# javascript html silverlight safari

有没有人知道如何处理Safari Web浏览器的行为,只要用户按下退格键,就会将当前页面设置为上一页?我目前在Mac OSX Lion 10.7.2和Silverlight应用程序上遇到此问题,只要我们的用户尝试使用退格键/删除键来纠正字段。

1 个答案:

答案 0 :(得分:1)

我过去也遇到过这个问题。我花了一周左右的时间试图找到一个解决方案,最终解决这个问题的最佳方法(我从来没有找到“修复”可以这么说)如下:

  1. 使用Javascript暂停所有退格键按下事件。不允许任何退格事件到达Silverlight容器。这意味着Silverlight不会再将您带到上一页,但您也无法删除文本字段中的任何文本!第2点解释了如何解决这个问题。

  2. KeyUp事件处理程序附加到Silverlight控件的RootVisualKeyEventArgs'原始来源是TextField,密钥本身是Key.Back,然后我们必须手动删除文本框内的一些文本。我们通过查看TextBox的SelectionStartSelectionLength属性来完成此操作。 SelectionStart为您提供了要删除的位置,SelectionLength为您提供了要删除的字符数。最后,您需要找出光标现在所在位置的正确位置。这应该等于SelectionStart属性的值。

  3. 这种方法存在缺陷。因为我们必须手动收听KeyUp事件,所以只有在释放退格键时才会触发Key.Back KeyUp事件。这意味着如果您使用Safari并按住退格键,则只会删除一个字符。您需要释放退格键并再次按下它以删除另一个角色。我认为这是一个很小的代价,考虑到替代方案是查看上一页或根本不处理退格!

    值得注意的是,所有这些都可能是Mac / Safari特有的。您可以使用HtmlPage.BrowserInformation.UserAgent查找浏览器类型,如果浏览器是Safari,则只能附加RootVisual_KeyUp处理程序。如果你只在Safari中的javascript中暂停退格事件,这只会在Mac / Safari中产生影响,并保持每个其他浏览器的默认功能。

    祝你好运!希望这有帮助!