在页面重新加载之前执行http请求

我正在使用Reaction应用程序,并且希望在用户尝试关闭该页或重新加载该页时销毁该会话。

我尝试的内容:

  • window.onbepreunload=()=>;true:这将提供一个默认提示符,其中可能包含自定义消息。
  • 提示(反应路由器):未捕获页面重新加载
  • 通过EventListener使用生效
数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
useEffect(() => {

  window.addEventListener("beforeunload", function(evt) {
    // Cancel the event (if necessary)
    evt.preventDefault();
   
    axios.get('url/destroy').then(res=>  evt.returnValue = '';)
});
  }, []);

面临的问题:请求被取消。

我尝试在响应http调用的超时时间内添加evt.returValue=‘’。但它也没有起作用。

实现相同或相同目的的任何解决方法,即在页面重新加载/关闭时进行http调用。

提前谢谢。

更新1:

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
 useEffect(() => {
    window.addEventListener("beforeunload", (e) =>
      alertUser(e, cookies.get("env"))
    );
   
  }, []);
    const alertUser = async (e, tempBool) => {
    e.preventDefault();
    if (tempBool) {
      let blob = new Blob(
        [
          JSON.stringify({
            data: "data",
          }),
        ],
        { type: "application/json" }
      );
      navigator.sendBeacon(
        "ur/destroy_session",
        blob
      );
      e.returnValue = "";
    } else {
      e.returnValue = "";
    }
  };

我想根据某个Cookie值发送请求。 在本例中,当按下重新加载和type=xhr时,使用type=ping调用该请求

如何在重新加载时仅允许http调用?


解决方案

想知道服务工作者在这里是否有用,因为他们在后台线程中运行。我还没有尝试过,但值得一试。

navigator.serviceWorker.register('serviceWorker.js');


window.onunload = function() {
  navigator.serviceWorker.controller.postMessage({
    type: 'closeWindow'
  });
};

self.onmessage = function(event) {
  if (event.data.type === 'closeWindow') {
  
  }
}

相关文章