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