Safari有一项功能可以提示您是否确定要关闭/刷新您输入的某些表单的页面。这在大多数情况下很有用,但在这种情况下它会让我烦恼。
我在某些表单上劫持“submit”事件,并通过XMLHttpRequest将它们发送到服务器。但是,Safari不知道这一点,所以当我想要关闭标签时,它会显示该表格值发生变化的该死的警告。
我知道如何在OS X中将其关闭,我不希望如此。我想在我正在构建的这个特定网页上关闭它,并为所有使用Safari的用户关闭它。当然必须有一些JavaScript方式 - 我不在乎它是否是webkit专有的。
更新:我试过这个,但没有效果。 Safari首先警告未保存的数据,然后触发“beforeunload”事件。
if (Prototype.Browser.WebKit)
window.addEventListener('beforeunload', function(e) {
forms.invoke('reset')
})
答案 0 :(得分:1)
我不深入了解Safari,但如果您只提交值并且之后不需要它们,为什么不简单地重置表单?我希望没有变化=没有警告。
如果您不想立即重置它,您甚至可以尝试将重置命令挂钩到unbeforeunload
事件,以便在关闭页面时执行此操作。这是否有效取决于Safari何时检查更改的表单 - 在调用unload
之前或之后。
答案 1 :(得分:1)
这是应用程序行为,所以一定不能有任何JavaScript方式来修改它。每个WebKit特定的功能都记录得很好,我从来没有见过任何类似的东西。如果您真的担心它,请清除您的表单字段。
答案 2 :(得分:0)
我唯一看到的方法就是只有一个隐藏输入的表单,以及一些与表单无关的输入元素。在提交时,您从元素中获取值,发出请求并重置内部表单。你甚至可以通过DOM将输入元素移出表单,这样它甚至可以优雅地降级。
很多工作和有点hacky,但据我无法改变工作流程,我可以看到唯一的选择。
答案 3 :(得分:0)
在绑定提交后,尝试使用Javascript从表单标记中删除action
和method
属性。通过这种方式,Safari不再将输入视为真实表单的一部分。