Skip to content

Commit b1eeb2c

Browse files
author
shengyonggen
committed
Release 1.17.1
1 parent 0b11adb commit b1eeb2c

15 files changed

+333
-148
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
2+
## 1.17.1 (2021-05-24)
3+
1. 新增
4+
- 全埋点点击事件支持配置任意标签和可配置层级的 `div` 元素(最高三层)
5+
16
## 1.16.16 (2021-05-20)
27
1. 修复
38
- 修复 `App` 内嵌 `H5` 可视化 `H5` 元素无法被圈选问题

core/sensorsdata.amd.min.js

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/sensorsdata.es6.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/sensorsdata.min.js

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

heatmap.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "sa-sdk-javascript",
3-
"version": "1.16.16",
3+
"version": "1.17.1",
44
"description": "official sensorsdata javascript sdk",
55
"main": "sensorsdata.min.js",
66
"scripts": {

product/heatmap.full.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8949,14 +8949,17 @@
89498949

89508950
var tagName = dom.ele.tagName.toLowerCase();
89518951
if (this.heatMode == 1) {
8952-
if (tagName === 'input' || tagName === 'textarea' || tagName === 'img') {
8952+
if (tagName === 'input' || tagName === 'textarea' || tagName === 'img' || tagName === 'svg') {
89538953
dom.attr('data-heat-place', String(key));
89548954
var width = $(selector[0]).width();
89558955
wrap = dom.wrap('span');
89568956
if (typeof width === 'number') {
89578957
wrap.ele.style.width = width;
89588958
}
89598959
wrap.ele.style.display = 'inline-block';
8960+
if (tagName === 'svg') {
8961+
wrap.ele.style.minWidth = '300px';
8962+
}
89608963
} else {
89618964
wrap = dom;
89628965
}
@@ -9032,7 +9035,7 @@
90329035
if (this.heatMode == 1) {
90339036
_.each(this.heatDataElement, function(ele) {
90349037
var tagName = ele.ele.tagName.toLowerCase();
9035-
if (tagName === 'input' || tagName === 'textarea' || tagName === 'img') {
9038+
if (tagName === 'input' || tagName === 'textarea' || tagName === 'img' || tagName === 'svg') {
90369039
var parent = ele.parent();
90379040
if (parent && parent.ele.tagName.toLowerCase() === 'span' && parent.ele.className.indexOf('sa-click-area') !== -1) {
90389041
$(ele.ele).unwrap();
@@ -9402,7 +9405,7 @@
94029405

94039406
window.sa_jssdk_heatmap_render = function(se, data, type, url) {
94049407
sd = se;
9405-
sd.heatmap_version = '1.16.16';
9408+
sd.heatmap_version = '1.17.1';
94069409
_ = sd._;
94079410

94089411
_.bindReady = function(fn, win) {

product/sensorsdata.amd.full.js

Lines changed: 101 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -3149,7 +3149,8 @@
31493149
if (_.isObject(sd.para.heatmap.collect_tags)) {
31503150
if (sd.para.heatmap.collect_tags.div === true) {
31513151
sd.para.heatmap.collect_tags.div = {
3152-
ignore_tags: ignore_tags_default
3152+
ignore_tags: ignore_tags_default,
3153+
max_level: 1
31533154
};
31543155
} else if (_.isObject(sd.para.heatmap.collect_tags.div)) {
31553156
if (sd.para.heatmap.collect_tags.div.ignore_tags) {
@@ -3160,6 +3161,12 @@
31603161
} else {
31613162
sd.para.heatmap.collect_tags.div.ignore_tags = ignore_tags_default;
31623163
}
3164+
if (sd.para.heatmap.collect_tags.div.max_level) {
3165+
var supportedDivLevel = [1, 2, 3];
3166+
if (_.indexOf(supportedDivLevel, sd.para.heatmap.collect_tags.div.max_level) === -1) {
3167+
sd.para.heatmap.collect_tags.div.max_level = 1;
3168+
}
3169+
}
31633170
} else {
31643171
sd.para.heatmap.collect_tags.div = false;
31653172
}
@@ -3222,7 +3229,7 @@
32223229

32233230
sd.setInitVar = function() {
32243231
sd._t = sd._t || 1 * new Date();
3225-
sd.lib_version = '1.16.16';
3232+
sd.lib_version = '1.17.1';
32263233
sd.is_first_visitor = false;
32273234
sd.source_channel_standard = 'utm_source utm_medium utm_campaign utm_content utm_term';
32283235
};
@@ -4127,7 +4134,7 @@
41274134
source: 'sa-web-sdk',
41284135
type: 'v-is-vtrack',
41294136
data: {
4130-
sdkversion: '1.16.16'
4137+
sdkversion: '1.17.1'
41314138
}
41324139
},
41334140
'*'
@@ -4279,6 +4286,14 @@
42794286
}
42804287
}
42814288

4289+
if (sd.para.heatmap && sd.para.heatmap.collect_tags && _.isObject(sd.para.heatmap.collect_tags)) {
4290+
_.each(sd.para.heatmap.collect_tags, function(val, key) {
4291+
if ((key !== 'div') && val) {
4292+
sd.heatmap.otherTags.push(key);
4293+
}
4294+
});
4295+
}
4296+
42824297
if (heatmapMode.isSeachHasKeyword()) {
42834298
heatmapMode.hasKeywordHandle();
42844299
} else if (window.parent !== self && vtrackMode.isSearchHasKeyword()) {
@@ -5728,14 +5743,87 @@
57285743

57295744

57305745
var heatmap = (sd.heatmap = {
5731-
getElementPath: function(element, ignoreID) {
5746+
otherTags: [],
5747+
getTargetElement: function(element, e) {
5748+
var that = this;
5749+
var target = element;
5750+
if (typeof target !== 'object') {
5751+
return null;
5752+
}
5753+
if (typeof target.tagName !== 'string') {
5754+
return null;
5755+
}
5756+
var tagName = target.tagName.toLowerCase();
5757+
if (tagName.toLowerCase() === 'body' || tagName.toLowerCase() === 'html') {
5758+
return null;
5759+
}
5760+
if (!target || !target.parentNode || !target.parentNode.children) {
5761+
return null;
5762+
}
5763+
5764+
var parent_ele = target.parentNode;
5765+
var hasA = that.hasElement(e.originalEvent || e);
5766+
var trackAttrs = sd.para.heatmap.track_attr;
5767+
var otherTags = that.otherTags;
5768+
5769+
if (tagName === 'a' || tagName === 'button' || tagName === 'input' || tagName === 'textarea' || _.hasAttributes(target, trackAttrs)) {
5770+
return target;
5771+
} else if (_.indexOf(otherTags, tagName) > -1) {
5772+
return target;
5773+
} else if (parent_ele.tagName.toLowerCase() === 'button' || parent_ele.tagName.toLowerCase() === 'a' || _.hasAttributes(parent_ele, trackAttrs)) {
5774+
return parent_ele;
5775+
} else if (tagName === 'area' && parent_ele.tagName.toLowerCase() === 'map' && _.ry(parent_ele).prev().tagName && _.ry(parent_ele).prev().tagName.toLowerCase() === 'img') {
5776+
return _.ry(parent_ele).prev();
5777+
} else if (hasA) {
5778+
return hasA;
5779+
} else if (tagName === 'div' && sd.para.heatmap.collect_tags.div && that.isDivLevelValid(target)) {
5780+
var max_level = sd.para.heatmap && sd.para.heatmap.collect_tags && sd.para.heatmap.collect_tags.div && sd.para.heatmap.collect_tags.div.max_level || 1;
5781+
if (max_level > 1 || that.isCollectableDiv(target)) {
5782+
return target;
5783+
} else {
5784+
return null;
5785+
}
5786+
} else if (that.isStyleTag(tagName) && sd.para.heatmap.collect_tags.div) {
5787+
var parentTrackDiv = that.getCollectableParent(target);
5788+
if (parentTrackDiv && that.isDivLevelValid(parentTrackDiv)) {
5789+
return parentTrackDiv;
5790+
}
5791+
}
5792+
return null;
5793+
},
5794+
getDivLevels: function(element, rootElement) {
5795+
var path = heatmap.getElementPath(element, true, rootElement);
5796+
var pathArr = path.split(' > ');
5797+
var ans = 0;
5798+
_.each(pathArr, function(tag) {
5799+
if (tag === 'div') {
5800+
ans++;
5801+
}
5802+
});
5803+
return ans;
5804+
},
5805+
isDivLevelValid: function(element) {
5806+
var max_level = sd.para.heatmap && sd.para.heatmap.collect_tags && sd.para.heatmap.collect_tags.div && sd.para.heatmap.collect_tags.div.max_level || 1;
5807+
5808+
var allDiv = element.getElementsByTagName('div');
5809+
for (var i = allDiv.length - 1; i >= 0; i--) {
5810+
if (heatmap.getDivLevels(allDiv[i], element) > max_level) {
5811+
return false;
5812+
}
5813+
}
5814+
return true;
5815+
},
5816+
getElementPath: function(element, ignoreID, rootElement) {
57325817
var names = [];
57335818
while (element.parentNode) {
57345819
if (element.id && !ignoreID && /^[A-Za-z][-A-Za-z0-9_:.]*$/.test(element.id)) {
57355820
names.unshift(element.tagName.toLowerCase() + '#' + element.id);
57365821
break;
57375822
} else {
5738-
if (element === document.body) {
5823+
if (rootElement && element === rootElement) {
5824+
names.unshift(element.tagName.toLowerCase());
5825+
break;
5826+
} else if (element === document.body) {
57395827
names.unshift('body');
57405828
break;
57415829
} else {
@@ -5915,7 +6003,7 @@
59156003
}
59166004
},
59176005
hasElement: function(e) {
5918-
var path = e._getPath();
6006+
var path = e._getPath ? e._getPath() : heatmap.getElementPath(e.target, true).split(' > ');
59196007
if (_.isArray(path) && path.length > 0) {
59206008
for (var i = 0; i < path.length; i++) {
59216009
if (path[i] && path[i].tagName && path[i].tagName.toLowerCase() === 'a') {
@@ -5948,7 +6036,8 @@
59486036
continue;
59496037
}
59506038
var tag = target.children[i].tagName.toLowerCase();
5951-
if (this.isStyleTag(tag, isVisualMode)) {
6039+
var max_level = sd.para && sd.para.heatmap && sd.para.heatmap.collect_tags && sd.para.heatmap.collect_tags.div && sd.para.heatmap.collect_tags.div.max_level;
6040+
if ((tag === 'div' && max_level > 1) || this.isStyleTag(tag, isVisualMode)) {
59526041
if (!this.isCollectableDiv(target.children[i], isVisualMode)) {
59536042
return false;
59546043
}
@@ -5970,7 +6059,8 @@
59706059
if (parentName === 'body') {
59716060
return false;
59726061
}
5973-
if (parentName && parentName === 'div' && this.isCollectableDiv(parent, isVisualMode)) {
6062+
var max_level = sd.para && sd.para.heatmap && sd.para.heatmap.collect_tags && sd.para.heatmap.collect_tags.div && sd.para.heatmap.collect_tags.div.max_level;
6063+
if (parentName && parentName === 'div' && (max_level > 1 || this.isCollectableDiv(parent, isVisualMode))) {
59746064
return parent;
59756065
} else if (parent && this.isStyleTag(parentName, isVisualMode)) {
59766066
return this.getCollectableParent(parent, isVisualMode);
@@ -6105,40 +6195,9 @@
61056195
return false;
61066196
}
61076197
var target = ev.target || ev.srcElement;
6108-
if (typeof target !== 'object') {
6109-
return false;
6110-
}
6111-
if (typeof target.tagName !== 'string') {
6112-
return false;
6113-
}
6114-
var tagName = target.tagName.toLowerCase();
6115-
if (tagName.toLowerCase() === 'body' || tagName.toLowerCase() === 'html') {
6116-
return false;
6117-
}
6118-
if (!target || !target.parentNode || !target.parentNode.children) {
6119-
return false;
6120-
}
6121-
6122-
var parent_ele = target.parentNode;
6123-
var hasA = that.hasElement(e);
6124-
var trackAttrs = sd.para.heatmap.track_attr;
6125-
if (tagName === 'a' || tagName === 'button' || tagName === 'input' || tagName === 'textarea' || _.hasAttributes(target, trackAttrs)) {
6126-
that.start(ev, target, tagName);
6127-
} else if (parent_ele.tagName.toLowerCase() === 'button' || parent_ele.tagName.toLowerCase() === 'a' || _.hasAttributes(parent_ele, trackAttrs)) {
6128-
that.start(ev, parent_ele, target.parentNode.tagName.toLowerCase());
6129-
} else if (tagName === 'area' && parent_ele.tagName.toLowerCase() === 'map' && _.ry(parent_ele).prev().tagName && _.ry(parent_ele).prev().tagName.toLowerCase() === 'img') {
6130-
that.start(ev, _.ry(parent_ele).prev(), _.ry(parent_ele).prev().tagName.toLowerCase());
6131-
} else if (hasA) {
6132-
that.start(ev, hasA, hasA.tagName.toLowerCase());
6133-
} else if (tagName === 'div' && sd.para.heatmap.collect_tags.div && that.isCollectableDiv(target)) {
6134-
that.start(ev, target, tagName);
6135-
} else if (that.isStyleTag(tagName)) {
6136-
if (sd.para.heatmap.collect_tags.div) {
6137-
var divTarget = that.getCollectableParent(target);
6138-
if (divTarget) {
6139-
that.start(ev, divTarget, 'div');
6140-
}
6141-
}
6198+
var theTarget = sd.heatmap.getTargetElement(target, e);
6199+
if (theTarget) {
6200+
that.start(ev, theTarget, theTarget.tagName.toLowerCase());
61426201
}
61436202
});
61446203
}

0 commit comments

Comments
 (0)