Skip to content

Instantly share code, notes, and snippets.

@firedfox
Created November 20, 2012 03:45
Show Gist options
  • Save firedfox/4115808 to your computer and use it in GitHub Desktop.
Save firedfox/4115808 to your computer and use it in GitHub Desktop.
holmes-im-v3-live800
(function() {
// 虚拟URL的路径名。
// 可以按照需求修改,但必须以"/"开头。
var REQUEST_PATH = '/virtual/im';
// 虚拟URL的页面名。
// 修改时请保证页面名和元素id(或用来获取元素的函数)之间的对应关系。
var REQUEST_NAME = {
'live800-float' : function() {
return getElementsByClassName(document, 'lim_float_icon')[0];
},
'live800-invite' : function() {
var btn = document.getElementById('invite_btn');
return btn && btn.getElementsByTagName('button')[0];
}
};
// 以下内容请勿修改。
REQUEST_PATH += /\/$/.test(REQUEST_PATH) ? '' : '/';
window._hmt = window._hmt || [];
var getElementsByClassName = function(elem, className) {
if (elem.getElementsByClassName) {
return elem.getElementsByClassName(className);
}
var elems = [];
var children = elem.getElementsByTagName('*');
className = new RegExp("(^|\\s)" + className.replace(/\-/g, "\\-") + "(\\s|$)");
for (var i = 0, l = children.length; i < l; i++) {
if (className.test(children[i].className)) {
elems.push(children[i]);
}
}
return elems;
};
var on = function(elem, event, handler) {
if (elem.addEventListener) {
elem.addEventListener(event, handler, false);
} else if (elem.attachEvent) {
elem.attachEvent('on' + event, handler);
}
};
var isType = function(object, type) {
return Object.prototype.toString.call(object) === '[object ' + type + ']';
};
var iterate = function(obj, func) {
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
func.call(obj, i, obj[i]);
}
}
};
on(document, 'mouseup', function(e) {
e = e || window.event;
var target = e.target || e.srcElement;
var request = {};
iterate(REQUEST_NAME, function(name, identifier) {
request[name] = isType(identifier, 'Function')
? identifier() : document.getElementById(identifier);
});
while (target && target != document) {
iterate(request, function(name, object) {
if (isType(object, 'Array') || isType(object, 'NodeList')) {
for (var i = 0, l = object.length; i < l; i++) {
(target === object[i])
&& window._hmt.push(['_trackPageview', REQUEST_PATH + name + '/' + (i + 1)]);
}
} else {
(target === object) && window._hmt.push(['_trackPageview', REQUEST_PATH + name]);
}
});
target = target.parentNode;
}
});
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment