JS点出统计器


ff   默认不让改 status
opera9   测试通过
ie6   测试通过

这东西是给统计部门用的,分析用户习惯以改良网站布局。
只是写着玩的小东西,所以很多地方不太理想。

save() 方法是保存记录的,没仔细做,应该再加个判断浏览器,然后决定用 img 还是 iframe,以保证 request 一定能发出去.
onclick() 方法是触发事件时执行的

使用方法:

在任意页面中加入

CODE:
script src="clickout.js"></script>

最好是放在 </body> 前面,目的是防止 onclick 事件覆盖。

clickout.js


CODE:


/*
* 说明:点出统计器
* 作者:邓威
* 日期:2006-07-25
* 版本:v1.0
*/

function ClickOut()
{
    this.oCO        = null;
    this.src_onclick    = null;
    this.isDEBUG        = true || "status"; // 改成 this.isDEBUG = "status"; 就可以在 window.status 里显示了

    this.debug        = function(arg) {
        if( this.isDEBUG == "status" ) window.status = arg.toString();
        else if ( this.isDEBUG ) alert(arg.toString());
    }

    this.save        = function() {       
        var sUrl = "clickout.php?";
        sUrl += "tag=" + encodeURIComponent(this.click_tag);
        sUrl += "&type=" + encodeURIComponent(this.click_type);
        sUrl += "&src=" + encodeURIComponent(this.click_src);
        sUrl += "&text=" + encodeURIComponent(this.click_text);
        this.oCO = document.createElement('<div id="ClickOut" style="width:0px;height:0px;"></div>');
        document.body.appendChild(this.oCO);   
        document.getElementById("ClickOut").innerHTML =  '<img src="' + sUrl + '" style="display: none;" width="0px" height="0px" \/>';
        return true;
    }

    this.onclick        = function(args) {       
        if( this.src_onclick != null ) this.src_onclick(e);
        var obj = event.srcElement;
        var tag = obj.tagName.toLowerCase();
       
        this.click_id        = obj.id?obj.id:null;
        this.click_class    = obj.className?obj.className:null;
        this.click_name        = obj.name?obj.name:null;
        this.click_tag        = tag;
        this.click_parent    = obj;
        this.click_obj        = obj;
        this.click_path        = tag;

        if( tag == "a" ) {
            this.click_type = "text";
            this.click_src = obj.href;
            this.click_text = obj.innerHTML;
        }
        else if ( tag == "img" ) {
            this.click_type = "pic";
            this.click_src = obj.src;
            this.click_text = obj.alt;
        }
        else if ( tag == "font" || tag == "b" || tag == "strong" ) {
            this.click_type = "text";
            this.click_src = "";
            this.click_text = obj.innerHTML;
        }
        else {
            this.click_type = "layer";
            this.click_src = "" ;
            this.click_text = obj.innerHTML;
        }
       
        this.GetParent();

        this.debug(this.click_path);
        doSave();
    }

    this.GetParent        = function() {       
        if( !this.click_parent.parentNode.tagName ) return;
        this.click_parent = this.click_parent.parentNode;       
        this.click_path = this.click_parent.tagName.toLowerCase() + "[ " +
            (this.click_parent.id?("ID:" + this.click_parent.id):"") +
            (this.click_parent.className?(" ,CLASS:" + this.click_parent.className):"") +
            (this.click_parent.name?(" ,NAME:" + this.click_parent.name):"") +
            " ]" + ">" + this.click_path;   
        this.GetParent();
    }
}

// 实例
var objCO = new ClickOut();
objCO.src_onclick = document.onclick;

function click_tmp() {
    objCO.onclick();
}
function doSave() {
    objCO.save();
}

// bind event
document.onclick = click_tmp;


演示:

运行代码框

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Layout 16</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="HAPedit 3.1">
<style type="text/css">
html,body{margin:0;padding:0}
body{font: 76% arial,sans-serif}
p{margin:0 10px 10px}
a{display:block;color: #981793;padding:10px}
div#header h1{height:80px;line-height:80px;margin:0;
  padding-left:10px;background: #EEE;color: #79B30B}
div#content p{line-height:1.4}
div#navigation{background:#B9CAFF}
div#extra{background:#FF8539}
div#footer{background: #333;color: #FFF}
div#footer p{margin:0;padding:5px 10px}

div#wrapper{float:left;width:100%}
div#content{margin-right: 400px}
div#navigation{float:left;width:200px;margin-left:-200px}
div#extra{float:left;width:200px;margin-left:-400px}
div#footer{clear:left;width:100%}
</style>
</head>
<body>
<div id="container">
<div id="header"><h1>Header</h1></div>
<div id="wrapper">
<div id="content">
<p><strong>1) Content here.</strong> column long long column very long fill fill fill long text text column text silly very make long very fill silly make make long make text fill very long text column silly silly very column long very column filler fill long make filler long silly very long silly silly silly long filler make column filler make silly long long fill very.</p>

