zoukankan      html  css  js  c++  java
  • 一行代码实现各产品访问统计???[原创]

      本文是实现了从邮箱访问产品的数据统计功能,我们都知道邮箱大部分都禁用了脚本,即使你在页面中写了,也不会执行,那怎么实现对产品的统计呢?比如你通过发邮件的方式推广产品,需要统计用户打开邮件点击链接访问自己产品的情况,怎么统计呢?

      既然不能用脚本,那么只能链接到自己的服务器上去统计了,本文也是基于这个思路。如果你宣传的是多个产品,难道要在每个产品中都写一套这种统计功能吗?答案是no,还有更好的方法。本文就是统一写了一套脚本和处理程序,其他产品只需要在要统计的页面底部加上这行脚本即可实现统计。

      废话不多说了,直接上代码。

      这是测试页面的代码,蓝色为引用的脚本,(其他需要统计的产品只需要引用这一句脚本)。

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="WebTest.HandleUrlStat.Test" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title></title>
    </head> <body> <form id="form1" runat="server"> <div> </div> </form> <script type="text/javascript" src="MailStat.ashx?app=aaa"></script> </body> </html>

       提交到MailStat.ashx,自动下载脚本,拼上参数,MailStat.ashx的代码如下:

    string js = @"(function() {
    var AccessLog = {
        request: function(applicationName,ajaxUrl) {
    
            var url = document.location.href;
            var arr = this.GetAllParam(url);
            var pname = arr['pname'];
            if (url.indexOf('from=sendermail') && pname != undefined) {
                var urlParam = 'app=' + applicationName +'&pname=' + pname;
                var url2 = ajaxUrl + '?' + urlParam;
                this._sendRequest(url2);
            }
        },
        _sendRequest: function(url) {
            var script = document.createElement('script');
            script.type = 'text/javascript';
            script.src = url;
            document.body.appendChild(script);
        },
        GetAllParam: function(url) {
            var rtn = new Object();
            if (url.indexOf('?') != -1) {
                var str = url.substring(url.indexOf('?') + 1, url.length);
                if (url.indexOf('&') != -1) {
                    var params = str.split('&');
                    for (i = 0; i < params.length; i++) {
                        rtn[params[i].split('=')[0]] = params[i].split('=')[1];
                    }
                }
                else {
                    rtn[str.split('=')[0]] = str.split('=')[1];
                }
            }
            return rtn;
        }
    }
    //记录日志
    AccessLog.request('{applicationName}','{ajaxUrl}');
    })();";
            string ajaxUrl = "StatHandler.ashx";
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "application/x-javascript";
    
                string app = context.Request["app"];
    
                js = js.Replace("{applicationName}", app ?? string.Empty).Replace("{ajaxUrl}", ajaxUrl ?? string.Empty); 
                context.Response.Write(js);
            }

      然后提交到StatHandler.ashx处理程序,根据参数回写到数据库,保存统计信息,StatHandler.ashx的代码如下:

    public void ProcessRequest(HttpContext context)
            {
    
                context.Response.ContentType = "application/x-javascript";
                var source = context.Request["app"];
                var userName = context.Request["pname"];

    //这里写回写到数据库的代码
    //...
      
      
      
    context.Response.Write("Update Success."); context.Response.End(); }

      

       后面的两个处理程序部署到一台公用的服务器上,其他需要统计的产品只需要引用<script type="text/javascript" src="MailStat.ashx?app=aaa"></script>这一句脚本即可实现统计。
      

      

           谢谢阅读,欢迎一起交流~

      

  • 相关阅读:
    wqy的ACM赛G朱柏庐
    可持久化数据结构
    LibreOJ#2362蚯蚓
    LibreOJ#2359天天爱跑步
    「Luogu2221」[HAOI2012]高速公路
    「Luogu4158」[SCOI2009]粉刷匠
    「Luogu4317」花神的数论题
    WC2019 游记
    最大权闭合子图模型
    「Luogu2762」太空飞行计划问题
  • 原文地址:https://www.cnblogs.com/suixinpeng/p/javascript_stat.html
Copyright © 2011-2022 走看看