最近有个需求,要求在部署过程中离开界面与用户有一个交互,询问用户是否离开页面,然后还给出了相应的样式让我实现。我寻思着关闭窗口,意味着页面销毁,执行栈都不存在了,何谈交互呢?于是我果断的拒绝了这个需求,并评论道无法实现。

后来跟同事交流了一下,同事说之前遇到过类似的需求,有相应的回调函数可以做到,去 mdn 找了下,还真有,但是很遗憾,不能自定义样式,而且在不同的浏览器可能表现不一致。跟产品沟通了下,说明了这种情况,能接受,就加上了。

实现离开页面弹窗交互利用的是 window 的一个事件 onbeforeunload,在回调里面返回值,点击窗口的关闭就会弹窗,示例如下:

window.onbeforeunload = function (e) {
const event = e || window.event;
const tips = '关闭网页';

if (event) {
event.returnValue = tips;
}
return tips;
};

参考文档:

Window: beforeunload event