【发布时间】:2021-08-20 02:55:50
【问题描述】:
有什么办法可以阻止这种弹出模式的发生(在这种情况下是在 Firefox 中,但我想为所有浏览器适应这种变化)?
我专门在 React 中工作,但 vanillaJS 实现也可以!
我已经尝试删除该事件的 returnValue 属性,如下所述:https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload
在我的一个组件中,如下所示:
useEffect(() => {
window.addEventListener('beforeunload', (ev) => {
delete e['returnValue'];
});
}, []);
但我仍然看到弹出窗口。事实上,当我console.logev 对象时,returnValue 属性仍然存在,但只是一个空字符串。当我尝试将returnValue 属性设置为null/false 时,它只是将returnValue 设置为这些值的字符串版本("null"/"false")。
任何关于我下一步应该采取什么步骤或方向的帮助或见解将不胜感激,谢谢!
【问题讨论】:
-
默认情况下应该显示此消息,如果显示,那肯定是因为在您的代码中的某个地方告诉了它。所以最好的办法是在某个地方找到它并更改它,使其不再存在。如果您不能这样做,另一种解决方案是在附加事件处理程序之前附加另一个事件处理程序,并从那里调用
event.stopImmediatePropagation()。但是,您必须在另一个事件之前附加此事件。 -
我不小心在我的客户端 websocket 中调用了
ev.preventDefault(),默认情况下会在 Firefox 中显示弹出模式。 -
你找到了太好了。 (要清楚我之前的评论应该是“默认情况下,此消息应该不显示”)。
标签: javascript reactjs dom-events