2012-04-10 75 views
2

有沒有人知道如何處理Safari Web瀏覽器的行爲,當用戶按下退格鍵時,將當前頁面設置爲上一頁?我目前在Mac OSX Lion 10.7.2和Silverlight應用程序中遇到此問題,只要我們的用戶試圖使用退格/刪除鍵來更正字段。Safari Mac OSX Backspace問題

回答

1

我以前也有過這個問題。我花了好一週左右試圖拿出一個解決方案,並最終最好的辦法來解決這個問題(我從來沒有發現一個「修復」可以這麼說)是以下幾點:

  1. 暫停所有退格鍵關閉使用JavaScript的事件。不允許任何退格事件到達Silverlight容器。這將意味着Silverlight再也不會將您帶到上一頁,但您也將無法刪除文本字段中的任何文本!第2點解釋瞭如何解決這個問題。

  2. 將一個KeyUp事件處理程序附加到您的Silverlight控件的RootVisualKeyEventArgs'原始來源是一個TextField,並且該鍵本身是Key.Back,那麼我們必須手動刪除文本框內的一些文本。我們通過查看TextBox的SelectionStartSelectionLength屬性來做到這一點。 SelectionStart爲您提供了要刪除的位置,並且SelectionLength會提供您想要刪除的字符數。最後,你需要確定光標應該在哪裏的正確位置。這應該等於SelectionStart財產的價值。

這種方法存在缺陷。因爲我們必須手動收聽KeyUp事件,所以只有在退格鍵被釋放後纔會觸發事件。這意味着如果您使用Safari並按住向下空格鍵,則只會刪除一個字符。您需要釋放退格鍵並再次按下才能刪除另一個字符。在我看來,這是一個小的代價,但考慮到替代方案是查看上一頁或者根本不處理退格!

值得注意的是,所有這些都可以是Mac/Safari特定的。您可以使用HtmlPage.BrowserInformation.UserAgent來查找瀏覽器類型,如果瀏覽器是Safari,則只能附加RootVisual_KeyUp處理程序。如果您只在Safari中暫停JavaScript中的退格事件,則這隻會在Mac/Safari中發揮作用,並保留每個其他瀏覽器的默認功能。

祝你好運!希望這可以幫助!

+0

爲什麼有人投我的答案?這是一個完全可行的解決方案,我一直在使用,而現在沒有任何投訴。我概述了它爲什麼不是一個完美的解決方案,但是我非常懷疑當Safari/Silverlight存在這個bug時,你將能夠找到一個。 – 2012-04-13 07:43:52