有没有人知道如何处理 Safari Web 浏览器在用户按下退格键时将当前页面设置为上一页的行为?每当我们的用户尝试使用退格键/删除键更正字段时,我目前在 Mac OSX Lion 10.7.2 和 silverlight 应用程序上遇到这个问题。
最佳答案
我以前也遇到过这个问题。我花了大约一周的时间试图提出一个解决方案,最终解决这个问题的最佳方法(我从来没有找到“修复”可以这么说)如下:
使用 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 中有效,并保留所有其他浏览器的默认功能。
祝你好运!希望这对您有所帮助!
关于c# - Safari Mac OSX 退格问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10084101/