有没有人知道如何处理Safari Web浏览器的行为,只要用户按下退格键,就会将当前页面设置为上一页?我目前在Mac OSX Lion 10.7.2和Silverlight应用程序上遇到此问题,只要我们的用户尝试使用退格键/删除键来纠正字段。
答案 0 :(得分:1)
我过去也遇到过这个问题。我花了一周左右的时间试图找到一个解决方案,最终解决这个问题的最佳方法(我从来没有找到“修复”可以这么说)如下:
使用Javascript暂停所有退格键按下事件。不允许任何退格事件到达Silverlight容器。这意味着Silverlight不会再将您带到上一页,但您也无法删除文本字段中的任何文本!第2点解释了如何解决这个问题。
将KeyUp
事件处理程序附加到Silverlight控件的RootVisual
。 KeyEventArgs
'原始来源是TextField,密钥本身是Key.Back
,然后我们必须手动删除文本框内的一些文本。我们通过查看TextBox的SelectionStart
和SelectionLength
属性来完成此操作。 SelectionStart
为您提供了要删除的位置,SelectionLength
为您提供了要删除的字符数。最后,您需要找出光标现在所在位置的正确位置。这应该等于SelectionStart
属性的值。
这种方法存在缺陷。因为我们必须手动收听KeyUp
事件,所以只有在释放退格键时才会触发Key.Back
KeyUp
事件。这意味着如果您使用Safari并按住退格键,则只会删除一个字符。您需要释放退格键并再次按下它以删除另一个角色。我认为这是一个很小的代价,考虑到替代方案是查看上一页或根本不处理退格!
值得注意的是,所有这些都可能是Mac / Safari特有的。您可以使用HtmlPage.BrowserInformation.UserAgent
查找浏览器类型,如果浏览器是Safari,则只能附加RootVisual_KeyUp
处理程序。如果你只在Safari中的javascript中暂停退格事件,这只会在Mac / Safari中产生影响,并保持每个其他浏览器的默认功能。