React - onbeforeunload 事件从未触发

Posted

技术标签:

【中文标题】React - onbeforeunload 事件从未触发【英文标题】:React - onbeforeunload event never triggered 【发布时间】:2021-11-30 09:02:36 【问题描述】:

当我的 react 应用程序关闭时,我需要运行代码来清除本地存储中的数据。我已经尝试过我在类似问题中看到的内容,但我的 onbeforeunload 代码似乎永远不会运行(如果这很重要,我在 chrome 上)。

App.tsx 代码:

    handleWindowClose() // never gets run
    
        var value = window.localStorage.getItem('tabs')
        if (value !== null) 
            var loc = +value // convert to num
            window.localStorage.setItem('tabs', (loc - 1).toString());
        
    

componentWillMount()
   
        var handle = this.handleWindowClose
        window.addEventListener('onbeforeunload', (ev: any) => 
            // breakpoints in here do not trigger, alert does not show up
            // adding a long loop to delay does not actually delay the close operation
            ev.preventDefault();
            alert('you are closing')
            handle()
        );

有人知道为什么我的 onbeforeunload 事件永远不会触发吗?

更新 我尝试过使用 onbeforeunload、onpagehide 和 onunload 事件。它们似乎都没有在 chrome 中运行。

【问题讨论】:

【参考方案1】:

从“onbeforeunload”中删除“on”,它应该可以工作。以防万一,我创建了a quick playground to demonstrate how it should be implemented。

基本上,我设置了一个效果挂钩来每秒读取一次本地存储,另一个效果挂钩在 2.5 秒后延迟写入本地存储,另一个效果实现“前卸载”。如果您将其注释掉,您将看到该消息在未加载的情况下显示(因为它没有被删除)。

'beforeunload'的实现:

React.useEffect(() => 
  const onBeforeUnload = (ev) => 
    localStorage.removeItem("message");
  ;
  window.addEventListener("beforeunload", onBeforeUnload);
  return () => window.removeEventListener("beforeunload", onBeforeUnload);
, []);

【讨论】:

以上是关于React - onbeforeunload 事件从未触发的主要内容,如果未能解决你的问题,请参考以下文章

onbeforeunload 事件异常?

使用onbeforeunload事件检测窗口是否刷新或关闭 .

onbeforeunload 事件显示啥元素?

如何截获WebBrowser控件onbeforeunload事件

从 Selenium 测试 onbeforeunload 事件

iPad上的Onbeforeunload事件支持[重复]