无法避免 'onbeforeunload' 事件的默认警告
Unable to avoid default warning on 'onbeforeunload' event
我正在处理网页,需要在关闭 window 之前向服务器发出 disconnect
请求,因此我使用 onbeforeunload
事件来执行此操作.
但是,无论我尝试多少,我似乎都无法避免使用 onbeforeunload
.
时出现的默认 'Save changes' 对话框
我错过了什么吗?为什么对话框仍然出现?
async function close(event){
// Prevent default warning
event.preventDefault();
event.returnValue = null;
// Here goes my stuff. There's an await here.
// More preventing
return null;
}
// The event is set later
window.onbeforeunload = close;
谢谢。
我认为's not possible because it'是为了保护
我们可以让任何网站设计者让客户无法离开他的网站
onbeforeunload
事件的 return 值用作告诉浏览器显示警告消息的手段(过去,它可能是自定义消息)。
您的 async
函数 return 是一个 Promise,因此浏览器认为它应该显示此警告消息(您可能会在仍然显示的浏览器中看到消息 [object Promise]
接受自定义消息)。
async function foo() {
return "hello";
}
console.log(foo().toString()); // [object Promise]
为避免这种情况,请不要在此处使用 async
函数。当您的异步任务结束时,页面很有可能已经关闭。
另请注意,您无法阻止 onbeforeunload
事件。只有用户可以(由前述警告信息提示)。
最后,如果你想在这个事件中发送数据,那么使用navigator.sendBeacon()
方法,即使在页面关闭后也应该可以工作。
Ps:通常不要使用 async
函数作为事件回调,而且当您希望阻止它们的默认行为时。
我正在处理网页,需要在关闭 window 之前向服务器发出 disconnect
请求,因此我使用 onbeforeunload
事件来执行此操作.
但是,无论我尝试多少,我似乎都无法避免使用 onbeforeunload
.
我错过了什么吗?为什么对话框仍然出现?
async function close(event){
// Prevent default warning
event.preventDefault();
event.returnValue = null;
// Here goes my stuff. There's an await here.
// More preventing
return null;
}
// The event is set later
window.onbeforeunload = close;
谢谢。
我认为's not possible because it'是为了保护 我们可以让任何网站设计者让客户无法离开他的网站
onbeforeunload
事件的 return 值用作告诉浏览器显示警告消息的手段(过去,它可能是自定义消息)。
您的 async
函数 return 是一个 Promise,因此浏览器认为它应该显示此警告消息(您可能会在仍然显示的浏览器中看到消息 [object Promise]
接受自定义消息)。
async function foo() {
return "hello";
}
console.log(foo().toString()); // [object Promise]
为避免这种情况,请不要在此处使用 async
函数。当您的异步任务结束时,页面很有可能已经关闭。
另请注意,您无法阻止 onbeforeunload
事件。只有用户可以(由前述警告信息提示)。
最后,如果你想在这个事件中发送数据,那么使用navigator.sendBeacon()
方法,即使在页面关闭后也应该可以工作。
Ps:通常不要使用 async
函数作为事件回调,而且当您希望阻止它们的默认行为时。