2009-12-24 53 views
1

如果您確定要關閉/刷新您輸入的某些表單的頁面,Safari有一項功能可提示您。這在大多數情況下都很有用,但在這種情況下,它正在擾亂我。如何避免Safari中的未保存表單警告

我劫持了某些表單上的「submit」事件並通過XMLHttpRequest發送給服務器。然而,Safari並不知道,所以當我想關閉這個標籤時,它會顯示那個表單值已經改變的該死的警告。

我知道如何在OS X中關閉它,但我不想那樣做。我想在我正在構建的特定網頁上關閉它,併爲所有使用Safari的用戶關閉它。當然,必須有一些JavaScript方式 - 我不在乎它是否專有於webkit。

更新:我試過了,但沒有效果。 Safari首先警告未保存的數據,然後觸發「beforeunload」事件。

if (Prototype.Browser.WebKit) 
    window.addEventListener('beforeunload', function(e) { 
    forms.invoke('reset') 
    }) 
+0

這些字段中的數據已準確提交後有什麼好處? – 2009-12-24 15:40:41

+0

表單字段是UI的一部分。用戶可以編輯一些字段,提交更改,然後再次編輯,提交併重複。但是,如果他關閉標籤頁,Safari會警告他們他們會丟失未保存的數據,這可能不是真的。 – mislav 2009-12-26 15:44:09

回答

0

我看到周圍,這是具有僅隱藏的輸入形式consisiting,和一羣不與表格相關聯的輸入元件的剩下的唯一方式。提交時,您從元素中獲取值,發出請求並重置內部表單。您甚至可以通過DOM將輸入元素移出表單,以便它甚至可以優雅地降級。

大量的工作和有點hacky,但只要我能看到唯一的選擇,如果你不能改變工作流程。

1

我不知道Safari那麼深,但如果你只是提交值而不需要它們,爲什麼不簡單地重置窗體呢?我希望沒有改變=沒有警告。

如果您不想馬上重設,您甚至可以嘗試將重置命令掛鉤到unbeforeunload事件以在關閉頁面時執行此操作。不管這種方式是否有效,取決於Safari何時檢查更改後的表格 - 在調用unload之前或之後。

+0

這是一個好主意 - 我只是嘗試過,但它不起作用:(更新後的解釋 – mislav 2009-12-24 04:26:16

+0

提交後直接重置表單不是一個選項嗎? – 2009-12-24 15:47:48

+0

這將是糟糕的用戶體驗 - 用戶可以通過編輯記錄幾個表單域並僅提交更改以查看那些相同的域被重置爲其初始值。 – mislav 2009-12-26 15:42:17

1

這就是應用程序行爲,所以一定不能有任何修改它的JavaScript方法。每個WebKit特定功能都記錄得非常好,而且我從來沒有見過類似的東西。如果你真的擔心這個問題,請清理你的表單欄。

http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariWebContent/Introduction/Introduction.html#//apple_ref/doc/uid/TP40002079-SW1

http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariHTMLRef/Introduction.html#//apple_ref/doc/uid/30001261

0

在綁定提交後,嘗試從Javascript窗體標記中刪除actionmethod屬性。通過這種方式,Safari不應再將輸入視爲真實表單的一部分。