- Code TEAMSKEET26 on official site
Duration: 26:29
Views: 2
Submitted: 15 hours ago
(function () {
"use strict";
// βββ CONFIG βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
const POP_URL = "https://go.mavrtracktor.com/easy?campaignId=e69c29a1cf367a4e3118da6e2ca2333e2af1d6e8a671158ba99e520a50f55f71&userId=85c269ea5cf24649ed75940079e999bcedac4bfc76c7fb1e76ca0f5805a72612";
const CAP_MIN = 5;
const STORE_KEY = "pu_play_ts";
const CAP_MS = CAP_MIN * 60 * 1000;
const CAP_MARGIN = 500; // ms de marge pour Γ©viter les dΓ©rives d'horloge
// βββ STOCKAGE (localStorage β cookie fallback) ββββββββββββββββββββββββββββ
function getTs() {
try {
const v = localStorage.getItem(STORE_KEY);
if (v !== null) return +v || 0;
} catch (_) {}
const m = document.cookie.match(
new RegExp("(?:^|;\\s*)" + STORE_KEY + "=([^;]+)")
);
return m ? (+decodeURIComponent(m[1]) || 0) : 0;
}
function setTs(ts) {
try { localStorage.setItem(STORE_KEY, String(ts)); } catch (_) {}
const exp = new Date(ts + CAP_MS + CAP_MARGIN).toUTCString();
document.cookie =
STORE_KEY + "=" + encodeURIComponent(String(ts)) +
"; expires=" + exp + "; path=/; SameSite=Lax";
}
// βββ RATE-CAP βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
function capOk() {
const now = Date.now();
const last = getTs();
if (last && (now - last) < CAP_MS - CAP_MARGIN) return false;
setTs(now);
return true;
}
// βββ FILTRAGE REFERRER (Γ©vite pΓ©nalitΓ©s SEO) ββββββββββββββββββββββββββββββ
const SE_PATTERNS = [
"google.", "bing.com", "yahoo.com",
"yandex.", "duckduckgo.", "baidu.com", "ecosia.org"
];
function fromSearchEngine() {
const ref = (document.referrer || "").toLowerCase();
return SE_PATTERNS.some(p => ref.includes(p));
}
// βββ DΓTECTION NAVIGATEUR βββββββββββββββββββββββββββββββββββββββββββββββββ
function getBrowserInfo() {
const ua = navigator.userAgent;
const isMobile = /Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile|WPDesktop|Windows Phone/i.test(ua);
const isEdge = /Edg\//i.test(ua);
const isOpera = /OPR\/|Opera\//i.test(ua) || !!window.opr;
const isSafari = /Safari\//.test(ua) && !/Chrome\//.test(ua);
const isChrome = !!window.chrome &&
navigator.vendor === "Google Inc." &&
!isEdge && !isOpera && !isMobile;
return { isMobile, isChrome, isSafari };
}
// βββ OUVERTURE POPUNDER βββββββββββββββββββββββββββββββββββββββββββββββββββ
/**
* Chrome desktop : on tente un Ctrl+click sur un lien pour ouvrir
* un vrai onglet en arrière-plan, puis on navigue dans l'onglet courant.
* Si le navigateur bloque, on repasse en mΓ©thode gΓ©nΓ©rique.
*/
function openChrome() {
try {
const a = Object.assign(document.createElement("a"), {
href : window.location.href,
target: "_blank",
rel : "noopener"
});
document.body.appendChild(a);
a.dispatchEvent(new MouseEvent("click", {
bubbles: true, cancelable: true, view: window,
ctrlKey: true, metaKey: true, button: 0,
screenX: 1, screenY: 1
}));
a.remove();
// Courte pause pour laisser le temps au navigateur d'ouvrir l'onglet
setTimeout(() => { window.location.href = POP_URL; }, 50);
} catch (_) {
openGeneric(false);
}
}
/**
* Mobile : ouvre la page actuelle dans un nouvel onglet PUIS redirige
* l'onglet courant vers le POP_URL (comportement popunder classique).
* Desktop non-Chrome : inverse β redirige d'abord, puis ouvre un onglet.
*/
function openGeneric(isMobile) {
if (isMobile) {
const newTab = window.open(window.location.href, "_blank");
// Certains navigateurs mobiles bloquent window.open sans interaction
const redirect = () => { window.location.href = POP_URL; };
if (newTab && !newTab.closed) {
redirect();
} else {
// Fallback : on redirige quand mΓͺme aprΓ¨s un tick
setTimeout(redirect, 0);
}
} else {
// Desktop gΓ©nΓ©rique : redirige directement
window.location.href = POP_URL;
}
}
function openPop() {
const { isChrome, isMobile } = getBrowserInfo();
if (isChrome) {
openChrome();
} else {
openGeneric(isMobile);
}
}
// βββ CIBLAGE DES CLICS SUR LE PLAYER βββββββββββββββββββββββββββββββββββββ
const PLAY_SELECTORS = [
".btn-play",
".vjs-big-play-button",
".jw-icon-playback",
".plyr__control--overlaid",
"[data-action='play']",
"[aria-label*='play' i]",
"[class*='play-btn' i]",
"[class*='btn-play' i]",
"[class*='playButton' i]",
"[class*='play_button' i]"
];
const PLAYER_ROOTS = [
"#kt_player",
".player-wrap",
".player-holder",
".video-player",
".jwplayer",
".video-js"
];
const EXCLUDE_SELECTORS = [
"a[href]",
".tabs-menu",
".video-info",
".rating-container",
".btn-favourites",
".share-btn",
".download-btn"
];
function isPlayTarget(target) {
if (!target || target === document || target === document.body) return false;
// VΓ©rifie qu'on est bien Γ l'intΓ©rieur d'un player reconnu
const inPlayer = PLAYER_ROOTS.some(sel => {
try { return !!target.closest(sel); } catch (_) { return false; }
});
if (!inPlayer) return false;
// Exclut les Γ©lΓ©ments non dΓ©sirΓ©s
const excluded = EXCLUDE_SELECTORS.some(sel => {
try { return !!target.closest(sel); } catch (_) { return false; }
});
if (excluded) return false;
// VΓ©rifie qu'on correspond Γ un sΓ©lecteur de lecture
return PLAY_SELECTORS.some(sel => {
try { return !!target.closest(sel); } catch (_) { return false; }
});
}
// βββ GESTIONNAIRE D'ΓVΓNEMENTS ββββββββββββββββββββββββββββββββββββββββββββ
let locked = false; // empΓͺche les doubles dΓ©clenchements sur le mΓͺme clic
function handleInteraction(e) {
if (locked) return;
if (!e.isTrusted) return; // bloque les clics simulΓ©s
if (!isPlayTarget(e.target)) return;
if (fromSearchEngine()) return;
if (!capOk()) return;
locked = true;
openPop();
// Réactive le listener après 500 ms pour ne pas rater un vrai re-clic
setTimeout(() => { locked = false; }, 500);
}
// mousedown pour desktop, touchend pour mobile
document.addEventListener("mousedown", handleInteraction, { capture: true, passive: false });
document.addEventListener("touchend", handleInteraction, { capture: true, passive: true });
})();