在用户即将离开导航页面时拦截

Intercept when a user is about to leave a navigation page

提问人:EnricaS 提问时间:10/19/2023 更新时间:10/19/2023 访问量:46

问:

我想在用户即将离开我网站的产品页面时进行拦截,以使个性化消息出现在模态中。

我尝试了“beforeunload”事件处理程序,但在 FireFox 中,它出现了一条关于希望离开页面的确认消息,这是浏览器默认的,并且只能自定义文本; 在 Edge 中,不显示离开页面的确认消息,但允许用户继续在其他地方浏览,而不考虑 preventDefault()。

是否有其他事件处理程序或方法可以使此模式显示而不从浏览器获得警告?

谢谢!

   window.addEventListener('beforeunload', (e) => {
      e.preventDefault();
      let page_name = prestashop.page.page_name;

      if (page_name == 'index') {
        const modalProductPage = `
  <div class="jumbotron">
  <h1 class="display-4">Hello, world!</h1>
  <p class="lead">This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.</p>
  <hr class="my-4">
  <p>It uses utility classes for typography and spacing to space content out within the larger container.</p>
  <p class="lead">
  <a class="btn btn-primary btn-lg" href="#" role="button">Buy</a>
  </p>
  </div>
  `
        setTimeout(() => {
          console.log('event attived!')
          $('.modal-body').html(modalProductPage)
          $('#exampleModalCenter').modal('show')
        }, 500);

      }
    })
JavaScript 事件 模态对话框 onbeforeunload

评论

0赞 Jack Hickey 10/19/2023
onbeforeunload 确实是执行此操作的唯一方法,而且是设计使然。如果您可以完全控制这样的用户导航,那将非常烦人。
0赞 EnricaS 10/19/2023
我同意你的看法,我认为这是侵入性的,但这是我收到的请求;我还尝试使用事件处理程序来跟踪 URL 及其更改,但仅当用户尝试手动浏览 URL 时,它才有效。在提出(在我看来是最好的解决方案)使用 setTimeOut() 处理模态之前,我想确保没有办法绕过它。感谢您的反馈!

答: 暂无答案