Safari Mac OSX Backspace问题

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


我也有过这个问题。 我花了一个星期左右的时间试图想出一个解决方案,并且最终解决这个问题的最佳方法(我从来没有发现“修复”可以这么说)如下:

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

  • KeyUp事件处理程序附加到Silverlight控件的RootVisualKeyEventArgs的原始来源是一个TextField,而且键本身是Key.Back ,那么我们必须手动删除文本Key.Back一些文本。 我们通过查看TextBox的SelectionStartSelectionLength属性来做到这一点。 SelectionStart为您提供您想要删除的位置,而SelectionLength会为您提供要删除的字符数。 最后,你需要确定光标应该在哪里的正确位置。 这应该等于SelectionStart属性的值。

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

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

    祝你好运! 希望这可以帮助!

    链接地址: http://www.djcxy.com/p/63117.html

    上一篇: Safari Mac OSX Backspace Issues

    下一篇: Safari 5.1.4 showModalDialog returning undefined