广告点击添加
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
/**
|
||||
* 广告点击上报:点击任一带 data-ads-id / data-ads-location 的广告元素时,
|
||||
* 异步 POST 本站 BFF /api/ads/click(服务端补 appId 并转发 /api/app/ads/click)。
|
||||
* - 捕获阶段监听 click / auxclick(中键),不 preventDefault,不阻塞广告链接打开
|
||||
* - id、location 均为正整数才上报;失败静默
|
||||
*/
|
||||
(function () {
|
||||
var ENDPOINT = "/api/ads/click";
|
||||
|
||||
function toPositiveInt(value) {
|
||||
var text = String(value == null ? "" : value).trim();
|
||||
if (!/^\d+$/.test(text)) return 0;
|
||||
var n = Number(text);
|
||||
return n > 0 && n <= 9007199254740991 ? n : 0;
|
||||
}
|
||||
|
||||
function findAdElement(target) {
|
||||
var el = target && target.nodeType === 1 ? target : target && target.parentElement;
|
||||
return el && typeof el.closest === "function" ? el.closest("[data-ads-id][data-ads-location]") : null;
|
||||
}
|
||||
|
||||
function report(adsId, location) {
|
||||
try {
|
||||
fetch(ENDPOINT, {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json", Accept: "application/json" },
|
||||
body: JSON.stringify({ adsId: adsId, location: location }),
|
||||
credentials: "include",
|
||||
keepalive: true,
|
||||
}).catch(function () {});
|
||||
} catch (error) {
|
||||
// 上报失败静默,不影响广告跳转。
|
||||
}
|
||||
}
|
||||
|
||||
function onClick(event) {
|
||||
if (event.type === "auxclick" && event.button !== 1) return;
|
||||
var el = findAdElement(event.target);
|
||||
if (!el) return;
|
||||
var adsId = toPositiveInt(el.getAttribute("data-ads-id"));
|
||||
var location = toPositiveInt(el.getAttribute("data-ads-location"));
|
||||
if (!adsId || !location) return;
|
||||
report(adsId, location);
|
||||
}
|
||||
|
||||
document.addEventListener("click", onClick, true);
|
||||
document.addEventListener("auxclick", onClick, true);
|
||||
})();
|
||||
Reference in New Issue
Block a user