<p>very make make fill silly long long filler column long make silly silly column filler fill fill very filler text fill filler column make fill make text very make make very fill fill long make very filler column very long very filler silly very make filler silly make make column column </p>
<p>fill long make long text very make long fill column make text very silly column filler silly text fill text filler filler filler make make make make text filler fill column filler make silly make text text fill make very filler column very </p>
<p>column text long column make silly long text filler silly very very very long filler fill very fill silly very make make filler text filler text make silly text text long fill fill make text fill long text very silly long long filler filler fill silly long make column make silly long column long make very </p>
</div>
</div>
<div id="navigation">
<p><strong>2) Navigation here.</strong> long long fill filler very fill column column silly filler very filler fill fill filler text fill very silly fill text filler silly silly filler fill very make fill column text column very very column fill fill very silly column silly silly fill fill long filler </p>
</div>
<div id="extra">
<p><strong>3) More stuff here.</strong> very text make long column make filler fill make column column silly filler text silly column fill silly fill column text filler make text silly filler make filler very silly make text very very text make long filler very make column make silly column fill silly column long make silly filler column filler silly long long column fill silly column very </p>

</div>
<div id="footer"><p>Here it goes the footer</p></div>
</div>
<script>

/*
 * 说明:点出统计器
 * 作者:邓威
 * 日期:2006-07-25
 * 版本:v1.0
 */

function ClickOut()
{
 this.oCO  = null;
 this.src_onclick = null;
 this.isDEBUG  = true || "status";

 this.debug  = function(arg) {
  if( this.isDEBUG == "status" ) window.status = arg.toString();
  else if ( this.isDEBUG ) alert(arg.toString());
 }

 this.save  = function() {  
  var sUrl = "clickout.php?";
  sUrl += "tag=" + encodeURIComponent(this.click_tag);
  sUrl += "&type=" + encodeURIComponent(this.click_type);
  sUrl += "&src=" + encodeURIComponent(this.click_src);
  sUrl += "&text=" + encodeURIComponent(this.click_text);
  this.oCO = document.createElement('<div id="ClickOut" style="width:0px;height:0px;"></div>');
  document.body.appendChild(this.oCO); 
  document.getElementById("ClickOut").innerHTML =  '<img src="' + sUrl + '" style="display: none;" width="0px" height="0px" \/>';
  return true;
 }

 this.onclick  = function(args) {  
  if( this.src_onclick != null ) this.src_onclick(e);
  var obj = event.srcElement;
  var tag = obj.tagName.toLowerCase();
  
  this.click_id  = obj.id?obj.id:null;
  this.click_class = obj.className?obj.className:null;
  this.click_name  = obj.name?obj.name:null;
  this.click_tag  = tag;
  this.click_parent = obj;
  this.click_obj  = obj;
  this.click_path  = tag;

  if( tag == "a" ) {
   this.click_type = "text";
   this.click_src = obj.href;
   this.click_text = obj.innerHTML;
  }
  else if ( tag == "img" ) {
   this.click_type = "pic";
   this.click_src = obj.src;
   this.click_text = obj.alt;
  }
  else if ( tag == "font" || tag == "b" || tag == "strong" ) {
   this.click_type = "text";
   this.click_src = "";
   this.click_text = obj.innerHTML;
  }
  else {
   this.click_type = "layer";
   this.click_src = "" ;
   this.click_text = obj.innerHTML;
  }
  
  this.GetParent();

  this.debug(this.click_path);
  doSave();
 }

 this.GetParent  = function() {  
  if( !this.click_parent.parentNode.tagName ) return;
  this.click_parent = this.click_parent.parentNode;  
  this.click_path = this.click_parent.tagName.toLowerCase() + "[ " +
   (this.click_parent.id?("ID:" + this.click_parent.id):"") +
   (this.click_parent.className?(" ,CLASS:" + this.click_parent.className):"") +
   (this.click_parent.name?(" ,NAME:" + this.click_parent.name):"") +
   " ]" + ">" + this.click_path; 
  this.GetParent();
 }
}

// 实例
var objCO = new ClickOut();
// 保存原有的 onclick 事件

objCO.src_onclick = document.onclick;

function click_tmp() {
 objCO.onclick();
}
function doSave() {
 objCO.save();
}

// bind event
document.onclick = click_tmp;

 


</script>
</body>
</html>


 [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

 

本文作者:



相关阅读:
Oracle备份功能比较
在线增减.htpasswd内的用户
PHP网站开发遇到的中文编码
php图片上传存储源码并且可以预览
基于jQuery的窗口插件:jMessageBox
用JavaScript检查大写键(Caps Lock)是否打开
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
javascript学习笔记(三)显示当时时间的代码
Vista、Win7桌面删除不掉的广告图标的解决办法
给windows服务添加描述-.NET教程,Asp.Net开发
实用的CSS常见的问题和技巧总结
SQL Server服务代理的队列
巧用Recent模块加固Linux安全
js下通过prototype扩展实现indexOf的代码
快速导航

Copyright © 2016 phpStudy | 皖ICP备18014864号-4