Javascript 禁止狩猎活动’;s&x201C;您已输入文本…”;警告
在输入文本后,Safari会在关闭选项卡或窗口之前提示(?) 在某些情况下,作为一名web开发人员,这是不可取的——例如,当输入是一个实时搜索时,用户可能已经在窗口关闭时获得了他正在查找的结果,即使字段中仍然有文本Javascript 禁止狩猎活动’;s&x201C;您已输入文本…”;警告,javascript,html,safari,Javascript,Html,Safari,在输入文本后,Safari会在关闭选项卡或窗口之前提示(?) 在某些情况下,作为一名web开发人员,这是不可取的——例如,当输入是一个实时搜索时,用户可能已经在窗口关闭时获得了他正在查找的结果,即使字段中仍然有文本 我如何才能让Safari知道特定输入中的文本不需要保护?似乎您可以通过在上启用之前卸载处理程序(即使是空的处理程序也可以)来禁用整个页面的此警告。例如,以下情况不会产生警告: <body onbeforeunload=""> <form method="ge
我如何才能让Safari知道特定输入中的文本不需要保护?似乎您可以通过在
上启用之前卸载处理程序(即使是空的处理程序也可以)来禁用整个页面的此警告。例如,以下情况不会产生警告:
<body onbeforeunload="">
<form method="get"><input></form>
</body>
我不确定这是故意的行为,还是一个bug。我想我已经找到了解决这个问题的方法,尽管毫无疑问这是一个黑客行为(即,如果Safari改变这个功能的实现方式,它可能会停止工作)。这里显示的是jQuery:
$('.unimportant').live('blur', function(){
var olddisplay = this.style.display;
this.style.display = 'none';
this.clientLeft; // layout
this.style.display = olddisplay;
});
(尝试键入“不重要”字段,单击页面上的其他位置,然后关闭窗口)。
简言之:
隐藏输入
触发器布局
显示输入
您还可以更改输入的值、触发布局并将其更改回
这里的一个限制是必须显式地清除输入。在这种情况下,它将变脏,直到模糊
。这在我的情况下很有效,可能在许多其他情况下也很有效,因为在页面上的其他内容被操作(例如,点击链接)之前,输入将受到保护,不会意外关闭窗口。您可以选择在keyup
上运行此功能,前提是您愿意在每次按下键时插入点闪烁的情况下生活
我对更清洁的解决方案持开放态度。我发现我认为是解决这个问题的一个非常好的方法。当我使用AJAX提交表单时,我希望不显示警告。这是通过onbeforeunload完成的
window.onbeforeunload=function(e){}
但是在我提交之后,我可能会做额外的更改,所以我希望警告再次显示出来。为此,我向表单元素添加了一个keyup处理程序
$('txtarea').onkeyup=dirty;
dirty所做的是检查输入字段是否已更改,然后我将onbeforeunload设置为null
function dirty(e){
if (e.srcElement.value != e.srcElement.defaultValue){
window.onbeforeunload=null;
}
}
我刚刚找到另一个解决方案,防止Safari在文本区域更改内容时显示“是否确实要重新加载此页面?”对话框
事实证明,通过Javascript设置该值可以清除Safari的changed
状态:
$(document).on('blur', 'textarea', function() {
var value = $(this).val();
$(this).val('').val(value);
});
首先清除该值很重要,直接将其设置为已存在的内容是行不通的
EDIT显然设置window.onbeforeunload
为空函数仍然有效,但是$(window)。on('beforeunload',function(){})
不起作用。如何让safari这样做?我想那是JSsonbeforeunload
。我刚刚创建了一个文本区域,并在没有任何警告的情况下关闭了选项卡。如何重新创建?可以清除onbeforeunload事件中的文本字段。我不知道这是否有效,但听起来可能:)用谷歌试过,并尝试了我创建的其他输入。。。不行。你能发布你的HTML和JS吗?奥斯卡:看起来输入必须在一个有方法的表单中。因此,一个最小的测试用例看起来像
。但是,我在Google和Stack Overflow上复制它并没有问题(我只是键入一些字母并尝试关闭窗口)。您是否已在Safari副本中禁用此警告?首选项没有GUI,但有一些实用程序和命令行示例说明如何禁用它。您使用的是哪个版本的Safari?赢还是麦克?不,我没有通过命令行禁用任何东西:\n让我知道@p--的建议是否有效,我会看看我是否能在我的机器上复制它,并提出解决方案这很好,+1。但是,我不想取消整个页面的警报,只是不重要的搜索类型输入。这可能会使Safari用户(可能已经习惯了此警报)更容易丢失数据。谢谢,Terry!这个解决方案唯一的问题是它只支持一个文本输入。通常,如果有多个输入,如果其中任何一个是脏的,则会显示警告-但在这种情况下,如果其中任何一个是干净的,则不会显示警告。