c# - Safari Mac OSX 退格问题

标签 c# javascript html silverlight safari

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

最佳答案

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

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

  2. KeyUp 事件处理程序附加到 Silverlight 控件的 RootVisualKeyEventArgs 的原始来源是一个 TextField,而键本身是 Key.Back,那么我们必须手动删除文本框内的一些文本。我们通过查看 TextBox 的 SelectionStartSelectionLength 属性来做到这一点。 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/

相关文章:

JavaScript:使用 'this.' 调用函数不引用类中的方法

javascript - 为什么其他路由上没有加载bundle.js?

javascript - 如果 Facebook 评论为 0,则 Conceal div

c# - Linq To SQL Specified cast is not valid error with Union

c# - 是否可以创建委托(delegate)而无需将其设为静态?

javascript - 为什么 `return` 和 `(` 之间的换行符会破坏代码?

javascript - 使我的网页反色

javascript - 使用 Form 元素转换/更改 Div 元素

c# - 对 C# 中的 "override"与 "new"感到困惑

c# - 将输入字符串转换为干净、可读且浏览器可接受的路由数据