保证在任何 document.location 更改之前执行 Javascript AJAX

Guarantee execution of Javascript AJAX before any document.location change

本文关键字:执行 Javascript AJAX 任何 document location      更新时间:2023-09-26

我想在我的网站上跟踪访问者,考虑许多因素。我通过持续的 Javascript 监控和通过 AJAX 调用将收集的数据实时发送到服务器来进行此跟踪。

我的

问题是,在用户单击普通链接或由JS处理的更改document.location的DOM元素后,我的脚本不会记录最后一次单击并发送到我的服务器。

我认为我应该更改每个 DOM 的元素 onClick 事件,首先让我的脚本做他的事情(preventingDefault),然后继续执行原始的 onClick 事件,但这个解决方案似乎不合适并且有点风险(如果在我第一次更改所有事件后创建任何 onClick 事件怎么办,由于显而易见的原因,我无法连续进行扫描和修改)。

最好的方法是什么?

您可以使用

window.onbeforeunload

function getTrack(e){
    //do your stuff
}
window.onbeforeunload=getTrack;
我认为

根据您尝试跟踪的数据,您应该尝试查看Google Analytics,它会自动跟踪它。

无法确保来自 onbeforeunload 或 onunload 的请求会到达服务器。现代浏览器取消请求。

如果您想确保任何传出域调用都进入您的日志,您基本上需要劫持所有点击并取消操作。您将发送 Ajax 调用,完成后,您将执行页面导航。

可能是

使用jquery的一种方式。

<a class=' location'  href=' page.php'> click </a>
<script>
$(document).ready (function (e){
      $(".location").click (function(){
      e.preventDefaults();
     var link = $(this).attr("href");
      $.ajax({
            type:"GET",
            url:"update_visitoi_infoo.php",
            data:{v_info:"value"},
            success:function(resp) {
                   document.location.href=link;
            }
     });
   });
});