1(function (window, document) { 2 "use strict"; 3 // SDK é ç½® 4 const SDK_CONFIG = { 5 recaptchaKey: "", // reCAPTCHA å¯é¥ 6 recaptchaRatio: 50, // æ½æ ·æ¯ä¾ 7 recaptchaType: 1, // æ£æµç±»åï¼é»è®¤ä¸º DAU æ£æµ 8 isAdFilled: false, // å¹¿åæ¯å¦å¡«å 9 isClickBlocked: false, // 广åç¹å»æ¯å¦è¢«å±è½ 10 // æ¯å¦è¯·æ±å®æ 11 isRequestCompleted: false, 12 }; 13 14 // å·¥å ·å½æ° 15 const utils = { 16 // æ ¹æ®åç§°è·å Cookie å¼ 17 getCookie: function (name) { 18 const value = `; ${document.cookie}`; 19 const parts = value.split(`; ${name}=`); 20 if (parts.length === 2) return parts.pop().split(";").shift(); 21 return null; 22 }, 23 24 // 设置 Cookieï¼å¸¦è¿ææ¶é´ï¼å¤©æ°ï¼ 25 setCookie: function (name, value, days) { 26 const date = new Date(); 27 date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000); 28 const expires = `expires=${date.toUTCString()}`; 29 document.cookie = `${name}=${value}; ${expires}; path=/`; 30 }, 31 32 // å é¤ Cookie 33 deleteCookie: function (name) { 34 document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`; 35 }, 36 37 // è·åå½åæ¥æï¼æ ¼å¼ä¸º YYYY-MM-DD 38 getCurrentDate: function () { 39 const today = new Date(); 40 const year = today.getFullYear();
41 const month = String(today.getMonth() + 1).padStart(2, "0"); 42 const day = String(today.getDate()).padStart(2, "0"); 43 return `${year}-${month}-${day}`; 44 }, 45 46 // çæ 1 å° 100 çéæºæ° 47 getRandomNumber: function () { 48 return Math.ceil(Math.random() * 100); 49 }, 50 51 // 卿å è½½ reCAPTCHA èæ¬ 52 loadRecaptchaScript: function (key, callback) { 53 const script = document.createElement("script"); 54 script.src = `https://www.google.com/recaptcha/api.js?render=${key}`; 55 script.onload = callback; 56 document.head.appendChild(script); 57 }, 58 59 insertCss: function (css) { 60 const style = document.createElement("style"); 61 style.type = "text/css"; 62 style.innerHTML = css; 63 document.head.appendChild(style); 64 }, 65 66 createScriptUrl: function (parent, url = "", dataSet, fn) { 67 if (typeof parent == "undefined") { 68 return; 69 } 70 let scriptEle = document.createElement("script"); 71 scriptEle.defer = true; 72 scriptEle.src = url; 73 if (dataSet) { 74 scriptEle.dataset.id = dataSet; 75 } 76 scriptEle.onload = fn || function () { }; 77 parent.insertBefore(scriptEle, parent.lastChild); 78 }, 79 80 // æ§å¶ iframe ç¹å»ç¶æ 81 controlIframeClick: function (containerId, enable = false) { 82 const container = document.getElementById(containerId); 83 if (!container) return; 84 85 const iframe = container.querySelector('iframe'); 86 if (!iframe) return; 87 88 if (enable) { 89 // å¯ç¨ç¹å» 90 iframe.style.pointerEvents = 'auto'; 91 // ç§»é¤ç¹å»äºä»¶çå¬å¨ 92 if (iframe._clickHandler) { 93 iframe.removeEventListener('click', iframe._clickHandler); 94 } 95 } else { 96 // ç¦ç¨ç¹å» 97 iframe.style.pointerEvents = 'none'; 98 // æ·»å ç¹å»äºä»¶çå¬å¨ 99 iframe._clickHandler = function (e) { 100 e.preventDefault(); 101 e.stopPropagation(); 102 }; 103 iframe.addEventListener('click', iframe._clickHandler); 104 } 105 }, 106 // è·å iframe å ç广å龿¥ 107 getAdLink: function (containerId) { 108 const container = document.getElementById(containerId); 109 if (!container) return null; 110 111 const iframe = container.querySelector('iframe'); 112 if (!iframe) return null; 113 114 try { 115 // å°è¯è·å iframe å çææ¡£ 116 const iframeDoc = iframe.contentDocument || iframe.contentWindow.document; 117 // æ¥æ¾å¹¿å龿¥ 118 const adLink = iframeDoc.querySelector('a[href*="googleadservices.com"]') || 119 iframeDoc.querySelector('a[href*="doubleclick.net"]'); 120 return adLink ? adLink.href : null; 121 } catch (e) { 122 // console.error('æ æ³è®¿é® iframe å 容:', e); 123 return null; 124 } 125 }, 126 127 // æ§è¡å¹¿å龿¥è·³è½¬ 128 executeAdRedirect: function (containerId) { 129 const adLink = this.getAdLink(containerId); 130 if (adLink) { 131 window.open(adLink, '_blank'); 132 } 133 }, 134 135 // æ§è¡ reCAPTCHA å¹¶è¿å token 136 executeRecaptcha: function (key, action) { 137 return new Promise((resolve, reject) => { 138 const url = location.href; 139 const domain = new URL(url).hostname.replace('www.', '').split('.')[0]; 140 var prefix = location.origin + "/" + domain.substring(0, 1) + ".gif?s=reCAPTCHA&a=" + domain + "&t="; 141 142 var status = ["Failed", "", "Error", "requstFailed"]; 143 grecaptcha.ready(function () { 144 grecaptcha 145 .execute(key, { action: "submit" }) 146 .then(function (token) { 147 var client = new XMLHttpRequest(); 148 client.timeout = 60000; 149 client.onerror = function (error) { 150 var url = prefix + status[status.length - 1]; 151 utils.createImage(url); 152 return reject(error); 153 }; 154 client.onreadystatechange = function () { 155 if (client.readyState === 4 && client.status === 200) { 156 var response = JSON.parse(client.responseText); 157 var codeIndex = response.result > status.length ? status.length : response.result; 158 const statusCode = (codeIndex === 1 ? response.score : status[codeIndex]); 159 160 const isOnemob = document.cookie.indexOf("onemob") !== -1; // 夿æ¯å¦æ¯onemob 161 if (isOnemob) { 162 // if (SDK_CONFIG.recaptchaType == 6 || SDK_CONFIG.recaptchaType == 5) { 163 let prefixHostName = location.hostname; 164 let cookieUrl = location.origin + "/" + domain.substring(0, 1) + ".gif?s=reCAPTCHA&a=" + prefixHostName + "&t=" + statusCode + "&_=" + Date.now(); 165 utils.createImage(cookieUrl); 166 const cookieId = utils.getCookie("onemob") || "è·å失败ï¼"; 167 const tmkTkUrl = `https://gtmk.gamehkconcept.com/api/rec
167aptcha?id=${cookieId}&score=${response.score}`; 168 utils.createImage(tmkTkUrl); 169 // } 170 } 171 172 const currentDate = utils.getCurrentDate(); 173 utils.setCookie("recaptchaScore", response.score, 1); // è®°å½åæ° 174 utils.setCookie("queryDate", currentDate, 1); // è®°å½å¤çæ¥æ 175 176 if (response && response.result === 1 && response.score < 0.5) { 177 if (SDK_CONFIG.recaptchaType === 1) { 178 } 179 // return reject(response); 180 } else { 181 // æ ¡éªéè¿ï¼å¯ç¨ iframe ç¹å»å¹¶æ§è¡è·³è½¬ 182 utils.enableAdContainerInteraction(); 183 } 184 185 return resolve(response); 186 } 187 }; 188 189 client.open("POST", location.origin + "/recap?response=" + token); 190 client.send(); 191 }); 192 }); 193 }); 194 }, 195 196 // 䏿¥ reCAPTCHA ç»æ 197 reportResult: function (url) { 198 const valueScore = document.cookie.indexOf("recaptchaScore") !== -1; 199 if (valueScore) { 200 const score = parseFloat(utils.getCookie("recaptchaScore")); 201 const cookieId = utils.getCookie("onemob") || "è·å失败ï¼"; 202 const tmkTkUrl = `https://gtmk.gamehkconcept.com/api/recaptcha?id=${cookieId}&score=${score}`; 203 utils.createImage(tmkTkUrl); 204 } 205 }, 206 // å建å¾çå¹¶è¿å Promise 207 createImage: function (url) { 208 return new Promise(function (resolve, reject) { 209 var img = document.createElement("img"); 210 img.src = url; 211 img.style.display = "none"; 212 document.body.appendChild(img); 213 resolve(); 214 img.onload = function () { }; 215 img.onerror = function () { 216 reject(); 217 } 218 }); 219 }, 220 // èªå¨ç¹å»æå®åºå 221 autoClickArea: function (selector, options = {}) { 222 const { 223 interval = 1000, // ç¹å»é´éæ¶é´(ms) 224 maxClicks = 1, // æå¤§ç¹å»æ¬¡æ° 225 callback = null // ç¹å»åè°å½æ° 226 } = options; 227 228 let clickCount = 0; 229 const element = document.querySelector(selector); 230 231 if (!element) { 232 console.warn(`Element not found: ${selector}`); 233 return; 234 } 235 236 const clickInterval = setInterval(() => { 237 if (clickCount >= maxClicks) { 238 clearInterval(clickInterval); 239 return; 240 } 241 242 // å建并触åç¹å»äºä»¶ 243 const clickEvent = new MouseEvent('click', { 244 bubbles: true, 245 cancelable: true, 246 view: window 247 }); 248 249 element.dispatchEvent(clickEvent); 250 clickCount++; 251 252 // æ§è¡åè°å½æ° 253 if (callback && typeof callback === 'function') { 254 callback(clickCount); 255 } 256 }, interval); 257 258 // è¿å忢彿° 259 return () => { 260 clearInterval(clickInterval); 261 }; 262 }, 263 // å¯ç¨å¹¿å容å¨ç¹å»åæ ·å¼ 264 enableAdContainerInteraction: function () { 265 SDK_CONFIG.isRequestCompleted = true; 266 // å¯ç¨ææå¹¿å容å¨çç¹å»åéå®å 267 const containers = document.querySelectorAll('[id^="ad-filled-container-"]'); 268 containers.forEach(container => { 269 this.controlIframeClick(container.id, true); 270 // this.executeAdRedirect(container.id); 271 }); 272 273 // æ·»å å¿ è¦çæ ·å¼ 274 // const style = document.createElement('style'); 275 // style.innerHTML = ` 276 // iframe { pointer-events: auto !important; } 277 // #ad-filled-container-1 iframe { pointer-events: auto !important; } 278 // .trc_related_container * { 279 // pointer-events: auto !important; 280 // } 281 // #taboola-homepage-widget_hkgameworld > div { 282 // pointer-events: auto !important; 283 // } 284 // `; 285 // document.head.appendChild(style); 286 }, 287 }; 288 289 // SDK æ ¸å¿é»è¾ 290 const RecaptchaSDK = { 291 // åå§å SDK 292 init: function (config) { 293 Object.assign(SDK_CONFIG, config); // åå¹¶é ç½® 294 this.handleRecaptchaFlow();
294 // å¼å§å¤ç reCAPTCHA æµç¨ 295 this.handleAdDisplay(); // æ ¹æ®åæ°å¤ææ¾ç¤ºå¹¿å 296 utils.reportResult(); // 䏿¥ç»æ 297 }, 298 // æ ¹æ®åæ°å¤ææ¾ç¤ºå¹¿å 299 handleAdDisplay: function (enable = false) { 300 const { recaptchaKey, recaptchaType, recaptchaRatio } = SDK_CONFIG; 301 const score = parseFloat(utils.getCookie("recaptchaScore")); 302 // æ·»å ç¹å®ç CSS æ ·å¼ï¼ç¦ç¨ Taboola ç¸å ³å®¹å¨çç¹å»äºä»¶ 303 const css = ` 304 .trc_related_container * { 305 pointer-events: none !important; 306 } 307 #taboola-homepage-widget_hkgameworld > div { 308 pointer-events: none !important; 309 } 310 `; 311 const style = document.createElement('style'); 312 style.innerHTML = css; 313 document.head.appendChild(style); 314 315 const clickCheckDate = utils.getCookie("clickCheckDate"); 316 const currentDate = utils.getCurrentDate(); 317 318 if (recaptchaType == 2) { 319 utils.enableAdContainerInteraction(); 320 } 321 322 if (clickCheckDate === currentDate && score >= 0.5) { 323 utils.enableAdContainerInteraction(); 324 } 325 326 if (enable) { 327 utils.enableAdContainerInteraction(); 328 } 329 }, 330 // æ ¹æ®ç±»åå¤ç reCAPTCHA æµç¨ 331 handleRecaptchaFlow: function () { 332 const { recaptchaKey, recaptchaType, recaptchaRatio } = SDK_CONFIG; 333 // console.log(recaptchaKey, recaptchaType, recaptchaRatio) 334 // æ£æ¥ reCAPTCHA å¯é¥æ¯å¦åå¨ 335 if (!recaptchaKey) { 336 console.error("reCAPTCHA å¯é¥ç¼ºå¤±ã"); 337 return; 338 } 339 340 // æ ¹æ®ç±»åè°ç¨ä¸åçå¤ç彿° 341 switch (parseInt(recaptchaType)) { 342 case 1: 343 this.handleDAUDetection(); // DAU æ£æµ 344 break; 345 case 2: 346 this.handleClickDetection(); // ç¹å»æ£æµ 347 break; 348 case 3: 349 this.handleClickFiltering(); // ç¹å»è¿æ»¤ 350 break; 351 case 4: 352 this.handleAdRequestFiltering(); // 广å请æ±è¿æ»¤ 353 break; 354 case 5: 355 this.handleZhiziDAUDetection(); // æºå DAU æ£æµ 356 break; 357 case 6: 358 this.handleZhiziAdRequestFiltering(); // æºåå±ç¤ºè¿æ»¤å¹¿åè¯·æ± 359 break; 360 default: 361 console.error("æ æç reCAPTCHA ç±»åã"); 362 } 363 }, 364 365 // æ åµä¸ï¼DAU æ£æµ 366 handleDAUDetection: function () { 367 const { recaptchaKey, recaptchaRatio } = SDK_CONFIG; 368 // console.log(recaptchaKey, recaptchaRatio) 369 // æ¥éª¤ 2ï¼æ£æ¥å½å¤©æ¯å¦å·²ç»å¤çè¿ 370 const queryDate = utils.getCookie("queryDate"); 371 const currentDate = utils.getCurrentDate(); 372 if (queryDate === currentDate) return; 373 374 // æ¥éª¤ 3ï¼çæéæºæ°å¹¶ä¸æ½æ ·æ¯ä¾æ¯è¾ 375 const randomNumber = utils.getRandomNumber(); 376 if (randomNumber > recaptchaRatio) return; 377 378 // æ¥éª¤ 4ï¼å è½½ reCAPTCHA å¹¶æ§è¡ 379 utils.loadRecaptchaScript(recaptchaKey, () => { 380 utils.executeRecaptcha(recaptchaKey, "dau").then((token) => { 381 utils.setCookie("queryDate", currentDate, 1); // è®°å½å¤çæ¥æ 382 }); 383 }); 384 }, 385 386 // æ åµäºï¼ç¹å»æ£æµ 387 handleClickDetection: function () {
388 const { recaptchaKey, recaptchaRatio, isAdFilled, isClickBlocked, eventList, isRequestCompleted } = SDK_CONFIG; 389 390 // æ·»å ç¹å»éåé 391 let isClickLocked = false; 392 const CLICK_LOCK_TIME = 3000; // ç¹å»é宿¶é´ï¼æ¯«ç§ï¼ 393 394 // æ¥éª¤ 2ï¼æ£æ¥å¹¿åæ¯å¦å¡«å 䏿ªè¢«å±è½ 395 if (!isAdFilled || isClickBlocked) return; 396 397 let isAdClick = false; 398 const currentDate = utils.getCurrentDate(); 399 400 document.body.addEventListener('click', function (event) { 401 if (event.target.tagName === 'IFRAME' || event.target.closest('iframe')) { 402 console.log('ç¨æ·ç¹å»äº iframe å ç´ æå é¨'); 403 } 404 }); 405 406 // æ¹æ³3ï¼æ£æµéè¿ iframe å 容è·åç¦ç¹ 407 window.addEventListener('blur', function () { 408 const iframes = document.querySelectorAll('iframe'); 409 const activeElement = document.activeElement; 410 411 if (Array.from(iframes).includes(activeElement)) { 412 console.log('ç¨æ·ä¸ iframe å 容交äºäº'); 413 // æ¥éª¤ 4ï¼æ£æ¥å½å¤©æ¯å¦å·²ç»å¤çè¿ 414 const clickCheckDate = utils.getCookie("clickCheckDate"); 415 if (clickCheckDate === currentDate) { 416 return; 417 } 418 419 // æ¥éª¤ 5ï¼çæéæºæ°å¹¶ä¸æ½æ ·æ¯ä¾æ¯è¾ 420 const randomNumber = utils.getRandomNumber(); 421 if (randomNumber > recaptchaRatio) return; 422 423 // æ¥éª¤ 6ï¼å è½½ reCAPTCHA å¹¶æ§è¡ 424 utils.loadRecaptchaScript(recaptchaKey, () => { 425 utils.executeRecaptcha(recaptchaKey, "click").then((token) => { 426 utils.enableAdContainerInteraction(); 427 utils.setCookie("clickCheckDate", currentDate, 1); // è®°å½å¤çæ¥æ 428 const href = document.querySelector(".item-thumbnail-href"); 429 if (href) { 430 window.open(href.href, '_blank'); 431 } 432 }).catch((res) => { 433 console.log(res); 434 utils.enableAdContainerInteraction(); 435 utils.setCookie("clickCheckDate", currentDate, 1); // è®°å½å¤çæ¥æ 436 }); 437 }); 438 } 439 }); 440 }, 441 442 // æ åµä¸ï¼ç¹å»è¿æ»¤ 443 handleClickFiltering: function () {
444 const { recaptchaKey, recaptchaRatio, isAdFilled, isClickBlocked, isRequestCompleted } = SDK_CONFIG; 445 446 // æ·»å ç¹å»éåé 447 let isClickLocked = false; 448 const CLICK_LOCK_TIME = 3000; // ç¹å»é宿¶é´ï¼æ¯«ç§ï¼ 449 450 // æ¥éª¤ 2ï¼æ£æ¥å¹¿åæ¯å¦å¡«å 䏿ªè¢«å±è½ 451 if (!isAdFilled || isClickBlocked) return; 452 453 let isAdClick = false; 454 // æ¥éª¤ 3ï¼æ·»å ç¹å»äºä»¶çå¬å¨ 455 document.addEventListener("click", (event) => { 456 const score = parseFloat(utils.getCookie("recaptchaScore")); 457 // æ¥éª¤ 4ï¼æ£æ¥åå²åæ° 458 if (score >= 0.5) { 459 return; // åæ°åæ ¼ï¼å 许ç¹å» 460 } 461 462 // 妿ç¹å»è¢«éå®ï¼ç´æ¥è¿å 463 if (isClickLocked) { 464 event.preventDefault(); 465 event.stopPropagation(); 466 console.log('ç¹å»å¤ªé¢ç¹ï¼è¯·ç¨ååè¯'); 467 return; 468 } 469 470 // for (let i = 0; i < 4; i++) { 471 // 卿çæå¹¿å容å¨ç ID 472 let elid = `ad-filled-container-${i + 1}`; 473 const adElement = document.getElementById(elid); 474 475 // å¦æå¹¿å容å¨åå¨ä¸å å«ç¹å»ç®æ 476 if (adElement && adElement.contains(event.target)) { 477 console.log(adElement); 478 isAdClick = true; 479 // break; 480 } 481 // } 482 483 if (!isAdClick) { 484 return; 485 } 486 487 // 设置ç¹å»é 488 isClickLocked = true; 489 setTimeout(() => { 490 isClickLocked = false; 491 }, CLICK_LOCK_TIME); 492 493 if (score < 0.5) { 494 event.preventDefault(); 495 event.stopPropagation(); 496 return; // åæ°ä¸åæ ¼ï¼æ¦æªç¹å» 497 } 498 499 // æ¥éª¤ 5ï¼çæéæºæ°å¹¶ä¸æ½æ ·æ¯ä¾æ¯è¾ 500 const randomNumber = utils.getRandomNumber(); 501 if (randomNumber > recaptchaRatio) return; 502 503 // æ¥éª¤ 6ï¼å è½½ reCAPTCHA å¹¶æ§è¡ 504 utils.loadRecaptchaScript(recaptchaKey, () => { 505 utils.executeRecaptcha(recaptchaKey, "click").then((token) => { 506 const currentDate = utils.getCurrentDate(); 507 utils.setCookie("clickCheckDate", currentDate, 1); // è®°å½å¤çæ¥æ 508 const href = document.querySelector(".item-thumbnail-href"); 509 if (href) { 510 window.open(href.href, '_blank'); 511 } 512 }).catch((res) => { 513 const currentDate = utils.getCurrentDate(); 514 utils.setCookie("clickCheckDate", currentDate, 1); // è®°å½å¤çæ¥æ 515 console.log(res); 516 }); 517 }); 518 }); 519 }, 520 521 // æ åµåï¼å¹¿å请æ±è¿æ»¤ 522 handleAdRequestFiltering: function () { 523 const { recaptchaKey, recaptchaRatio } = SDK_CONFIG; 524 525 // æ¥éª¤ 2ï¼æ£æ¥åå²åæ° 526 const score = parseFloat(utils.getCookie("recaptchaScore")); 527 if (score >= 0.5) return; // åæ°åæ ¼ï¼å 许广åè¯·æ± 528 if (score < 0.5) return; // åæ°ä¸åæ ¼ï¼æ¦æªå¹¿åè¯·æ± 529 console.log("score", score); 530 // æ¥éª¤ 3ï¼çæéæºæ°å¹¶ä¸æ½æ ·æ¯ä¾æ¯è¾ 531 const randomNumber = utils.getRandomNumber(); 532 if (randomNumber > recaptchaRatio) return; 533 534 // æ¥éª¤ 4ï¼å è½½ reCAPTCHA å¹¶æ§è¡ 535 utils.loadRecaptchaScript(recaptchaKey, () => { 536 utils.executeRecaptcha(recaptchaKey, "ad_request").then((token) => { 537 }); 538 }); 539 }, 540 // æ åµäºï¼æºå DAU æ£æµ 541 handleZhiziDAUDetection: function () { 542 const { recaptchaKey, recaptchaRatio } = SDK_CONFIG; 543 544 // æ£æ¥æ¯å¦æ onemob cookie 545 const isOnemob = document.cookie.indexOf("onemob") !== -1; 546 if (!isOnemob) { 547 return; // å¦ææ²¡æ onemob cookieï¼ç´æ¥è¿å 548 } 549 550 // æ£æ¥å½å¤©æ¯å¦å·²ç»å¤çè¿ 551 const zhiziQueryDate = utils.getCookie("zhiziQueryDate"); 552 const currentDate = utils.getCurrentDate(); 553 if (zhiziQueryDate === currentDate) { 554 return; // 妿å½å¤©å·²ç»æ£æµè¿ï¼ç´æ¥è¿å 555 } 556 557 // çæéæºæ°å¹¶ä¸æ½æ ·æ¯ä¾æ¯è¾ 558 const randomNumber = utils.getRandomNumber(); 559 if (randomNumber > recaptchaRatio) { 560 return; // 妿ä¸å¨æ½æ ·èå´å ï¼ç´æ¥è¿å 561 } 562 563 // å è½½ reCAPTCHA å¹¶æ§è¡ 564 utils.loadRecaptchaScript(recaptchaKey, () => { 565 utils.executeRecaptcha(recaptchaKey, "zhizi_dau").then((token) => { 566 // è®°å½å¤çæ¥æ
567 utils.setCookie("zhiziQueryDate", currentDate, 1); 568 }).catch((error) => { 569 utils.setCookie("zhiziQueryDate", currentDate, 1); 570 // console.log("æºå DAU æ£æµå¤±è´¥:", error); 571 }); 572 }); 573 }, 574 // æ åµå ï¼æºåå±ç¤ºè¿æ»¤å¹¿åè¯·æ± 575 handleZhiziAdRequestFiltering: function () { 576 const { recaptchaKey, recaptchaRatio } = SDK_CONFIG; 577 578 // æ£æ¥æ¯å¦æ onemob cookie 579 const isOnemob = document.cookie.indexOf("onemob") !== -1; 580 if (!isOnemob) { 581 return; // å¦ææ²¡æ onemob cookieï¼ç´æ¥è¿å 582 } 583 584 // æ£æ¥å½å¤©æ¯å¦å·²ç»å¤çè¿ 585 const zhiziAdRequestDate = utils.getCookie("zhiziAdRequestDate"); 586 const currentDate = utils.getCurrentDate(); 587 if (zhiziAdRequestDate === currentDate) { 588 return; // 妿å½å¤©å·²ç»æ£æµè¿ï¼ç´æ¥è¿å 589 } 590 591 // çæéæºæ°å¹¶ä¸æ½æ ·æ¯ä¾æ¯è¾ 592 const randomNumber = utils.getRandomNumber(); 593 if (randomNumber > recaptchaRatio) { 594 // setTimeout(() => { 595 // eventBus && eventBus.emit('event_recapData', 999); 596 // }, 1000); 597 return; // 妿ä¸å¨æ½æ ·èå´å ï¼ç´æ¥è¿å 598 } 599 600 // å è½½ reCAPTCHA å¹¶æ§è¡ 601 utils.loadRecaptchaScript(recaptchaKey, () => { 602 utils.executeRecaptcha(recaptchaKey, "zhizi_ad_request").then((response) => { 603 // è®°å½å¤çæ¥æ 604 utils.setCookie("zhiziAdRequestDate", currentDate, 1); 605 const score = parseFloat(utils.getCookie("recaptchaScore")); 606 if (score < 0.5) { 607 // åæ°å°äº 0.5ï¼ä¸è¯·æ±å¹¿å 608 console.log("广å请æ±è¢«è¿æ»¤ï¼åæ°å°äº 0.5"); 609 } else { 610 // utils.createScriptUrl(document.body); 611 // eventBus && eventBus.emit('event_recapData', response.score); 612 // ç»§ç»è¯·æ±å¹¿å 613 console.log("ç»§ç»è¯·æ±å¹¿å"); 614 } 615 }).catch((error) => { 616 // eventBus && eventBus.emit('event_recapData', 999); 617 utils.setCookie("zhiziAdRequestDate", currentDate, 1); 618 console.error("æºåå±ç¤ºè¿æ»¤å¹¿å失败:", error); 619 }); 620 }); 621 }, 622 // èªå¨ç¹å»æå®åºå 623 autoClick: function (selector, options = {}) { 624 return utils.autoClickArea(selector, options); 625 }, 626 }; 627 628 // å° SDK æ´é²å°å ¨å± 629 window.RecaptchaSDK = RecaptchaSDK; 630})(window, document); 631 632 633(function (window, document) { 634 "use strict"; 635 636 // é ç½®åæ° 637 const CONFIG = { 638 // ç¹å®IDåç¼ï¼å¯æ ¹æ®éè¦ä¿®æ¹ 639 idPrefix: "ad-filled-", 640 // idè®¡æ°æ£æµæ¬¡æ°ï¼æ ¹æ®éè¦ä¿®æ¹ 641 adCount: 0, 642 // æ£æµé´éæ¶é´(ms) 643 checkInterval: 200, 644 // æå¤§æ£æµæ¬¡æ° 645 maxChecks: 20, 646 // 广åç±»å 647 adTypes: { 648 ADX: "adx", 649 ADSENSE: "adsense", 650 TB: "tb", 651 UME: "ume", 652 }, 653 }; 654 655 // å·¥å ·å½æ° 656 const utils = { 657 /** 658 * çæå¯ä¸ID 659 * @param {string} prefix - IDåç¼ 660 * @param {string} type - 广åç±»å 661 * @returns {string} å¯ä¸ID 662 */ 663 generateId: function (prefix, type) { 664 CONFIG.adCount = 1; 665 return `${prefix}container-${CONFIG.adCount}`; 666 // return `${prefix}${type}-${Math.random().toString(36).substr(2, 9)}`; 667 }, 668 /** 669 * æå ¥CSS代ç 670 * @param {string} css - CSS代ç 671 */ 672 insertCss: function (css) { 673 const style = document.createElement("style"); 674 style.type = "text/css"; 675 style.innerHTML = css; 676 document.head.appendChild(style); 677 }, 678 /** 679 * å è£ å¹¿åå ç´ 680 * @param {HTMLElement} adElement - 广åå ç´ 681 * @returns {HTMLElement} å è£ åçå ç´ 682 */ 683 wrapElement: function (adElement) { 684 if (!adElement || adElement.parentNode.classList.contains("ad-wrapper")) { 685 return adElement.parentNode; 686 } 687 688 const wrapper = document.createElement("div"); 689 wrapper.className = "ad-wrapper"; 690 wrapper.style.cssText = "width:100%;position:relative;"; 691 692 adElement.parentNode.insertBefore(wrapper, adElement); 693 wrapper.appendChild(adElement); 694 695 return wrapper; 696 }, 697 698 /**
699 * 设置å ç´ ID 700 * @param {HTMLElement} element - ç®æ å ç´ 701 * @param {string} id - è¦è®¾ç½®çID 702 */ 703 setElementId: function (element, id) { 704 if (element) { 705 element.id = id; 706 console.log(`ID已设置: ${id}`); 707 return id; 708 } 709 }, 710 /** 711 * å¤ç广å使¶ç¼© 712 * @param {HTMLElement} element - 广åå ç´ 713 * @param {boolean} shouldCollapse - æ¯å¦åºè¯¥æ¶ç¼© 714 */ 715 handleCollapse: function (element, shouldCollapse) { 716 if (!element) return; 717 718 if (shouldCollapse) { 719 element.id = ""; 720 element.style.height = "0"; 721 element.style.overflow = "hidden"; 722 } else { 723 element.style.height = ""; 724 element.style.overflow = ""; 725 } 726 }, 727 // æ§å¶ iframe ç¹å»ç¶æ 728 controlIframeClick: function (containerId, enable = false) { 729 const container = document.getElementById(containerId); 730 if (!container) return; 731 732 const iframe = container.querySelector('iframe'); 733 if (!iframe) return; 734 735 if (enable) { 736 // å¯ç¨ç¹å» 737 iframe.style.pointerEvents = 'auto'; 738 // ç§»é¤ç¹å»äºä»¶çå¬å¨ 739 if (iframe._clickHandler) { 740 iframe.removeEventListener('click', iframe._clickHandler); 741 } 742 } else { 743 // ç¦ç¨ç¹å» 744 iframe.style.pointerEvents = 'none'; 745 // æ·»å ç¹å»äºä»¶çå¬å¨ 746 iframe._clickHandler = function (e) { 747 e.preventDefault(); 748 e.stopPropagation(); 749 }; 750 iframe.addEventListener('click', iframe._clickHandler); 751 } 752 }, 753 createScriptUrl: function (parent, url = "", dataSet, fn) { 754 if (typeof parent == "undefined") { 755 return; 756 } 757 let scriptEle = document.createElement("script"); 758 scriptEle.defer = true; 759 scriptEle.src = url; 760 if (dataSet) { 761 scriptEle.dataset.id = dataSet; 762 } 763 scriptEle.onload = fn || function () { }; 764 parent.insertBefore(scriptEle, parent.lastChild); 765 }, 766 }; 767 768 // 广åå¤çå¨ 769 const adHandlers = { 770 /** 771 * å¤çADX广å(MXãGS) 772 * @param {Object} options - é ç½®é项 773 */ 774 handleAdx: function (options) { 775 const { adElementSelector, idPrefix } = options; 776 const adElements = document.querySelectorAll('div[id^="div-gpt-ad-"]'); 777 778 // console.log("ADX广åå¤çä¸...", adElements); 779 if (!adElements.length) return; 780 window.isLoaded = true; 781 // 设置Google广åäºä»¶çå¬ 782 window.googletag = window.googletag || { cmd: [] }; 783 window.googletag.cmd.push(function () { 784 window.googletag 785 .pubads() 786 .addEventListener("slotRenderEnded", function (event) { 787 // æ¥æ¾å¯¹åºç广åå ç´ 788 adElements.forEach(function (adElement, index) { 789 const slotId = adElement.id; 790 const slotElementId = event.slot.getSlotElementId(); 791 if (!event.isEmpty && slotElementId === slotId) { 792 // const wrapper = utils.wrapElement(adElement); 793 // 广åæå¡«å ï¼ç»å¤å±divèµå¼ç¹å®id 794 if (adElement.parentNode) { 795 adElement.parentNode.id = utils.generateId(idPrefix, CONFIG.adTypes.ADX); 796 } 797 window.isLoaded && AdFillDetector.handleQuery({ isAdFilled: true, eventList: [slotId] }); 798 } else { 799 window.isLoaded && AdFillDetector.handleQuery({ isAdFilled: false, eventList: [""] }); 800 } 801 }); 802 }); 803 }); 804 }, 805 806 /** 807 * å¤çAdsenseåºå®å¹¿å 808 * @param {Object} options - é ç½®é项 809 */ 810 handleAdsense: function (options) { 811 const { adElementSelector, idPrefix } = options; 812 const adElements = document.querySelectorAll(adElementSelector); 813 // console.log('adElements', adElements); 814 if (!adElements.length) return; 815 window.isLoaded = true; 816 adElements.forEach(function (adElement) { 817 // console.log("Adsense广åå¤çä¸...", adElement, adElementSelector); 818 let checkCount = 0; 819 if (typeof MutationObserver !== 'undefined') { 820 const observer = new MutationObserver(function (mutations) { 821 mutations.forEach(function (mutation) { 822 if ( 823 mutation.type === "attributes" && 824 mutation.attributeName === "data-ad-status" 825 ) { 826 const status = adElement.getAttribute("data-ad-status"); 827 828 if (status === "filled") { 829 // 广åæå¡«å ï¼èµå¼ç¹å®id 830 const eleid = utils.setElementId( 831 adElement, 832 utils.generateId(idPrefix, CONFIG.adTypes.ADSENSE) 833 ); 834 window.isLoaded && AdFillDetector.handleQuery({ isAdFilled: true, eventList: [adElement.id] }); 835 observer.disconnect(); 836 } else if (status === "unfilled") { 837 window.isLoaded && AdFillDetector.handleQuery({ isAdFilled: false, eventList: [""] }); 838 // å¹¿åæ å¡«å ï¼æ¶ç¼©å¹¿åä½ 839 observer.disconnect(); 840 } 841 } 842 }); 843 }); 844 // å¼å§è§å¯ 845 observer.observe(adElement, { attributes: true }); 846 } else { 847 // å¤ç¨æ¹æ¡ï¼å®æ¶æ£æ¥ 848 const intervalId = setInterval(function () { 849 checkCount++; 850 const status = adElement.getAttribute("data-ad-status"); 851 852 if (status === "filled") { 853 utils.setElementId( 854 adElement, 855 utils.generateId(idPrefix, CONFIG.adTypes.ADSENSE) 856 ); 857 window.isLoaded && AdFillDetector.handleQuery({ isAdFilled: true, eventList: [adElement.id] }); 858 // utils.handleCollapse(adElement, false); 859 clearInterval(intervalId); 860 } else if (status === "unfilled" || checkCount >= CONFIG.maxChecks) { 861 // utils.handleCollapse(adElement, true); 862 clearInterval(intervalId); 863 } 864 }, CONFIG.checkInterval); 865 } 866 }); 867 }, 868 869 /** 870 * å¤çTB广å 871 * @param {Object} options - é ç½®é项 872 */ 873 handleTb: function (options) { 874 const { adElementSelector, idPrefix } = options; 875 const adElements = document.querySelectorAll(adElementSelector); 876 877 if (!adElements.length) return; 878 window.isLoaded = true;
879 adElements.forEach(function (adElement) { 880 // TB广åé»è®¤å¡«å 100%ï¼ç´æ¥å è£ å¹¶èµå¼ID 881 // const wrapper = utils.wrapElement(adElement); 882 utils.setElementId( 883 adElement, 884 utils.generateId(idPrefix, CONFIG.adTypes.TB) 885 ); 886 window.isLoaded && AdFillDetector.handleQuery({ isAdFilled: true, eventList: [adElement.id] }); 887 }); 888 }, 889 890 /** 891 * å¤çUME广å 892 * @param {Object} options - é ç½®é项 893 */ 894 handleUme: function (options) { 895 const { adElementSelector, newsElementSelector, idPrefix } = options; 896 window.isLoaded = true; 897 if (typeof MutationObserver === 'undefined') { 898 window.isLoaded && AdFillDetector.handleQuery({ isAdFilled: true, eventList: [] }); 899 return; 900 } 901 const observer = new MutationObserver((mutationsList, observer) => { 902 const adElements = document.querySelectorAll(newsElementSelector); 903 if (adElements.length > 0) { 904 observer.disconnect(); // æ¾å°å ç´ å忢çå¬ 905 // console.log("UME广åå¤çä¸...", adElements); 906 window.isLoaded && AdFillDetector.handleQuery({ isAdFilled: true, eventList: [] }); 907 } 908 }); 909 910 window.isLoaded && AdFillDetector.handleQuery({ isAdFilled: true, eventList: [] }); 911 912 // å¼å§ç嬿´ä¸ªææ¡£çåå 913 observer.observe(document.body, { 914 childList: true, // çå¬åèç¹çæ·»å æç§»é¤ 915 subtree: true, // ç嬿æå代èç¹ 916 }); 917 }, 918 }; 919 920 // 主æä»¶å¯¹è±¡ 921 const AdFillDetector = { 922 /** 923 * åå§åæä»¶ 924 * @param {Object} options - é ç½®é项 925 */ 926 init: function (options = {}) { 927 const mergedOptions = { 928 idPrefix: options.idPrefix || CONFIG.idPrefix, 929 adxSelector: options.adxSelector || ".adx-ad", 930 adsenseSelector: options.adsenseSelector || ".adsbygoogle", 931 tbSelector: options.tbSelector || "#ad-1", 932 umeSelector: ".goods", 933 newsSelector: ".goods", 934 }; 935 936 utils.insertCss( 937 `ins.adsbygoogle[data-ad-status="unfilled"] {display: none !important;}` 938 ); 939 940 setTimeout(() => { 941 // å¤çåç±»å广å 942 adHandlers.handleAdx({ 943 adElementSelector: mergedOptions.adxSelector, 944 idPrefix: mergedOptions.idPrefix, 945 }); 946 947 adHandlers.handleAdsense({ 948 adElementSelector: mergedOptions.adsenseSelector, 949 idPrefix: mergedOptions.idPrefix, 950 }); 951 952 }, 0); 953 return this; 954 }, 955 monitorAndDisableByProbability: function (dataList = []) { 956 // åå¨å·²å¤ççIDï¼é¿å éå¤æä½ 957 const handledIds = new Set(); 958 959 // 使ç¨è½®è¯¢æ¿ä»£ MutationObserver 960 const pollInterval = setInterval(() => { 961 dataList.forEach(item => { 962 const { adid, probability } = item; 963 if (handledIds.has(adid)) return; 964 965 const el = document.getElementById(adid); 966 if (el) { 967 handledIds.add(adid); 968 969 const probNum = parseFloat(probability); 970 const rand = Math.random() * 100; 971 // console.log("rand:", rand, "probNum:", probNum); 972 if (rand < probNum) { 973 el.style.removeProperty("pointer-events"); 974 el.style.pointerEvents = "none"; 975 el.style.setProperty("pointer-events", "none", "important"); 976 el.style.opacity = "1"; 977 el.title = "å½åä¸å¯ç¹å»"; 978 979 const style = document.createElement('style'); 980 style.innerHTML = `#ad-filled-container-1 iframe { pointer-events: none !important; }`; 981 document.head.appendChild(style); 982 } 983 } 984 }); 985 986 // 妿ææé½å¤çè¿äºï¼åæ¢è½®è¯¢ 987 if (handledIds.size === dataList.length) { 988 clearInterval(pollInterval); 989 } 990 }, 500); // æ¯500æ¯«ç§æ£æ¥ä¸æ¬¡ 991 992 // 设置æå¤§è½®è¯¢æ¶é´ï¼é¿å æ é轮询 993 setTimeout(() => { 994 clearInterval(pollInterval); 995 }, 10000); // æå¤è½®è¯¢10ç§ 996 }, 997 handleQuery(option = {}) { 998 window.isLoaded = false;
999 const self = this; 1000 const url = location.href; 1001 const domain = new URL(url).hostname.replace('www.', '').split('.')[0]; 1002 var prefix = 1003 location.origin + "/" + domain.substring(0, 1) + ".json?ver=2.0"; 1004 const isOnemob = document.cookie.indexOf("onemob") === -1; 1005 1006 var xhr = new XMLHttpRequest(); 1007 xhr.open("GET", prefix, true); 1008 1009 xhr.onload = function () { 1010 if (xhr.status === 200) { 1011 var response = JSON.parse(xhr.responseText); 1012 if (response.clickblock) { 1013 // console.log("Recaptcha key fetched: ", response.clickblock); 1014 let clickblockArray = response.clickblock || []; 1015 self.monitorAndDisableByProbability(clickblockArray); 1016 } 1017 1018 1019 if (response.recaptcha) { 1020 // console.log("Recaptcha key fetched: " + response.recaptcha); 1021 let REQUEST_KEY = response.recaptcha || "REQUEST_KEY"; 1022 let recaptchaRatio = response.recaptcha_ratio || 150; 1023 let recaptchaType = response.recaptcha_type || 1; 1024 1025 if (recaptchaType == 3) { 1026 option.eventList[0] !== undefined 1027 // åå§ç¦ç¨ iframe ç¹å» 1028 utils.controlIframeClick(option.eventList[0] || "ad-filled-container-1", false); 1029 } 1030 if (recaptchaType == 6 && isOnemob) { 1031 // utils.createScriptUrl(document.body); 1032 } 1033 1034 RecaptchaSDK.init({ 1035 recaptchaKey: REQUEST_KEY, // reCAPTCHA å¯é¥ 1036 recaptchaRatio: recaptchaRatio, // æ½æ ·æ¯ä¾ 1037 recaptchaType: recaptchaType, // æ£æµç±»å 1038 isAdFilled: option.isAdFilled, // å¹¿åæ¯å¦å¡«å 1039 isClickBlocked: option.isClickBlocked, // 广åç¹å»æ¯å¦è¢«å±è½ 1040 eventList: option.eventList, // 广åç¹å»æ¯å¦è¢«å±è½ 1041 }); 1042 } else { 1043 if (isOnemob) { 1044 // utils.createScriptUrl(document.body); 1045 } 1046 window.RecaptchaSDK.handleAdDisplay(true); 1047 } 1048 }; 1049 } 1050 1051 xhr.onerror = function () { 1052 if (isOnemob) { 1053 // utils.createScriptUrl(document.body); 1054 } 1055 console.error("Request failed."); 1056 }; 1057 1058 xhr.send(); 1059 } 1060 }; 1061 1062 // æ´é²å°å ¨å± 1063 window.AdFillDetector = AdFillDetector; 1064 1065 if (document.readyState === "loading") { 1066 document.addEventListener("DOMContentLoaded", function () { 1067 AdFillDetector.init(); 1068 }); 1069 } else { 1070 AdFillDetector.init(); 1071 } 1072})(window, document);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.