前端全(无)埋点之页面操作路径可视化

2,921 阅读1分钟
原文链接: github.com

前端全(无)埋点之页面操作路径可视化

1. 什么是全(无)埋点?

首先全(无)埋点并不是完全不用写代码,而是尽可能的少写代码。开发者将SDK集成到项目中,配置并初始化SDK之后,就可以实现自动化采集用户行为数据。

2. 页面操作路径

2.1 点击操作路径

页面操作路径是指用户在当前页面都点击了什么;比如用户在当前页面先点了按钮1,然后又点了按钮2,....;这里需要注意下和用户访问路径的区别,用户访问路径指的是一次会话中,用户访问的多个页面路径。

2.2 滚动操作路径

滚动操作路径是指记录页面滚动的位置信息,以方便的统计用户在页面中从上往下滚动时,从哪儿跳出页面的几率高。

3. xpath

XPath是一门在XML文档中查找信息的语言。XPath用于在XML文档中通过元素和属性进行导航。全埋点需要把点击的目标对象在页面文档结构中的xpath路径记录下来。

4. 获取xpath的js库

function ellocate (el) {
    var locator = { xpath: '', css: ''};
    var eloc = {
        getClass: function(el) {
            var formatClass = '';
            var elementClass = el.className;
            if(typeof elementClass != 'undefined' && elementClass != ''){
                formatClass = '.' + elementClass.split(/[\s\n]+/).join('.');
            }
            return formatClass;
        },
        index: function(el) {
            var elements = el.parentNode.children;
            for (var i=0;i<elements.length;i++) {
                if( elements[i] == el){
                    return i;
                }   
            }
        }
    };
    for (; el && el.nodeType == 1; el = el.parentNode) {
        var idx = eloc.index(el);
        if(el.tagName.substring(0,1) != "/" && el.tagName.toLowerCase() !== 'body' && el.tagName.toLowerCase() !== 'html') { //IE oddity: some tagNames can begin with backslash.
            if(el.id != 'undefined' && el.id !='') {
                var idPath="[@id=" + "'" + el.id + "'" + "]";
                locator.xpath = '/' + el.tagName.toLowerCase() + idPath + locator.xpath;
                locator.css = el.tagName.toLowerCase() + '#' + el.id + ' > ' + locator.css;
            }
            else {
                idx='[' + idx + ']';
                locator.xpath = '/' + el.tagName.toLowerCase() + idx + locator.xpath;
                locator.css = el.tagName.toLowerCase() + eloc.getClass(el) + ' > ' + locator.css;
            }
        }
    }
    locator.xpath = '//html[1]/body[1]/' + locator.xpath;
    locator.css = locator.css.substr(0, locator.css.length-3);
    return locator;
};

上面的方法给定el元素可以返回CSS selectors和XPath expressions。