javascript - 单击使用 JavaScript 记录

标签 javascript jquery firefox logging onclick

我想记录对一个链接的所有点击。

我写了一个小记录器,可以通过 url 调用(返回一个空页面)。这个 url 是用 jquery-ajax-method 调用的。但不幸的是,如果用户使用 firefox(在 IE 中一切正常),并不是每次点击都会被记录下来。

我已经尝试了很多方法,但都没有解决这个问题,有人有胶水吗?

HTML 代码:

<a href="http://google.com" onclick="return loggClick();">Click</a>

JS-jQuery-Skript:

function loggClick(){
   $.ajax({
        type: "POST",
        url: "Logger.ff", //dynamic url to logging action
        data: {
            sid: 'abc123' //random data
        },
        contentType: "application/x-www-form-urlencoded; charset=UTF-8",
        cache: false
    });
    return true;
}

编辑:我在示例中错过了我必须在 js 调用中传递动态参数,因此“不可能”删除 onclick 事件 :(

最佳答案

我会开始摆脱内联“onclick”代码并稍后绑定(bind)事件:

  <a href="http://google.com" rel="outbound" >Click</a>


   $("a[rel=outbound]").click(function(){ 
        var url = this.href; 
        $.ajax({
        async: false,
        type: "POST",
        url: "Logger.ff", //dynamic url to logging action
        data: {
                sid: 'abc123' //random data
                clicked: url
        },
        contentType: "application/x-www-form-urlencoded; charset=UTF-8",
        cache: false
     });
     return true; 
  }); 

此外,您可能会发生“竞争条件”。在我的示例中,我已将 async 设置为 false

这将停止函数在执行请求之前返回并跟踪链接。

关于异步

我在这里使用 async: false 的原因是因为默认情况下,aync 为 true,这意味着 AJAX 请求可能仅在浏览器看到 return: true 时部分传输,然后离开页面。

这就是我提到的“竞争条件”。在这里,这是一个通过使浏览器停止直到请求完成,然后允许浏览器单击链接来避免它的廉价技巧。

一个更复杂的答案是让它返回“false”(这将终止浏览器 native 的“follow link”行为),然后在 complete 中执行真实重定向 函数。

这并非没有问题,可能会导致请求完成时浏览速度变慢,让用户有时间点击其他链接,但这些链接似乎什么都不做,最终一个请求在随机时间通过,并且发生看似随机的重定向。

因此,高级解决方案包括阻止页面的其余部分并在请求完成时提供某种进度指示。

(因此,这个解决方案的复杂性比 async: false 更难在一个简单的示例中实现)

关于javascript - 单击使用 JavaScript 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/662434/

相关文章:

javascript - 如何在 npm 版本期间运行脚本

java - 如何在 spring MVC 的 Controller 中操作 jQuery AJAX JSON 数据

internet-explorer - Firefox 和 IE 对同一图像的渲染方式不同!

javascript - 使 firefox 刷新图像更快

javascript - Bootstrap 输入组在 jQuery UI 对话框中无法正确呈现

javascript - 在 Gmail 上设置办公时间外的自动回复

javascript - 有没有办法保存 JavaScript DOM 操作?

javascript - 如何使用jquery Ajax调用来调用类的方法

javascript - 将 List<string> 插入 javascript 中的字典值

css - 当父项可拖动时,无法在 &lt;input&gt; 中选择文本