抑制Safari的"你输入了文字......"警告?

s4y*_*s4y 12 html javascript safari

您确定要关闭此标签吗? 您已在

当文本输入到输入中时,Safari会在关闭选项卡或窗口之前提示(?)提示.

在某些情况下,作为Web开发人员,这是不可取的 - 例如,当输入是实时搜索时,用户可能已经获得了他在窗口关闭时要查找的结果,即使仍有文本在该领域.

我怎样才能让Safari知道特定输入中的文本不需要保护?

一二三*_*一二三 6

看起来您可以通过onbeforeunload启用处理程序来禁用整个页面的此警告<body>(即使是空的处理程序也可以).例如,以下内容不会产生警告:

<body onbeforeunload="">
    <form method="get"><input></form>
</body>
Run Code Online (Sandbox Code Playgroud)

我不确定这是预期的行为还是错误.


s4y*_*s4y 3

我想我已经找到了解决这个问题的方法,尽管这无疑是一个 hack(即如果 Safari 改变了这个功能的实现方式,它可能会停止工作)。这里显示了一点 jQuery:

$('.unimportant').live('blur', function(){
    var olddisplay = this.style.display;
    this.style.display = 'none';
    this.clientLeft; // layout
    this.style.display = olddisplay;
});
Run Code Online (Sandbox Code Playgroud)

演示(尝试在“不重要”字段中键入内容,单击页面上的其他位置,然后关闭窗口)。

简而言之:

  1. 隐藏输入
  2. 触发器布局
  3. 显示输入

您还可以更改输入值、触发器布局,然后将其改回来。

这里的一个限制是必须明确地清理输入。在这种情况下,它会变脏直到blur。这在我的情况下效果很好,可能在许多其他情况下,因为输入将受到保护,不会意外关闭窗口,直到操作页面上的其他内容(例如单击链接)。keyup如果您愿意忍受每次按下按键时插入点闪烁的情况,您可以选择运行此功能。

我对更清洁的解决方案持开放态度。