【问题标题】:Tracking back button clicks跟踪返回按钮点击
【发布时间】:2014-10-05 17:03:12
【问题描述】:

作为我们新产品指标的一部分,我们需要衡量页面上后退按钮的点击次数。

由于该站点不是 AJAX 并且我们在“pushState”中没有使用,因此在浏览器中单击返回时不会触发“popState”。

捕获后退按钮事件的唯一目的是注册分析事件。

在谷歌上搜索了几个小时并尝试了几种不同的解决方案后,我还是一无所获 - 奇怪的是,javascript 似乎并不适合这样的任务。

话虽如此,这不是一个有效的回应:) 你将如何处理这样的要求?

请注意 - 获得赏金的答案并没有解决我的问题,但由于努力,我已授予赏金。这是最好的答案

【问题讨论】:

  • 我认为你将不得不实现 History API 并使用谷歌分析 track 函数作为回调
  • 如何在localStorage 中保留一堆url,然后比较locationreferrer 和堆栈中最后访问的url 以推断用户从网站内的另一个页面返回?
  • 我认为使用history api要简单得多,就像你说的那样;您可能会将后退按钮与自愿单击链接(再次)混淆
  • @ToniMichelCaubet 是的,这取决于目标是衡量用户从页面返回(无论如何)还是比较后退按钮与其他导航方式的使用情况。 (即导航模式与 UI 交互)。
  • 感谢您的回复!所以,这就是交易 - 我们正在尝试衡量导航“不友好”,这意味着几个指标,返回按钮(不是返回,而是实际的浏览器返回)就是其中之一。就 History API 而言,我一直在尝试实现它(使用 Modernizer、history.js 甚至纯 HTML5)——但除非我使用“pushstate”,否则“popstate”和“statechange”不会触发——这意味着我需要将整个网站导航转换为 AJAX...我错过了什么吗?

标签: javascript jquery google-analytics back html5-history


【解决方案1】:

我不确定是否有任何快捷过程,但如果没有其他方法,您可以尝试以下逻辑。

如果您无法直接测量浏览器后退按钮的点击次数,您可以测量您网站中的总后退和后退点击次数。你可以减去它并得到你的价值。

使用此代码。

$('a').on('click', function(e) {
        if ($(this).attr('href') != 'javascript:void(0)') { // condition to check if its redirect href 
            e.preventDefault();
            localStorage.setItem('website_called', true);
            location.href = $(this).attr('href');
        }
    });

    window.onload(function() {
        if ((document.referrer).indexOf('yoursite.com') != -1 && localStorage.setItem('website_called') == false) {
            var backButtonUsed = localStorage.setItem('backButtonUsed');
            backButtonUsed = backButtonUsed + 1;
            localStorage.setItem('backButtonUsed', backButtonUsed);
        }
        localStorage.setItem('website_called', false);
    });

【讨论】:

  • 我已经在我的答案中添加了代码,它可能会有所帮助。检查语法并根据您的要求进行修改
  • 我也可以从服务器访问日志中推断出——组装一个流程并确定用户是否向后退——但这不是我想要的。我想知道用户何时点击后退按钮而不是使用网站的内置导航。
  • 我不确定你想要什么,但如果你想要点击浏览器的后退按钮的次数,你可以在 localStorage->backButtonUsed 中检查它,因为它仅在浏览器的后退按钮将被增加时才会增加点击时 website_call 标志为假。
  • 或者,如果您想在页面上跟踪单击后退按钮的位置,您可以在 window.unload 事件中编写 window.load 代码,并在 localstorage 值增加的地方编写代码
【解决方案2】:

您可以捕获window.onbeforeunload() 并使用 cookie 来存储每次后退按钮触发时的后退按钮点击次数,您可以更新 cookie。试试看。


使用你可以实现的popstate和cookies 我使用了一个名为cookie的插件

并将它们导入您的页面。

这是导入。

<script src="/jqueries/jquery.cookie.js"></script>

这是我使用的代码。

$(window).on('popstate', function () {
    var val = 1;
    if (typeof $.cookie('example') === 'undefined') {
        //no cookie
    } else {
        //have cookie
        val = parseInt($.cookie("example")) + 1;
        $.removeCookie("example");
    }
    $.cookie("example", val, { expires: 7 });
    //alert($.cookie("example"));
});

它是一个粗略的代码你可以让它成为你想要的它会创建pushstate

将此添加到脚本中..

HTML 中只有 DEMO 内容

<input type="text" id="t1" />
<input type="text" id="t2" />
<input type="text" id="t3" />
<input type="text" id="t4" />
<input type="text" id="t5" />

这些是没有 AJAXify 的 HTML5 pushstate 脚本。试试这些...

    $('#t1').click(function () {
        if (window.history.replaceState) {
            window.history.pushState('', 'Title', '/YourPagename/123/1234');
        }
    });
    $('#t2').click(function () {
        if (window.history.replaceState) {
            window.history.pushState('', 'Title', '/YourPagename/123/12345');
        }
    });
    $('#t3').click(function () {
        if (window.history.replaceState) {
            window.history.pushState('', 'Title', '/YourPagename/123/123456');
        }
    });

很快。为其他人这样声明

这样才有可能。

这部分是获取传递的url值,这里t1、t2会获取url关联的值

var ourl = "", t1 = "", t2 = "";
if (window.history.replaceState) {
    ourl = document.URL.toString();
    var url = document.URL.toString().replace('http://', '');
    var cnt = 0;
    for (i = 0; i < url.length; i++) {
        if (url[i] == '/') {
            cnt++;
        }
        else if (cnt == 2) {
            t1 += url[i];
        }
        else if (cnt == 3) {
            t2 += url[i];
        }
    }
}

【讨论】:

  • 据我所知,window.onbeforeunload() 会在我离开页面时触发,而不仅仅是点击后退按钮。
  • 那么请使用popstatecookies 这将对您有所帮助。 HTML% 具有该功能,请尝试一下。它一定会对你有所帮助。
  • 好的,据我所知并进行过实验,'popstate' 只会在 pushstate 之前触发 - 你的处理程序永远不会触发..
  • 拥有pushstate 并触发,没有pushstate 则不会启用后退按钮。你的观点是什么?
  • 好吧,要拥有一个 pushstate,我需要对我的导航进行 AJAXify,我特别指出这对于分析事件来说是一种过度杀伤力。我们又回到了第一方。
猜你喜欢
  • 1970-01-01
  • 2013-06-29
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
  • 2011-05-04
  • 1970-01-01
相关资源
最近更新 更多