代码之家  ›  专栏  ›  技术社区  ›  mislav Telemachus

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

  •  1
  • mislav Telemachus  · 技术社区  · 15 年前

    Safari有一个功能,如果您确定要关闭/刷新包含您键入的某些表单的页面,则会提示您。这在大多数情况下都很有用,但在这种情况下,它让我感到困扰。

    我正在劫持某些表单上的“提交”事件,并通过XMLHttpRequest将它们发送到服务器。但是,Safari不知道这一点,所以当我想关闭选项卡时,它会显示一条该死的警告,表示表单值已更改。

    我知道如何在OSX中关闭它,我不想这样。我想在我正在构建的这个特定网页上以及所有使用Safari的用户上关闭它。当然肯定有一些JavaScript方式,我不在乎它是否是webkit的专有。

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

    if (Prototype.Browser.WebKit)
      window.addEventListener('beforeunload', function(e) {
        forms.invoke('reset')
      })
    
    4 回复  |  直到 10 年前
        1
  •  0
  •   Pekka    15 年前

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

    大量的工作和一点黑客,但就我所知,唯一的选择,如果你不能改变工作流程。

        2
  •  1
  •   Pekka    15 年前

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

        3
  •  1
  •   Cœur Gustavo Armenta    6 年前

    这是应用程序的行为,所以不能有任何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

        4
  •  0
  •   Tobias Cohen    15 年前

    请尝试删除 action method