如何避免Safari中未保存的表单警告

时间:2009-12-24 03:12:24

标签: javascript forms safari

Safari有一项功能可以提示您是否确定要关闭/刷新您输入的某些表单的页面。这在大多数情况下很有用,但在这种情况下它会让我烦恼。

我在某些表单上劫持“submit”事件,并通过XMLHttpRequest将它们发送到服务器。但是,Safari不知道这一点,所以当我想要关闭标签时,它会显示该表格值发生变化的该死的警告。

我知道如何在OS X中将其关闭,我不希望如此。我想在我正在构建的这个特定网页上关闭它,并为所有使用Safari的用户关闭它。当然必须有一些JavaScript方式 - 我不在乎它是否是webkit专有的。

更新:我试过这个,但没有效果。 Safari首先警告未保存的数据,然后触发“beforeunload”事件。

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

4 个答案:

答案 0 :(得分:1)

我不深入了解Safari,但如果您只提交值并且之后不需要它们,为什么不简单地重置表单?我希望没有变化=没有警告。

如果您不想立即重置它,您甚至可以尝试将重置命令挂钩到unbeforeunload事件,以便在关闭页面时执行此操作。这是否有效取决于Safari何时检查更改的表单 - 在调用unload之前或之后。

答案 1 :(得分:1)

这是应用程序行为,所以一定不能有任何JavaScript方式来修改它。每个WebKit特定的功能都记录得很好,我从来没有见过任何类似的东西。如果您真的担心它,请清除您的表单字段。

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

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

答案 2 :(得分:0)

我唯一看到的方法就是只有一个隐藏输入的表单,以及一些与表单无关的输入元素。在提交时,您从元素中获取值,发出请求并重置内部表单。你甚至可以通过DOM将输入元素移出表单,这样它甚至可以优雅地降级。

很多工作和有点hacky,但据我无法改变工作流程,我可以看到唯一的选择。

答案 3 :(得分:0)

在绑定提交后,尝试使用Javascript从表单标记中删除actionmethod属性。通过这种方式,Safari不再将输入视为真实表单的一部分。