如何避免Safari中的未保存表单警告
如果您确定要关闭/刷新您输入的某些表单的页面,Safari有一项功能可提示您。这在大多数情况下都很有用,但在这种情况下,它正在扰乱我。如何避免Safari中的未保存表单警告
我劫持了某些表单上的“submit”事件并通过XMLHttpRequest发送给服务器。然而,Safari并不知道,所以当我想关闭这个标签时,它会显示那个表单值已经改变的该死的警告。
我知道如何在OS X中关闭它,但我不想那样做。我想在我正在构建的特定网页上关闭它,并为所有使用Safari的用户关闭它。当然,必须有一些JavaScript方式 - 我不在乎它是否专有于webkit。
更新:我试过了,但没有效果。 Safari首先警告未保存的数据,然后触发“beforeunload”事件。
if (Prototype.Browser.WebKit)
window.addEventListener('beforeunload', function(e) {
forms.invoke('reset')
})
我看到周围,这是具有仅隐藏的输入形式consisiting,和一群不与表格相关联的输入元件的剩下的唯一方式。提交时,您从元素中获取值,发出请求并重置内部表单。您甚至可以通过DOM将输入元素移出表单,以便它甚至可以优雅地降级。
大量的工作和有点hacky,但只要我能看到唯一的选择,如果你不能改变工作流程。
我不知道Safari那么深,但如果你只是提交值而不需要它们,为什么不简单地重置窗体呢?我希望没有改变=没有警告。
如果您不想马上重设,您甚至可以尝试将重置命令挂钩到unbeforeunload
事件以在关闭页面时执行此操作。不管这种方式是否有效,取决于Safari何时检查更改后的表格 - 在调用unload
之前或之后。
这就是应用程序行为,所以一定不能有任何修改它的JavaScript方法。每个WebKit特定功能都记录得非常好,而且我从来没有见过类似的东西。如果你真的担心这个问题,请清理你的表单栏。
在绑定提交后,尝试从Javascript窗体标记中删除action
和method
属性。通过这种方式,Safari不应再将输入视为真实表单的一部分。
这些字段中的数据已准确提交后有什么好处? – 2009-12-24 15:40:41
表单字段是UI的一部分。用户可以编辑一些字段,提交更改,然后再次编辑,提交并重复。但是,如果他关闭标签页,Safari会警告他们他们会丢失未保存的数据,这可能不是真的。 – mislav 2009-12-26 15:44:09