我正在开发一个用户获取构造页面的项目。我希望用户不要单击后退或关闭选项卡或重新加载。 现在要么我需要禁用浏览器功能,要么取回按钮,选项卡关闭事件或将事件重新加载到java脚本,以便我可以采取必要的步骤来防止我的数据丢失。 我用过这个:
window.onbeforeunload = function()
{
return "Try This";
};
但即使我点击重定向页面的按钮,也会调用它。
答案 0 :(得分:1)
如果您只想获得警报,了解用户最终可以控制并可以绕过警报,那么请执行您正在执行的操作但使用标记在您导航时禁用该警报不想要提醒。 E.g:
var warnWhenLeaving = true;
window.onbeforeunload = function() {
if (warnWhenLeaving) {
return "your message here";
}
};
然后在链接/按钮上的点击处理程序/移动用户的任何内容上不要希望弹出这个:
warnWhenLeaving = false;
在评论中你问:
我可以知道使用此功能生成警报时用户点击了什么。我可以知道用户点击了什么(离开此页面/留在页面上)
答案是: 排序 ,但不是真的;你几乎肯定最好不要尝试。
但是:如果您看到onbeforeunload
功能运行,那么您就知道用户正在离开该页面,浏览器可能会向您显示您的消息。我熟悉的浏览器像alert
一样处理弹出窗口:弹出窗口时,页面上的所有JavaScript代码都被阻止。因此,如果您通过setTimeout
安排回调,那么如果他们离开,您将无法获得回电,如果他们留下您将会回复:
window.onbeforeunload = function() {
if (warnWhenLeaving) {
setTimeout(function() {
display("You stayed, yay!");
}, 0);
return "No, don't go!";
}
};
所以从理论上讲,如果你得到回调,他们就会留下来;如果你看到unload
事件,他们就离开了。 (请注意,您在unload
事件中可以执行非常的一些事情。)
我已经在当前的Chrome,当前的Firefox,IE8和IE11上尝试过这种方式:它适用于所有这些。它是否会在任何人的下一个版本中发挥作用是任何人的猜测。它是否在移动浏览器上可靠地运行是您必须测试的,并且可能再次发生变化。