一行代码实现各产品访问统计???[原创]
本文是实现了从邮箱访问产品的数据统计功能,我们都知道邮箱大部分都禁用了脚本,即使你在页面中写了,也不会执行,那怎么实现对产品的统计呢?比如你通过发邮件的方式推广产品,需要统计用户打开邮件点击链接访问自己产品的情况,怎么统计呢?
既然不能用脚本,那么只能链接到自己的服务器上去统计了,本文也是基于这个思路。如果你宣传的是多个产品,难道要在每个产品中都写一套这种统计功能吗?答案是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>这一句脚本即可实现统计。
谢谢阅读,欢迎一起交流~