Showing source for: https://abbcnet.io/
Redirects (1): https://happyatwork.io/(301) ⟶ https://abbcnet.io/
Duration: 0.264304s
Server: TencentEdgeOne
<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="/wp-content/themes/cakhiatv/style.css" />
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
<link rel="icon" href="/favicon.ico" type="image/x-icon" />
<style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style>
<!-- Tá»i ưu hóa công cụ tìm kiếm bá»i Rank Math PRO - https://rankmath.com/ -->
<title>XoilacTV Trá»±c Tiếp Bóng Äá WC 2026 #1 - Link Trá»±c Tuyến 24/7</title>
<meta name="description" content="Xoilac TV là website chuyên phát sóng trá»±c tiếp các tráºn bóng Äá ná»i tiếng vá»i Äá»i ngÅ© bình luáºn viên tiếng Viá»t hoà n toà n miá»
n phÃ. Tại Äây, ngưá»i xem có thá»"/>
<meta name="robots" content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"/>
<link rel="canonical" href="https://abbcnet.io" />
<meta property="og:locale" content="vi_VN" />
<meta property="og:type" content="website" />
<meta property="og:title" content="XoilacTV Trá»±c Tiếp Bóng Äá WC 2026 #1 - Link Trá»±c Tuyến 24/7" />
<meta property="og:description" content="Xoilac TV là website chuyên phát sóng trá»±c tiếp các tráºn bóng Äá ná»i tiếng vá»i Äá»i ngÅ© bình luáºn viên tiếng Viá»t hoà n toà n miá»
n phÃ. Tại Äây, ngưá»i xem có thá»" />
<meta property="og:url" content="https://abbcnet.io" />
<meta property="og:site_name" content="Xoilac TV â Trá»±c tiếp bóng Äá tá»c Äá» cao â Trá»±c tuyến Xôi Lạc HD" />
<meta property="og:updated_time" content="2026-05-28T00:42:10+07:00" />
<meta property="article:published_time" content="2025-05-05T18:00:30+07:00" />
<meta property="article:modified_time" content="2026-05-28T00:42:10+07:00" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="XoilacTV Trá»±c Tiếp Bóng Äá WC 2026 #1 - Link Trá»±c Tuyến 24/7" />
<meta name="twitter:description" content="Xoilac TV là website chuyên phát sóng trá»±c tiếp các tráºn bóng Äá ná»i tiếng vá»i Äá»i ngÅ© bình luáºn viên tiếng Viá»t hoà n toà n miá»
n phÃ. Tại Äây, ngưá»i xem có thá»" />
<meta name="twitter:site" content="@greenparkhadong" />
<meta name="twitter:creator" content="@greenparkhadong" />
<meta name="twitter:label1" content="ÄÆ°á»£c viết bá»i" />
<meta name="twitter:data1" content="Nguyá»
n Hoà ng Hùng" />
<meta name="twitter:label2" content="Thá»i gian Äá» Äá»c" />
<meta name="twitter:data2" content="10 phút" />
<script type="application/ld+json" class="rank-math-schema-pro">{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://abbcnet.io/#organization","name":"Xoilac TV","sameAs":["https://twitter.com/greenparkhadong","https://xoilacgreenparkhadong.wordpress.com/","https://profile.hatena.ne.jp/xoilacgreenparkhadong/profile","https://www.pinterest.com/xoilacgreenparkhadong/","https://www.youtube.com/@Xoilacgreenparkhadong/about","https://about.me/xoillacgreenparkhadong","https://x.com/greenparkhadong","https://xoilacgreenparkhadong.blogspot.com/2025/04/xoilac-tv-xem-truc-tiep-bong-xoi-lac-hd.html","https://sites.google.com/view/xoilacgreenparkhadong/trang-ch%E1%BB%A7","https://www.deviantart.com/greenparkhadong","https://www.tumblr.com/xoilacgreenparkhadong","https://www.goodreads.com/user/show/189911607-xoilac-greenparkhadong","https://telegra.ph/xoilac-greenparkhadong-04-27","https://www.instapaper.com/p/greenparkhadong","https://www.quora.com/profile/Xoilac-Greenparkhadong","https://xoilacgreenparkhadong.webflow.io/posts/xoilac-tv---xem-truc-tiep-bong-da-xoi-lac-hd-mien-phi","https://vimeo.com/xoilacgreenparkhadong","https://500px.com/p/xoilacgreenparkhadong?view=photos","https://issuu.com/xoilacgreenparkhadong","https://www.behance.net/xlgreenparkhadong","https://www.twitch.tv/xoilacgreenparkhadong/about","https://uccle.monopinion.belgium.be/profiles/xoilacgreenparkhadon/activity","https://www.ohay.tv/profile/xoilacgreenparkhadong","https://comicvine.gamespot.com/profile/xoilacgreenpark/","https://www.reddit.com/user/Due_Commission_9000/","https://substance3d.adobe.com/community-assets/profile/org.adobe.user:70622173680EB7460A495FA1@AdobeID","https://gravatar.com/xoilacgreenparkhadong","https://disqus.com/by/xoilacgreenparkhadong/about/","https://pixabay.com/users/u_17smen7tau-49974878/"],"logo":{"@type":"ImageObject","@id":"https://abbcnet.io/#logo","url":"https://cdn.admingreenpark.site/wp-content/uploads/2025/07/logo-squared.jpg","contentUrl":"https://cdn.admingreenpark.site/wp-content/uploads/2025/07/logo-squared.jpg","caption":"Xoilac TV \u2013 Tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1 t\u1ed1c \u0111\u1ed9 cao \u2013 Tr\u1ef1c tuy\u1ebfn X\u00f4i L\u1ea1c HD","inLanguage":"vi","width":"1080","height":"1080"}},{"@type":"WebSite","@id":"https://abbcnet.io/#website","url":"https://abbcnet.io","name":"Xoilac TV \u2013 Tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1 t\u1ed1c \u0111\u1ed9 cao \u2013 Tr\u1ef1c tuy\u1ebfn X\u00f4i L\u1ea1c HD","alternateName":"Xoilac TV \u2013 Tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1 t\u1ed1c \u0111\u1ed9 cao \u2013 Tr\u1ef1c tuy\u1ebfn X\u00f4i L\u1ea1c HD","publisher":{"@id":"https://abbcnet.io/#organization"},"inLanguage":"vi","potentialAction":{"@type":"SearchAction","target":"https://abbcnet.io/?s={search_term_string}","query-input":"required name=search_term_string"}},{"@type":"ImageObject","@id":"https://img.lightshot.app/fz5XV-aYQK20L3cY1wRUIg.jpg","url":"https://img.lightshot.app/fz5XV-aYQK20L3cY1wRUIg.jpg","width":"200","height":"200","inLanguage":"vi"},{"@type":"WebPage","@id":"https://abbcnet.io#webpage","url":"https://abbcnet.io","name":"XoilacTV Tr\u1ef1c Ti\u1ebfp B\u00f3ng \u0110\u00e1 WC 2026 #1 - Link Tr\u1ef1c Tuy\u1ebfn 24/7","datePublished":"2025-05-05T18:00:30+07:00","dateModified":"2026-05-28T00:42:10+07:00","about":{"@id":"https://abbcnet.io/#organization"},"isPartOf":{"@id":"https://abbcnet.io/#website"},"primaryImageOfPage":{"@id":"https://img.lightshot.app/fz5XV-aYQK20L3cY1wRUIg.jpg"},"inLanguage":"vi"},{"@type":"Person","@id":"https://abbcnet.io/author/nguyenhoanghung","name":"Nguy\u1ec5n Ho\u00e0ng H\u00f9ng","url":"https://abbcnet.io/author/nguyenhoanghung","image":{"@type":"ImageObject","@id":"https://secure.gravatar.com/avatar/3db51410889146b896f8d5dd2fdb14db28e5d26431f63e00a3c65b5844b80f84?s=96&d=mm&r=g","url":"https://secure.gravatar.com/avatar/3db51410889146b896f8d5dd2fdb14db28e5d26431f63e00a3c65b5844b80f84?s=96&d=mm&r=g","caption":"Nguy\u1ec5n Ho\u00e0ng H\u00f9ng","inLanguage":"vi"},"worksFor":{"@id":"https://abbcnet.io/#organization"}},{"@type":"Article","headline":"XoilacTV Tr\u1ef1c Ti\u1ebfp B\u00f3ng \u0110\u00e1 WC 2026 #1 - Link Tr\u1ef1c Tuy\u1ebfn 24/7","datePublished":"2025-05-05T18:00:30+07:00","dateModified":"2026-05-28T00:42:10+07:00","author":{"@id":"https://abbcnet.io/author/nguyenhoanghung","name":"Nguy\u1ec5n Ho\u00e0ng H\u00f9ng"},"publisher":{"@id":"https://abbcnet.io/#organization"},"description":"Xoilac TV l\u00e0 website chuy\u00ean ph\u00e1t s\u00f3ng tr\u1ef1c ti\u1ebfp c\u00e1c tr\u1eadn b\u00f3ng \u0111\u00e1 n\u1ed5i ti\u1ebfng v\u1edbi \u0111\u1ed9i ng\u0169 b\u00ecnh lu\u1eadn vi\u00ean ti\u1ebfng Vi\u1ec7t ho\u00e0n to\u00e0n mi\u1ec5n ph\u00ed. T\u1ea1i \u0111\u00e2y, ng\u01b0\u1eddi xem c\u00f3 th\u1ec3","name":"XoilacTV Tr\u1ef1c Ti\u1ebfp B\u00f3ng \u0110\u00e1 WC 2026 #1 - Link Tr\u1ef1c Tuy\u1ebfn 24/7","@id":"https://abbcnet.io#richSnippet","isPartOf":{"@id":"https://abbcnet.io#webpage"},"image":{"@id":"https://img.lightshot.app/fz5XV-aYQK20L3cY1wRUIg.jpg"},"inLanguage":"vi","mainEntityOfPage":{"@id":"https://abbcnet.io#webpage"}}]}</script>
<!-- /Plugin SEO WordPress Rank Math -->
<link rel='dns-prefetch' href='//cdn.abbcnet.io' />
<script type="text/javascript">
/* <![CDATA[ */
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.1.0\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.1.0\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/cdn.abbcnet.io\/wp-content\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.8.1"}};
/*! This file is auto-generated */
!function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\ud83d\udd25","\ud83d\udc26\u200b\ud83d\udd25")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings);
/* ]]> */
</script>
<style id='wp-emoji-styles-inline-css' type='text/css'>
img.wp-smiley, img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 0.07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
</style>
<link rel='stylesheet' id='wp-block-library-css' href='https://cdn.abbcnet.io/wp-content/wp-includes/css/dist/block-library/style.min.css?ver=6.8.1' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='ez-toc-css' href='https://cdn.abbcnet.io/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.74' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li , div#ez-toc-container ul li a {font-size: 95%;}div#ez-toc-container ul li , div#ez-toc-container ul li a {font-weight: 500;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, '.', decimal) '. ';display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, '.', decimal) '. ';display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='main-style-css' href='https://cdn.abbcnet.io/wp-content/themes/cakhiatv/style.css?ver=6.8.1' type='text/css' media='all' />
<script type="text/javascript" src="https://cdn.abbcnet.io/wp-content/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script>
<script type="text/javascript" src="https://cdn.abbcnet.io/wp-content/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script>
<link rel="https://api.w.org/" href="https://abbcnet.io/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://abbcnet.io/wp-json/wp/v2/pages/1060" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://abbcnet.io/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 6.8.1" />
<link rel='shortlink' href='https://abbcnet.io/' />
<link rel="alternate" title="oNhúng (JSON)" type="application/json+oembed" href="https://abbcnet.io/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fabbcnet.io%2F" />
<link rel="alternate" title="oNhúng (XML)" type="text/xml+oembed" href="https://abbcnet.io/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fabbcnet.io%2F&format=xml" />
<style>
@media (min-width: 1024px) {
h1 {
font-size: 1.5em !important;
}
}
.match-teams-score {
display: flex !important;
}
@media (max-width: 767px) {
.xgplayer .xg-inner-controls {
height: 60px !important;
}
.header .logo img{
height: 35px;
}
}
@media (min-width: 481px) and (max-width: 767px) {
div#chat_messages {
max-height: 60vh !important;
}
}
</style>
<style>
.match-section {
min-height: 4800px;
}
.match-card__status {
position: absolute;
top: 13%;
left: 50%;
transform: translate(-50%, -50%);
}
.match-card__stats-content {
background: none !important;
box-shadow: none !important
}
@media (max-width: 480px) {
.team__logo {
width: 40px !important;
height: 40px !important;
}
.match-card__league {
max-width: 100px;
}
.match-card__time {
max-width: 100px;
}
.match-card__status {
max-width: 120px;
order: 1 !important;
font-size: 12px
}
.streaming {
padding: 4px;
}
.btn-view-truc-tiep {
padding: 8px 4px !important;
font-size: 12px;
}
.match-card__stats-content {
display: block !important;
}
.match-card__stats {
display: block !important
}
}
@media (min-width: 768px) and (max-width: 1024px) {
.match-card__status {
position: absolute;
top: 13%;
left: 50%;
transform: translate(-50%, -50%);
}
.match-card__league {
max-width: 110px;
}
}
</style><script type="text/javascript" id="google_gtagjs" src="https://www.googletagmanager.com/gtag/js?id=G-6NNBLBZ7YH" async="async"></script>
<script type="text/javascript" id="google_gtagjs-inline">
/* <![CDATA[ */
window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}gtag('js', new Date());gtag('config', 'G-6NNBLBZ7YH', {} );
/* ]]> */
</script>
<!-- Google tag (tá»ng) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-V8GXMSME5N"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-V8GXMSME5N');
</script>
<script src="//s1.what-on.com/widget/service-v2.js?key=VUCiqQ" async="async"></script>
</head>
<body>
<!-- Header -->
<header class="header">
<div class="container">
<div class="header__inner">
<a href="/" class="logo">
<img src="/wp-content/uploads/2025/05/xoilactv_logo.png" alt="XOILAC TV" />
</a>
<div style="display: flex; align-items: center">
<nav class="nav">
<button class="nav__toggle">
<img src="https://cdn.abbcnet.io/wp-content/themes/cakhiatv/assets/images/hamburger.svg" alt="Menu" />
</button>
<ul class="nav__menu">
<button class="nav__close" aria-label="Close menu"></button>
<li class="nav__item"><a href="https://abbcnet.io/lich-thi-dau" class="">Lá»CH THI ÄẤU</a></li><li class="nav__item"><a href="https://abbcnet.io/bang-xep-hang" class="">BẢNG XẾP HẠNG</a></li><li class="nav__item"><a href="https://abbcnet.io/ket-qua-bong-da" class="">KẾT QUẢ BÃNG ÄÃ</a></li><li class="nav__item"><a href="https://abbcnet.io/nhan-dinh" class="">NHẬN Äá»NH</a></li><li class="nav__item"><a href="https://abbcnet.io/tin-bong-da" class="">TIN TỨC</a></li> </ul>
</nav>
<div class="header__buttons">
<a href="https://refvsbf.com/" class="btn btn--secondary header-button" rel="nofollow">
<span class="header-text">CƯỢC VSBET</span>
</a>
<a href="https://t.me/vsbet88888888888888888" rel="nofollow" target="_blank" class="btn btn--default header-button">
<span class="header-text">LIÃN Há» KM</span>
</a>
</div>
</div>
</div>
</div>
</header>
<!-- Main Content -->
<!-- Main Content -->
<main>
<!-- Hero Section -->
<section class="hero">
<div class="container">
<div class="hero__content">
<h1 class="text-uppercase">
Xoilac TV â Trá»±c tiếp bóng Äá tá»c Äá» cao â Trá»±c tuyến Xôi Lạc HD
</h1>
</div>
</div>
</section>
<style>
.top-live-box{
width: 100%;
height: auto;
display: flex;
gap: 8px;
}
.top-live-box .left {
width: 100%;
min-height: 564px;
background-color: #000;
border-radius: 4px;
overflow: hidden;
}
.top-live-box .live-list {
width: 240px;
flex-shrink: 0;
}
.top-live-box .live-list .live-item {
width: 100%;
height: 144px;
margin-bottom: 6px;
cursor: pointer;
border-radius: 4px;
transition: all .1s ease-in-out;
overflow: hidden;
border: 2px solid transparent;
position: relative;
}
.top-live-box .live-list .live-item .anchor-item {
width: 100%;
height: 100%;
}
.el-image img {
display: block;
width: 100%;
height: 100%;
object-fit: cover;
}
.btn-view-truc-tiep{
position: absolute;
top: 70%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 5;
background: #f2152d;
padding: 20px;
border-radius: 30px;
cursor: pointer;
}
.btn-view-truc-tiep:hover{
opacity: 0.8;
}
.video-player{
position: relative;
}
</style>
<!-- Sports Filter -->
<section class="sports-filter">
<div class="container">
<div class="sports-filter__inner">
<!-- Group 1: Sports Categories -->
<div class="sports-filter__group sports-categories">
<button
class="sports-filter__button active"
data-sport="all"
>
<div class="sports-filter__button-icon">
<img
src="https://cdn.abbcnet.io/wp-content/themes/cakhiatv/assets/images/icons/football.png"
alt="Tất Cả"
/>
</div>
<div class="sports-filter__button-text">Tất Cả</div>
<div class="sports-filter__button-count" id="count-all-type"></div>
</button>
<button
class="sports-filter__button"
data-sport="football"
>
<div class="sports-filter__button-icon">
<img
src="https://cdn.abbcnet.io/wp-content/themes/cakhiatv/assets/images/icons/football.png"
alt="Football"
/>
</div>
<div class="sports-filter__button-text">Bóng Äá</div>
<div class="sports-filter__button-count" id="count-football"></div>
</button>
<button class="sports-filter__button" data-sport="basketball">
<div class="sports-filter__button-icon">
<img
src="https://cdn.abbcnet.io/wp-content/themes/cakhiatv/assets/images/icons/basketball.png"
alt="Basketball"
/>
</div>
<div class="sports-filter__button-text">Bóng rá»</div>
<div class="sports-filter__button-count" id="count-basketball"></div>
</button>
<!-- <button class="sports-filter__button" data-sport="tennis">
<div class="sports-filter__button-icon">
<img src="https://cdn.abbcnet.io/wp-content/themes/cakhiatv/assets/images/icons/tennis.png" alt="Tennis" />
</div>
<div class="sports-filter__button-text">Tennis</div>
<div class="sports-filter__button-count" id="count-tennis"></div>
</button> -->
<!--<button class="sports-filter__button" data-sport="volleyball">
<div class="sports-filter__button-icon">
<img
src="https://cdn.abbcnet.io/wp-content/themes/cakhiatv/assets/images/icons/volleyball.png"
alt="Volleyball"
/>
</div>
<div class="sports-filter__button-text">Bóng chuyá»n</div>
<div class="sports-filter__button-count" id="count-volleyball"></div>
</button> -->
<div class="livescore-switch">
<label class="switch">
<input type="checkbox" id="livescoreToggle" />
<span class="slider"></span>
</label>
<span class="livescore-label">Livescore</span>
</div>
</div>
<!-- Divider -->
<div class="sports-filter__divider"></div>
<!-- Group 2: Match Filters -->
<div class="sports-filter__group match-filters">
<button class="sports-filter__button_child" data-filter="child_all">
<div class="sports-filter__button-icon">
<img src="https://cdn.abbcnet.io/wp-content/themes/cakhiatv/assets/images/icons/all.png?v=123" alt="All" />
</div>
<div class="sports-filter__button-text">Tất cả</div>
<div class="sports-filter__button-count" id="count-all">463</div>
</button>
<button class="sports-filter__button_child live" data-filter="live">
<div class="sports-filter__button-icon">
<img src="https://cdn.abbcnet.io/wp-content/themes/cakhiatv/assets/images/icons/live.png" alt="Live" />
</div>
<div class="sports-filter__button-text">Äang Live</div>
<div class="sports-filter__button-count" id="count-live"></div>
</button>
<!--<button class="sports-filter__button_child" data-filter="hot">
<div class="sports-filter__button-icon">
<img src="https://cdn.abbcnet.io/wp-content/themes/cakhiatv/assets/images/icons/hot.png" alt="Hot" />
</div>
<div class="sports-filter__button-text">Tráºn HOT</div>
<div class="sports-filter__button-count" id="count-hot">48</div>
</button>-->
<button class="sports-filter__button_child" data-filter="date" data-value="">
<div class="sports-filter__button-icon">
<img src="https://cdn.abbcnet.io/wp-content/themes/cakhiatv/assets/images/icons/calendar.png" alt="Today" />
</div>
<div class="sports-filter__button-text">Hôm Nay</div>
<div class="sports-filter__button-count" id="count-today"></div>
</button>
<button class="sports-filter__button_child" data-filter="date" data-value="">
<div class="sports-filter__button-icon">
<img
src="https://cdn.abbcnet.io/wp-content/themes/cakhiatv/assets/images/icons/calendar.png"
alt="Tomorrow"
/>
</div>
<div class="sports-filter__button-text">Ngà y Mai</div>
<div class="sports-filter__button-count" id="count-tomorrow"></div>
</button>
<!--
<button class="sports-filter__button_child" data-filter="no_blv">
<div class="sports-filter__button-text">Live không BLV</div>
<div class="sports-filter__button-count" id="noblv-live">0</div>
</button>
-->
</div>
</div>
</div>
</section>
<!-- Featured Matches -->
<section class="featured-matches">
<div class="container">
<div class="match-section">
<div id="match-list" class="matches">
</div>
</div>
<!--<div
style="
display: flex;
justify-content: center;
margin-top: 1rem;
margin-bottom: 1rem;
"
>
<a href="#" class="btn btn--readmore">
<span>Xem thêm lá»ch trá»±c tiếp -></span>
</a>
</div>-->
</div>
</section>
<!-- Content Navigation Section -->
<section class="content-nav">
<div class="container">
<div class="content-nav__container" style="max-height:800px !important">
<div class="content-nav__lists">
<div class="content-nav__list">
<!-- Nếu bạn vẫn muá»n giữ Mục lục nà y thá»§ công, thì Äá» lại -->
<p style="font-weight: bold; font-size: 120%">Mục Lục</p>
<!-- Hoặc có thá» xoá toà n bá» <ul> nà y nếu muá»n Gutenberg xá» lý luôn -->
<div class="content-nav__divider"></div>
<div class="content-nav__text">
<div id="ez-toc-container" class="ez-toc-v2_0_74 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title" style="cursor:inherit">Table of Contents</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="https://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="https://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#Tong_quan_thong_tin_ve_trang_bong_da_Xoilac_TV" >Tá»ng quan thông tin vá» trang bóng Äá Xoilac TV</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="#Danh_gia_chat_luong_phat_song_cua_trang_web_bong_da" >Äánh giá chất lượng phát sóng cá»§a trang web bóng Äá</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-3" href="#Xem_bong_da_Xoilac_TV_free" >Xem bóng Äá Xoilac TV free</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-4" href="#Hinh_anh_sac_net" >Hình ảnh sắc nét</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#Am_thanh_song_dong" >Ãm thanh sá»ng Äá»ng</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-6" href="#Khong_quang_cao_phien_nhieu" >Không quảng cáo phiá»n nhiá»
u</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-7" href="#Xoilac_TV_phat_song_muot_ma" >Xoilac TV phát sóng mượt mà </a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-8" href="#Da_dang_link_du_phong" >Äa dạng link dá»± phòng</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-9" href="#BLV_Xoilac_TV_co_chuyen_mon_cao" >BLV Xoilac TV có chuyên môn cao</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-10" href="#Xem_bong_da_tren_da_thiet_bi_tien_loi" >Xem bóng Äá trên Äa thiết bá» tiá»n lợi</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-11" href="#Mot_vai_chuyen_muc_ho_tro_dac_sac_khac_tai_Xoilac_TV" >Má»t và i chuyên mục há» trợ Äặc sắc khác tại Xoilac TV</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#Lich_thi_dau" >Lá»ch thi Äấu</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="#Bang_xep_hang" >Bảng xếp hạng</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-14" href="#Ket_qua_bong_da_Xoilac_TV" >Kết quả bóng Äá Xoilac TV</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-15" href="#Tin_tuc_bong_da" >Tin tức bóng Äá</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-16" href="#Nhan_dinh_bong_da" >Nháºn Äá»nh bóng Äá</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-17" href="#So_sanh_diem_noi_bat_cua_Xoilac_TV_voi_trang_web_khac" >So sánh Äiá»m ná»i báºt cá»§a Xoilac TV vá»i trang web khác</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-18" href="#FAQs_%E2%80%93_Giai_dap_cac_thac_mac_xoay_quanh_Xoilac_TV_moi_nhat" >FAQs – Giải Äáp các thắc mắc xoay quanh Xoilac TV má»i nhất</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-19" href="#Cach_truy_cap_Xoilac_TV_chinh_xac_la_gi" >Cách truy cáºp Xoilac TV chÃnh xác là gì?</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-20" href="#Xem_bong_da_tai_Xoi_Lac_TV_co_hop_phap_khong" >Xem bóng Äá tại Xôi Lạc TV có hợp pháp không?</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-21" href="#Chat_luong_phat_song_tai_day_danh_gia_the_nao" >Chất lượng phát sóng tại Äây Äánh giá thế nà o?</a></li></ul></li></ul></nav></div>
<p><strong><a href="/">Xoilac</a> TV</strong> là website chuyên phát sóng trá»±c tiếp các tráºn bóng Äá ná»i tiếng vá»i Äá»i ngÅ© bình luáºn viên tiếng Viá»t hoà n toà n miá»
n phÃ. Tại Äây, ngưá»i xem có thá» thưá»ng thức Äa dạng tráºn Äấu Äặc sắc quy mô lá»n nhá» trên toà n thế giá»i. Äá» biết thêm thông tin vá» ná»n tảng nà y, má»i bạn Äá»c hãy cùng chúng tôi khám phá chuyên mục bên dưá»i ngay.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="Tong_quan_thong_tin_ve_trang_bong_da_Xoilac_TV"></span><strong>Tá»ng quan thông tin vá» trang bóng Äá Xoilac TV</strong><span class="ez-toc-section-end"></span></h2>
<p>Trong suá»t thá»i gian tá»n tại và phát triá»n trên thá» trưá»ng, website nà y Äã dần trá» thà nh cái tên gắn liá»n Äá»i vá»i những cá» Äá»ng viên bóng Äá tại Viá»t Nam. Äặc biá»t Äây là má»t trong các thương hiá»u há» trợ phát sóng tráºn Äấu trá»±c tiếp hấp dẫn toà n cầu vá»i lá»ch sá» hoạt Äá»ng lâu nÄm. ChÃnh vì váºy, Äến nay Äã có hà ng triá»u ngưá»i tin tưá»ng truy cáºp và sá» dụng những dá»ch vụ ÄÆ¡n vá» cung cấp.</p>
<p><strong><a href="/">Xoilac TV</a></strong> ÄÆ°á»£c biết Äến là ná»n tảng trá»±c tiếp các tráºn bóng Äá Äá»nh cao, hot nhất thế giá»i. Tuy nhiên Äiá»u quan trá»ng hÆ¡n cả giúp cho trang chá»§ thu hút và nháºn ÄÆ°á»£c nhiá»u Äánh giá tÃch cá»±c cá»§a ngưá»i xem là nhá» bá»i vô sá» tiá»n Ãch hấp dẫn từ hình ảnh, âm thanh, video,… Äiá»u nà y giúp cho bất kỳ ai cÅ©ng có thá» dá»
dà ng truy cáºp và thưá»ng thức không khà sôi Äá»ng cá»§a bá» môn thá» thao vua Äặc sắc.</p>
<figure class="wp-block-image size-large"><img decoding="async" src="https://img.lightshot.app/fz5XV-aYQK20L3cY1wRUIg.jpg" alt="Sơ lược thông tin vỠtrang web Xoilac TV 2025"/></figure>
<p><em>Sơ lược thông tin vỠtrang web Xoilac TV 2025</em></p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="Danh_gia_chat_luong_phat_song_cua_trang_web_bong_da"></span><strong>Äánh giá chất lượng phát sóng cá»§a trang web bóng Äá</strong><span class="ez-toc-section-end"></span></h2>
<p>Không chá» phát sóng những tráºn cầu hấp dẫn, Äá»nh cao trên toà n thế giá»i mÃ ÄÆ¡n vá» còn mang lại nhiá»u tÃnh nÄng trá»±c tiếp vô cùng hữu Ãch. Äây cÅ©ng là lý do giúp ná»n tảng trá» thà nh sá»± lá»±a chá»n hà ng Äầu cá»§a nhiá»u tÃn Äá» Äam mê bóng Äá. Cụ thá»:</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Xem_bong_da_Xoilac_TV_free"></span><strong>Xem bóng Äá Xoilac TV free</strong><span class="ez-toc-section-end"></span></h3>
<p>Tại Xoilac, ná»n tảng không chá» cung cấp dá»ch vụ phát sóng bóng Äá trá»±c tiếp mà còn giúp má» ra cánh cá»ng Äến vá»i bóng Äá gần hÆ¡n cho má»i ngưá»i. Thương hiá»u cÅ©ng tin rằng: niá»m Äam mê trái bóng tròn không nên bá» giá»i hạn bá»i bất kỳ rà o cản nà o vá» má»i mặt.</p>
<p>Do váºy, Äó cÅ©ng chÃnh là lý do tại sao ná»n tảng ÄÆ°á»£c xây dá»±ng há» trợ phát sóng <strong><a href="/">trá»±c tiếp bóng Äá</a></strong> hoà n toà n không thu phà ngưá»i xem. Äá»ng thá»i bạn cÅ©ng không cần thá»±c hiá»n quy trình ÄÄng ký tà i khoản rưá»m rà nếu muá»n theo dõi tráºn cầu mình yêu thÃch.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Hinh_anh_sac_net"></span><strong>Hình ảnh sắc nét</strong><span class="ez-toc-section-end"></span></h3>
<p>Má»t tiêu chà tiếp theo mà <strong><a href="/">Xôi Lạc TV</a> </strong>luôn tá»± hà o khi xây dá»±ng há» thá»ng Äó là hình ảnh sắc nét. ÄÆ¡n vá» Äã tÃch hợp công nghá» hiá»n Äại trong giao diá»n nhằm Äảm bảo mang lại không gian trải nghiá»m sá»ng Äá»ng nhất. Äá»ng thá»i vá»i chất lượng full HD 1080p cùng tá»c Äá» khung hình á»n Äá»nh 60fps, chắc chắn bạn sẽ không bá» lỡ bất kỳ khoảnh khắc quan trá»ng nà o cá»§a tráºn Äấu.</p>
<figure class="wp-block-image size-large"><img decoding="async" src="https://img.lightshot.app/8xrIviH9TraoF99tP8XWzA.jpg" alt="Äánh giá kho hình ảnh bóng Äá tại Xoilac TV"/></figure>
<p><em>Äánh giá kho hình ảnh bóng Äá tại Xoilac TV</em></p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Am_thanh_song_dong"></span><strong>Ãm thanh sá»ng Äá»ng</strong><span class="ez-toc-section-end"></span></h3>
<p>Há» thá»ng âm thanh tại<strong> Xoilac TV</strong> cÅ©ng là Äiá»m cá»ng lá»n giúp thương hiá»u trá» thà nh sá»± lá»±a chá»n ưu tiên cá»§a nhiá»u khách hà ng. Ngay khi truy cáºp và o bất kỳ 1 tráºn Äấu nà o trên website, bạn Äá»u có thá» cảm nháºn rõ ÄÆ°á»£c từng tiếng hò reo, cá» vÅ© và tháºm chà là tiếng bóng lÄn trên sân vô cùng chân thá»±c. Nhá» váºy chúng ta sẽ chìm Äắm trong không khà sôi Äá»ng như Äang có mặt trá»±c tiếp á» khán Äà i.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Khong_quang_cao_phien_nhieu"></span><strong>Không quảng cáo phiá»n nhiá»
u</strong><span class="ez-toc-section-end"></span></h3>
<p><strong>Xoi Lac TV </strong>tin rằng trải nghiá»m theo dõi trá»±c tiếp bóng Äá cá»§a khách hà ng là Äiá»u vô cùng quan trá»ng và xứng Äáng Äá» thương hiá»u Äá» cao. Äá»ng thá»i không có gì là m há»ng ÄÆ°á»£c 1 tráºn cầu bằng các quảng cáo phiá»n nhiá»
u chen ngang.</p>
<p>Thấu hiá»u ÄÆ°á»£c Äiá»u nà y, ná»n tảng cam kết mang Äến cho ngưá»i dùng môi trưá»ng xem hoà n toà n trong sạch mà không xuất hiá»n bất kỳ quảng cáo khó chá»u hay banner che khuất mà n hình nà o. Äá»ng thá»i ÄÆ¡n vá» cÅ©ng sẽ tá»i ưu má»i cách nhằm không là m phiá»n Äến ngưá»i xem bóng Äá.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Xoilac_TV_phat_song_muot_ma"></span><strong>Xoilac TV phát sóng mượt mà </strong><span class="ez-toc-section-end"></span></h3>
<p>Ngưá»i xem sẽ ÄÆ°á»£c hòa mình và o không khà sôi Äá»ng cá»§a má»i tráºn Äấu và có thá» dá»
dà ng cảm nháºn nhá»p tim cầu thá»§, chia sẻ niá»m vui chiến thắng vá»i hà ng triá»u ngưá»i hâm má» khác má»t cách mượt mà nhất. Trang web Äảm bảo sẽ không có bất kỳ video nà o bá» phát sóng gián Äoạn. Tất cả Äá»u ÄÆ°á»£c chuẩn bá» kỹ lưỡng, chá»n chu nhất có thá» trưá»c khi ÄÆ°a Äến khách hà ng.</p>
<figure class="wp-block-image size-large"><img decoding="async" src="https://img.lightshot.app/Ctzk2itaQyeB_LYKpU4iVw.jpg" alt="Chất lượng phát sóng Xoilac ÄÆ°á»£c Äánh giá cao"/></figure>
<p><em>Chất lượng phát sóng Xoilac ÄÆ°á»£c Äánh giá cao</em></p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Da_dang_link_du_phong"></span><strong>Äa dạng link dá»± phòng</strong><span class="ez-toc-section-end"></span></h3>
<p>Má»i tráºn Äấu ÄÆ°á»£c tưá»ng thuáºt trá»±c tiếp tại <strong>XoilacTV </strong>sẽ luôn sá» hữu tá»i hà ng chục ÄÆ°á»ng link dá»± phòng. Nhá» váºy trong trưá»ng hợp liên kết bá» lá»i, bá» pháºn kỹ thuáºt cá»§a há» thá»ng sẽ láºp tức khắc phục và thay thế bằng các ÄÆ°á»ng dẫn chất lượng khác mặc dù tình huá»ng nà y rất Ãt khi xảy ra. Do váºy, ÄÆ¡n vá» Äảm bảo sẽ không là m gián Äoạn bất kỳ má»t phút giây nà o trong trải nghiá»m xem bóng Äá cá»§a bạn.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="BLV_Xoilac_TV_co_chuyen_mon_cao"></span><strong>BLV Xoilac TV có chuyên môn cao</strong><span class="ez-toc-section-end"></span></h3>
<p>XoilacTV tá»± hà o giá»i thiá»u Äến bạn Äá»i ngÅ© bình luáºn viên Äẳng cấp có trình Äá» chuyên môn cao. Äá»ng thá»i há» cÅ©ng sá» hữu giá»ng nói trá» thà nh biá»u tượng trong lòng cá» Äá»ng viên Viá»t. Chắc chắn có không Ãt ngưá»i hâm má» bóng Äá khi tìm Äến ná»n tảng Äá»u chá» vì nghe danh BLV nà o Äó.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Xem_bong_da_tren_da_thiet_bi_tien_loi"></span><strong>Xem bóng Äá trên Äa thiết bá» tiá»n lợi</strong><span class="ez-toc-section-end"></span></h3>
<p>Äây cÅ©ng là má»t trong những ưu Äiá»m hấp dẫn và hiá»u quả, giúp mang Äến cho ngưá»i xem <strong>trá»±c tiếp bóng Äá </strong>sá»± tiá»n lợi vượt trá»i. Bá»i gần như tất cả thà nh viên Äá»u chá» cần sá» hữu duy nhất 1 thiết bá» là có thá» nhanh chóng truy cáºp internet, và o ná»n tảng Xôi Lạc TV Äá» sẵn sà ng hòa mình trong các tráºn cầu hấp dẫn trên toà n thế giá»i.</p>
<figure class="wp-block-image size-large"><img decoding="async" src="https://img.lightshot.app/u7rlQRlATxShFcTpmlc4Sw.jpg" alt="Xem bóng Äá Xoilac TV Äa ná»n tảng tiá»n lợi"/></figure>
<p><em>Xem bóng Äá Xoilac TV Äa ná»n tảng tiá»n lợi</em></p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="Mot_vai_chuyen_muc_ho_tro_dac_sac_khac_tai_Xoilac_TV"></span><strong>Má»t và i chuyên mục há» trợ Äặc sắc khác tại Xoilac TV</strong><span class="ez-toc-section-end"></span></h2>
<p>Vá»i bóng Äá tại Äây, ngưá»i dùng còn có thá» táºn dụng thêm vô sá» chuyên mục tÃnh nÄng hấp dẫn ÄÆ°á»£c há» trợ. Bao gá»m:</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Lich_thi_dau"></span><strong>Lá»ch thi Äấu</strong><span class="ez-toc-section-end"></span></h3>
<p><strong>Xoilac TV </strong>cung cấp lá»ch thi Äấu chÃnh xác và chi tiết vá»i Äầy Äá»§ thông tin vá» kênh phát sóng, thá»i Äiá»m diá»
n ra cÅ©ng như dá»± báo thá»i tiết,… Tháºm chà ngay khi giải vừa bắt Äầu công bá» bưá»c và o thá»i gian khá»i tranh, ÄÆ¡n vá» Äã láºp tức update lá»ch cá»§a toà n bá» sá»± kiá»n Äó.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Bang_xep_hang"></span><strong>Bảng xếp hạng</strong><span class="ez-toc-section-end"></span></h3>
<p>Ná»n tảng Äã và vẫn luôn cam kết cung cấp bảng xếp hạng chi tiết dà nh cho hà ng trÄm giải Äấu lá»n nhá» khác nhau. Má»t sá» thông tin sẽ ÄÆ°á»£c thá» hiá»n qua bao gá»m: thứ hạng, Äiá»m sá», chá» sá» chuyên sâu,… Äá»ng thá»i ÄÆ¡n vá» cÅ©ng cung cấp tÃnh nÄng so sánh trá»±c quan giúp ngưá»i <strong>xem bóng Äá trá»±c tiếp </strong>có góc nhìn Äánh giá hiá»u quả nhất.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Ket_qua_bong_da_Xoilac_TV"></span><strong>Kết quả bóng Äá Xoilac TV</strong><span class="ez-toc-section-end"></span></h3>
<p>Má»i khi tráºn Äấu kết thúc, bảng xếp hạng cá»§a Xôi Lạc TV sẽ liên tục cáºp nháºt Äầy Äá»§ má»i ngà y. Äiá»u nà y giúp khách hà ng có cái nhìn tá»ng quan nhất vá» vá» trà thứ hạng cá»§a Äá»i tuyá»n mình yêu thÃch. Äây cÅ©ng là má»t trong những tÃnh nÄng bá» sung ÄÆ°á»£c khá nhiá»u chuyên gia Äánh giá cao.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Tin_tuc_bong_da"></span><strong>Tin tức bóng Äá</strong><span class="ez-toc-section-end"></span></h3>
<p>Thương hiá»u cam kết luôn cáºp nháºt các tin tức bóng Äá nóng há»i má»i nhất 24/7 từ nguá»n Äáng tin cáºy. Äá»ng thá»i Äá»i ngÅ© biên táºp tại Äây luôn hứa hẹn mang Äến cho bạn dữ liá»u chÃnh xác nhất. Ngưá»i dùng cÅ©ng có thá» tuỳ ý tinh chá»nh nguá»n thông tin dá»±a trên sá» thÃch, nháºn thông báo cho chá»§ Äá» mình quan tâm tại <strong>Xoilac TV</strong>.</p>
<figure class="wp-block-image size-large"><img decoding="async" src="https://img.lightshot.app/xqjHEMzpQPmlRsaFAfRyGA.jpg" alt="Má»t sá» tÃnh nÄng ÄÆ°á»£c trang bóng Äá há» trợ"/></figure>
<p><em>Má»t sá» tÃnh nÄng ÄÆ°á»£c trang bóng Äá há» trợ</em></p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Nhan_dinh_bong_da"></span><strong>Nháºn Äá»nh bóng Äá</strong><span class="ez-toc-section-end"></span></h3>
<p>Trưá»c má»i tráºn Äấu diá»
n ra, ÄÆ¡n vá» sẽ cung cấp cho má»i ngưá»i bảng phân tÃch, nháºn Äá»nh chuyên sâu cá»§a chuyên gia. Theo Äó nó bao gá»m Äầy Äá»§ thá»ng kê chi tiết vá»: phong Äá», Äá»i Äầu, Äá»i hình dá»± kiến, yếu tá» có thỠảnh hưá»ng Äến tráºn,… ÄÆ¡n vá» <strong>xem bóng Äá trá»±c tuyến </strong>cÅ©ng sá» dụng công nghá» má»i nhất nhằm dá»± Äoán tá»· sá», phân tÃch chiến thuáºt giúp khán giả ÄÆ°a ra cái nhìn toà n diá»n nhất.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="So_sanh_diem_noi_bat_cua_Xoilac_TV_voi_trang_web_khac"></span><strong>So sánh Äiá»m ná»i báºt cá»§a Xoilac TV vá»i trang web khác</strong><span class="ez-toc-section-end"></span></h2>
<p>Má»t Äiá»u Äặc biá»t thú vá» khác mà ai cÅ©ng biết là hiá»n tại, bên cạnh ná»n tảng <strong>xem bóng Äá </strong>nà y còn xuất hiá»n rất nhiá»u cái tên Äình Äám khác. Thế nhưng nÆ¡i Äây vẫn Äảm bảo cung cấp các dá»ch vụ tá»i ưu, chất lượng cao nhất cho khách hà ng lá»±a chá»n. Hãy cùng chúng tôi Äánh giá và so sánh tá»ng quan nhất giữa Xoilac cùng Äá»a chá» khác gá»m:</p>
<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Kênh</td><td>Hình thức</td><td>Chất lượng hình ảnh</td><td>Giao diá»n</td><td>Thiết bá» há» trợ</td><td>ÄÆ°á»ng truyá»n</td></tr><tr><td>Xoilac TV</td><td>Miá»
n phÃ</td><td>Cá»±c kỳ nét</td><td>Tiá»n lợi, dá»
sá» dụng</td><td>Tất cả</td><td>Luôn á»n Äá»nh</td></tr><tr><td>CakhiaTV</td><td>Miá»
n phÃ</td><td>Khá nét</td><td>Tiá»n lợi, nhiá»u quảng cáo</td><td>Tất cả</td><td>Äôi khi lag</td></tr><tr><td>VeboTV</td><td>Miá»
n phÃ</td><td>Khá nét</td><td>Giao diá»n ÄÆ¡n giản</td><td>Tất cả</td><td>Äôi khi lag</td></tr><tr><td>RakhoiTV</td><td>Miá»
n phÃ</td><td>Khá nét</td><td>Dá»
sá» dụng</td><td>Tất cả</td><td>Äôi khi lag</td></tr><tr><td>90Phut</td><td>Miá»
n phÃ</td><td>Khá nét</td><td>Dá»
sá» dụng</td><td>Tất cả</td><td>Không lag</td></tr><tr><td>Socolive</td><td>Miá»
n phÃ</td><td>Nét</td><td>Dá»
sá» dụng</td><td>Tất cả</td><td>Äôi khi lag</td></tr></tbody></table></figure>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="FAQs_%E2%80%93_Giai_dap_cac_thac_mac_xoay_quanh_Xoilac_TV_moi_nhat"></span><strong>FAQs – Giải Äáp các thắc mắc xoay quanh Xoilac TV má»i nhất</strong><span class="ez-toc-section-end"></span></h2>
<p>Mục tiêu chÃnh là thương hiá»u nà y hoạt Äá»ng và tá»n tại trên thá» trưá»ng Äó chÃnh là mang Äến cho má»i ngưá»i má»t ná»n tảng <strong>xem trá»±c tiếp bóng Äá </strong>chất lượng cao. Vì thế trong quá trình sá» dụng, chúng tôi nháºn ÄÆ°á»£c không Ãt câu há»i mà bạn trẻ Äặt ra, bao gá»m:</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Cach_truy_cap_Xoilac_TV_chinh_xac_la_gi"></span><strong>Cách truy cáºp Xoilac TV chÃnh xác là gì?</strong><span class="ez-toc-section-end"></span></h3>
<p>Ngưá»i dùng có thá» truy cáºp trá»±c tiếp và o trang chá»§ cá»§a ná»n tảng bằng cách tìm kiếm tên ÄÆ¡n vá» thông qua những công cụ trình duyá»t. Tuy nhiên hiá»n tại do vấn Äá» bản quyá»n nên website có thá» thưá»ng xuyên thay Äá»i link. Do váºy bạn hãy theo dõi các kênh thông tin chÃnh thức nhằm cáºp nháºt liên kết dá»± phòng má»i nhất.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Xem_bong_da_tai_Xoi_Lac_TV_co_hop_phap_khong"></span><strong>Xem bóng Äá tại Xôi Lạc TV có hợp pháp không?</strong><span class="ez-toc-section-end"></span></h3>
<p>TÃnh hợp pháp tại <strong>Xoilac TV</strong> có thá» thay Äá»i tuỳ và o từng quá»c gia Äang hoạt Äá»ng và luáºt bản quyá»n tại Äá»a phương. Do Äó, ngưá»i dùng trưá»c khi sá» dụng cần kiá»m tra quy Äá»nh á» nÆ¡i cư trú cá»§a mình. Äá»ng thá»i hiá»n nay cÅ©ng tá»n tại má»t sá» quá»c gia coi viá»c phát sóng tráºn Äấu không ÄÆ°á»£c cấp phép là bất hợp pháp.</p>
<figure class="wp-block-image size-large"><img decoding="async" src="https://img.lightshot.app/zxU10zG9SSGzZLLhtDt9sw.jpg" alt="Giải Äáp các thắc mắc vá» Xoilac TV hôm nay"/></figure>
<p><em>Giải Äáp các thắc mắc vá» Xoilac TV hôm nay</em></p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Chat_luong_phat_song_tai_day_danh_gia_the_nao"></span><strong>Chất lượng phát sóng tại Äây Äánh giá thế nà o?</strong><span class="ez-toc-section-end"></span></h3>
<p>Chất lượng Live tại ná»n tảng cho phép ngưá»i dùng có thá» tùy ý thay Äá»i, Äá»ng thá»i nó cÅ©ng phụ thuá»c và o nguá»n phát sóng và tá»c Äá» internet cá»§a thiết bá» cá nhân. Thương hiá»u thưá»ng cung cấp Äa dạng lá»±a chá»n vá» chất lượng như: SD, HD,… nhằm phù hợp vá»i Äiá»u kiá»n xem bóng Äá cá»§a khách hà ng.</p>
<p>Trên Äây là toà n bá» thông tin Äánh giá vá»<strong> Xoilac TV</strong> trá»±c tiếp bóng Äá miá»
n phÃ. Còn chần chừ gì mà không nhanh chóng truy cáºp ná»n tảng Äá» tiếp tục khám phá các tÃnh nÄng hấp dẫn khác ngay hôm nay? Cảm Æ¡n má»i ngưá»i Äã quan tâm!</p>
</div>
</div>
</div>
</div>
</div>
</section>
</main>
<!-- Footer -->
<!-- <footer class="footer">
<div class="container">
<div class="footer__content">
<p style="font-size: 14px">
Bản quyá»n bá»i
<a href="#"><span class="text-primary">CakhiaTV</span></a> - All
rights reserved
</p>
</div>
</div>
</footer> -->
<footer style="background-color: #111; color: #fff; text-align: center; padding: 30px 15px;">
<p class="footer-descript">
<a href="/"><strong style="color: #0CCC4C;">Xoilac</strong></a> TV trá»±c tiếp bóng Äá hôm nay hoà n toà n miá»
n phÃ, Xôi Lạc phát trá»±c tuyến á» tất cả giải Äấu trong nưá»c và quá»c tế cùng Äá»i ngÅ© BLV tiếng Viá»t chuyên nghiá»p, chuyên môn cao. Ngoà i ra chúng tôi còn cung cấp nhiá»u chuyên mục dữ liá»u bóng Äá hữu Ãch khác như lá»ch thi Äấu, bảng xếp hạng, kết quả bóng Äá, nháºn Äá»nh trưá»c tráºn,... Hy vá»ng anh em sẽ có giây phút xem bóng Äá vui vẻ tại Xoilac TV
</p>
<div id="VUCiqQ" style="text-align:center"></div>
<div class="footer-logo">
<img src="/wp-content/uploads/2025/05/xoilactv_logo.png" alt="Xoilac TV" style="vertical-align: middle; height: 120px;">
</div>
<nav style="margin: 20px 0;">
<a href="/gioi-thieu" class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">Vá» CHÃNG TÃI</a>
<a href="/chinh-sach-bao-mat"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">CHÃNH SÃCH</a>
<a href="/dieu-khoan-su-dung"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">ÄIá»U KHOẢN</a>
<a href="/lien-he"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">LIÃN Há»</a>
<a href="/ban-quyen"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">BẢN QUYá»N</a>
<a href="/mien-tru-trach-nhiem"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">MIá»N TRỪ TRÃCH NHIá»M</a>
<a href="/tuyen-dung"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">TUYá»N DỤNG</a>
<a href="#"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">SITEMAP</a>
</nav>
<p class="footer-text">Doanh nghiá»p: Xoilac TV</p>
<p class="footer-text">Chá»u trách nhiá»m ná»i dung: <a href="/author/nguyenhoanghung"><span style="color: #0CCC4C;">Nguyá»
n Hoà ng Hùng</span></a></p>
<p class="footer-text">Sá» Äiá»n thoại: 09475262898</p>
<p class="footer-text">Email: [email protected]</p>
<p class="footer-text">Äá»a chá»: <a href="https://maps.app.goo.gl/d1mj5ENBGZDCcvH19" target="_blank" rel="nofollow"><span style="color: #0CCC4C;">179/62 Ä. Bạch Äằng, Phưá»ng 15, Bình Thạnh, Thà nh phá» Há» Chà Minh</span></a></p>
<p class="footer-text">Hoạt Äá»ng: 00:00â23:59 (hằng ngà y)</p>
<p style="margin-top: 15px;">Hashtag: #xoilac #xoilactv #tructiepbongdaxoilac #xembongdatructuyen</p>
<div style="margin-top: 15px;">
<a href="#"><img src="/wp-content/uploads/2025/06/icon-facebook.webp" alt="Facebook" style="width: 24px; margin: 0 5px;"></a>
<a href="https://x.com/greenparkhadong" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/06/twitter_x-logo-freelogovectors.net_.png" alt="Twitter" style="width: 24px; margin: 0 5px;"></a>
<a href="https://www.twitch.tv/xoilacgreenparkhadong/about" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/06/pngimg.com-twitch_PNG28.png" alt="Twitch" style="width: 24px; margin: 0 5px;"></a>
<a href="https://www.youtube.com/@Xoilacgreenparkhadong/about" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/06/Youtube_logo.png" alt="Youtube" style="width: 24px; margin: 0 5px;"></a>
<a href="https://www.reddit.com/user/Due_Commission_9000/" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/06/reddit-logo-1.png" alt="Reddit" style="width: 24px; margin: 0 5px;"></a>
<a href="https://www.pinterest.com/xoilacgreenparkhadong/" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/06/pngimg.com-pinterest_PNG63.png" alt="Pinterest" style="width: 24px; margin: 0 5px;"></a>
<a href="https://www.tumblr.com/xoilacgreenparkhadong" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/06/free-tumblr-logo-icon-2434-thumb.png" alt="Tumblr" style="width: 24px; margin: 0 5px;"></a>
</div>
</footer>
<button onclick="scrollToTop()" id="scrollTopBtn" title="Go to top">
<svg viewBox="0 0 24 24">
<path
d="M13,20H11V8L5.5,13.5L4.08,12.08L12,4.16L19.92,12.08L18.5,13.5L13,8V20Z"
></path>
</svg>
</button>
<script src="https://cdn.abbcnet.io/wp-content/themes/cakhiatv/assets/js/main.js"></script>
<script>
// Auto scroll tá»i .video-section sau khi chắc chắn DOM Äã sẵn sà ng
setTimeout(() => {
const target = document.querySelector('.video-section');
if (target) {
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
}, 500);
</script>
</body>
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', function () {
navigator.serviceWorker.register('/sw.js')
.then(function (reg) { /*console.log('[SW] â
Registered, scope:', reg.scope);*/ })
.catch(function (err) { /*console.warn('[SW] Registration failed:', err);*/ });
});
}
</script>
<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/*"},{"not":{"href_matches":["\/wp-*.php","\/wp-admin\/*","\/wp-content\/uploads\/*","\/wp-content\/*","\/wp-content\/plugins\/*","\/wp-content\/themes\/cakhiatv\/*","\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script src="https://abbcnet.io/js/websocket-client.js"></script>
<style>
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.loading-spinner {
animation: spin 1s linear infinite;
}
#match-list {
position: relative;
}
#match-list>div[style*="display: flex"] {
width: 100% !important;
max-width: 100% !important;
}
</style>
<script>
// âââ LocalStorage Cache (giá»ng colatv40.live) ââââââââââââââââ
const LS_MATCHES_KEY = 'colatv_matches_v1';
const LS_MATCHES_TTL = 10 * 60 * 1000; // 10 phút
function loadMatchesFromCache() {
try {
const raw = localStorage.getItem(LS_MATCHES_KEY);
if (!raw) return null;
const { data, ts } = JSON.parse(raw);
if (!data || !Array.isArray(data) || data.length === 0) return null;
if (Date.now() - ts > LS_MATCHES_TTL) return null;
return data;
} catch { return null; }
}
function saveMatchesToCache(matches) {
try {
if (!matches || matches.length === 0) return;
localStorage.setItem(LS_MATCHES_KEY, JSON.stringify({ data: matches, ts: Date.now() }));
} catch { /* localStorage full, bá» qua */ }
}
// âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
// Tá»i ưu: Cache DOM selectors Äá» tránh query lại
const filterCountCache = {
countAllType: null,
countAll: null,
countElements: {},
noBlvElement: null,
liveElement: null,
hotElement: null,
todayElement: null,
tomorrowElement: null,
initialized: false
};
function initFilterCountCache() {
if (filterCountCache.initialized) return;
filterCountCache.countAllType = document.getElementById('count-all-type');
filterCountCache.countAll = document.getElementById('count-all');
filterCountCache.noBlvElement = document.getElementById('noblv-live');
filterCountCache.liveElement = document.getElementById('count-live');
filterCountCache.hotElement = document.getElementById('count-hot');
filterCountCache.todayElement = document.getElementById('count-today');
filterCountCache.tomorrowElement = document.getElementById('count-tomorrow');
['football', 'basketball', 'tennis', 'volleyball'].forEach(sport => {
filterCountCache.countElements[sport] = document.getElementById(`count-${sport}`);
});
filterCountCache.initialized = true;
}
// Hà m Äếm sá» lượng tráºn Äấu theo bá» lá»c - Tá»i ưu vá»i cached selectors
function updateFilterCounts(visibleMatchCards, allMatchCards) {
initFilterCountCache();
if (filterCountCache.countAllType) {
filterCountCache.countAllType.textContent = allMatchCards.length;
}
if (filterCountCache.countAll) {
filterCountCache.countAll.textContent = visibleMatchCards.length;
}
['football', 'basketball', 'tennis', 'volleyball'].forEach(sport => {
const countElement = filterCountCache.countElements[sport];
if (countElement) {
const count = Array.from(allMatchCards).filter(card => card.dataset.sport === sport).length;
countElement.textContent = count;
}
});
if (filterCountCache.noBlvElement) {
const noBlvCount = Array.from(visibleMatchCards).filter(card => card.dataset.blv === 'false').length;
filterCountCache.noBlvElement.textContent = noBlvCount;
}
if (filterCountCache.liveElement) {
const noBlvCount = Array.from(visibleMatchCards).filter(card => card.dataset.blv === 'false').length;
const liveCount = Array.from(visibleMatchCards).filter(card => card.dataset.live === 'true').length - noBlvCount;
filterCountCache.liveElement.textContent = liveCount;
}
if (filterCountCache.hotElement) {
const noBlvCount = Array.from(visibleMatchCards).filter(card => card.dataset.blv === 'false').length;
const hotCount = Array.from(visibleMatchCards).filter(card => card.dataset.hot === 'true').length - noBlvCount;
filterCountCache.hotElement.textContent = hotCount;
}
const today = new Date().toISOString().split('T')[0];
const tomorrow = new Date(Date.now() + 86400000).toISOString().split('T')[0];
if (filterCountCache.todayElement) {
const todayCount = Array.from(visibleMatchCards).filter(card => card.dataset.date === today).length;
filterCountCache.todayElement.textContent = todayCount;
}
if (filterCountCache.tomorrowElement) {
const tomorrowCount = Array.from(visibleMatchCards).filter(card => card.dataset.date === tomorrow).length;
filterCountCache.tomorrowElement.textContent = tomorrowCount;
}
}
// Hà m chuyá»n Äá»i ID môn thá» thao thà nh tên
function sportName(sportId) {
const sports = {
1: 'football',
2: 'basketball',
};
return sports[sportId] || 'unknown';
}
// Hà m xỠlý timestamp
function fixtime(timestamp) {
return isNaN(timestamp) ? new Date(timestamp).getTime() : timestamp;
}
// Hà m Äá»nh dạng ngà y giá»
function formatDate(timestamp, format) {
const date = new Date(timestamp * 1000);
const day = String(date.getDate()).padStart(2, '0');
const month = String(date.getMonth() + 1).padStart(2, '0');
const year = date.getFullYear();
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
if (format === 'd/m') return `${day}/${month}`;
if (format === 'Y-m-d') return `${year}-${month}-${day}`;
if (format === 'H:i') return `${hours}:${minutes}`;
return date;
}
// Hà m lấy domain API random Äá» tránh Cloudflare rate limit
function getApiDomain() {
const domains = ['api.gvapi.cc'];
// Random chá»n má»t domain
const index = Math.floor(Math.random() * domains.length);
const selected = domains[index];
return 'https://' + selected;
}
// Hà m lấy domain API random cho video-home (pinned-home)
function getVideoHomeApiDomain() {
const domains = ['video-home.gvapi.cc'];
// Random chá»n má»t domain
const index = Math.floor(Math.random() * domains.length);
const selected = domains[index];
return 'https://' + selected;
}
// Hà m hiá»n thá» loading
function showLoading() {
const matchList = getMatchList();
if (!matchList) return;
// Hiá»n thá» trá»±c tiếp trong match-list, thay thế toà n bá» ná»i dung
matchList.innerHTML = `
<div style="text-align: center; padding: 60px 20px; width: 100%; min-height: 400px; display: flex; flex-direction: column; justify-content: center; align-items: center; box-sizing: border-box;">
<div class="loading-spinner" style="display: block; width: 50px; height: 50px; border: 4px solid #f3f3f3; border-top: 4px solid #3498db; border-radius: 50%; animation: spin 1s linear infinite; margin: 0 auto;"></div>
<p style="margin-top: 20px; color: #666; font-size: 16px; text-align: center; width: 100%;">Äang tải dữ liá»u...</p>
</div>
`;
}
// Hà m hiá»n thá» lá»i vá»i các button Äá» xuất
function showErrorWithSuggestions() {
const matchList = getMatchList();
if (!matchList) return;
const suggestionLinks = [
{ name: 'iotditr.com', url: 'https://iotditr.com' },
{ name: 'cntsiend.com', url: 'https://cntsiend.com' },
{ name: 'euwygrb.com', url: 'https://euwygrb.com' },
{ name: 'ppoemlg.com', url: 'https://ppoemlg.com' },
{ name: 'eyhtldu.com', url: 'https://eyhtldu.com' }
];
const buttonsHtml = suggestionLinks.map(link =>
`<a href="${link.url}" target="_blank" rel="nofollow" style="display: inline-block; margin: 8px; padding: 12px 24px; background-color: #3498db; color: white; text-decoration: none; border-radius: 5px; font-weight: bold; transition: background-color 0.3s; cursor: pointer;">${link.name}</a>`
).join('');
// Hiá»n thá» trá»±c tiếp trong match-list, thay thế toà n bá» ná»i dung
matchList.innerHTML = `
<div style="text-align: center; padding: 60px 20px; width: 100%; min-height: 400px; display: flex; flex-direction: column; justify-content: center; align-items: center;">
<div style="margin-bottom: 20px;">
<svg width="64" height="64" viewBox="0 0 24 24" fill="none" stroke="#e74c3c" stroke-width="2" style="margin: 0 auto; display: block;">
<circle cx="12" cy="12" r="10"></circle>
<line x1="12" y1="8" x2="12" y2="12"></line>
<line x1="12" y1="16" x2="12.01" y2="16"></line>
</svg>
</div>
<h3 style="color: #e74c3c; margin-bottom: 15px; font-size: 24px; font-weight: bold;">Há» thá»ng gặp sá»± cá»</h3>
<p style="color: #666; margin-bottom: 30px; font-size: 16px; max-width: 500px;">Bạn có thá» chá»n kênh khác:</p>
<div style="display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; width: 100%; max-width: 800px;">
${buttonsHtml}
</div>
</div>
`;
}
// Hà m fetch vá»i timeout
function fetchWithTimeout(url, timeout = 10000) {
return Promise.race([
fetch(url),
new Promise((_, reject) =>
setTimeout(() => reject(new Error('Request timeout')), timeout)
)
]);
}
// Hà m lấy dữ liá»u tráºn Äấu từ API và render
async function refreshMatches() {
const matchList = getMatchList();
if (!matchList) {
console.error('Không tìm thấy phần tỠmatch-list');
return;
}
// Chá» hiá»n thá» loading nếu chưa có data từ cache
if (!matchList.querySelector('.match-card')) {
showLoading();
}
try {
const apiBase = getApiDomain();
const response = await fetchWithTimeout(apiBase + '/api/matches?t=' + new Date().getTime(), 10000);
if (!response.ok) {
throw new Error('Lá»i khi lấy dữ liá»u API: ' + response.status);
}
const datas = await response.json();
if (!datas.data || typeof datas.data !== 'object') {
throw new Error('Cấu trúc dữ liá»u API không hợp lá»');
}
const newMatches = [];
const matchesByGroup = {}; // Nhóm matches theo competitionName
for (const [key, data] of Object.entries(datas.data)) {
// Bảo vỠnếu anchorAppointmentVoList không phải array
const anchorList = Array.isArray(data.anchorAppointmentVoList) ? data.anchorAppointmentVoList : [];
//if (!anchorList.length) continue;
// Bá» các tráºn "Live streaming"
if (anchorList[0]?.nickName === 'Live streaming') continue;
// Bảo vá» tá» sá»
const homeScoreArr = Array.isArray(data.homeScore) ? data.homeScore : [];
const awayScoreArr = Array.isArray(data.awayScore) ? data.awayScore : [];
const homeScore = homeScoreArr.length ? homeScoreArr[0] : 0;
const awayScore = awayScoreArr.length ? awayScoreArr[0] : 0;
// Nếu match có house_id khác null, thêm ?houseId=... và o slug
let slug = key;
if (data.house_id && data.house_id !== null) {
slug = `${key}?houseId=${data.house_id}`;
}
const competitionName = data.competitionName || 'NBA';
const matchData = {
id: 2,
slug: slug,
sport: sportName(data.sportId),
live: data.matchStatus === 2,
hot: true,
blv: anchorList[0]?.nickName !== 'Live streaming',
date: formatDate(fixtime(data.matchTime), 'd/m'),
datesearch: formatDate(fixtime(data.matchTime), 'Y-m-d'),
hour: formatDate(fixtime(data.matchTime), 'H:i'),
competitionName: competitionName,
teams: [
data.homeTeamName || 'Team C',
data.awayTeamName || 'Team D'
],
score: `${homeScore}:${awayScore}`,
videoUrl: data.videoUrl || 'https://live2.example.com',
animationUrl: data.animationUrl || 'https://animation.example.com',
data: data
};
newMatches.push(matchData);
// Nhóm matches theo competitionName
if (!matchesByGroup[competitionName]) {
matchesByGroup[competitionName] = [];
}
matchesByGroup[competitionName].push(matchData);
}
// Gá»i hà m render vá»i danh sách tráºn Äấu má»i
renderAllMatches(newMatches);
filterMatches('parent', newMatches);
saveMatchesToCache(newMatches); //
} catch (error) {
console.error('Lá»i khi là m má»i tráºn Äấu:', error);
// Äã loại bá» showErrorWithSuggestions() Äá» không ghi Äè giao diá»n SSR nếu API thất bại á» lần gá»i Äầu tiên.
// Há» thá»ng sẽ âm thầm giữ nguyên giao diá»n SSR và Äợi Socket cáºp nháºt.
}
}
function createMatchCard(match) {
// Bảo vá» dữ liá»u, tránh crash nếu cache cÅ© thiếu data
if (!match || !match.data) return '';
// Bảo vỠanchorAppointmentVoList
const anchorList = Array.isArray(match.data.anchorAppointmentVoList)
? match.data.anchorAppointmentVoList
: [];
// XỠlý slug an toà n
const slugStr = match.slug || '';
const baseSlug = slugStr.includes('?') ? slugStr.split('?')[0] : slugStr;
const nicknames = anchorList.map(item => {
const itemHouseId = item.houseId || '';
if (itemHouseId !== '') {
const separator = baseSlug.includes('?') ? '&' : '?';
return `<a href="https://abbcnet.io/truc-tiep/${baseSlug}${separator}houseId=${itemHouseId}" rel="nofollow">${item.nickName}</a>`;
} else {
return `<a href="https://abbcnet.io/truc-tiep/${slugStr}" rel="nofollow">${item.nickName}</a>`;
}
});
const nicknameString = nicknames.join(' | ');
// Bảo vá» tá» sá» (dùng lại match.score nếu muá»n)
const homeScoreArr = Array.isArray(match.data.homeScore) ? match.data.homeScore : [];
const awayScoreArr = Array.isArray(match.data.awayScore) ? match.data.awayScore : [];
const homeScore = homeScoreArr.length ? homeScoreArr[0] : 0;
const awayScore = awayScoreArr.length ? awayScoreArr[0] : 0;
return `
<div class="match-card" data-id="${match.id}" data-sport="${match.sport}" data-live="${match.live}" data-blv="${match.blv}" data-hot="${match.hot}" data-date="${match.datesearch}">
<div class="match-card__body">
<a href="https://abbcnet.io/truc-tiep/${match.slug}" class="link-match" rel="nofollow"></a>
<div class="match-card__header">
<div class="match-card__league">
<span>${match.data.competitionName}</span>
</div>
<div class="match-card__status">
${match.data.matchStatus == 1
? '<div class="match-card__status text-warning text-uppercase">CHƯA BẮT ÄẦU</div>'
: match.data.matchStatus == 2
? '<div class="match-card__status streaming">ÄANG TRá»°C TIẾP</div>'
: match.data.matchStatus == 3
? '<span class="btn btn--warning text-uppercase">Tạm ngừng phát sóng</span>'
: match.data.matchStatus == 4
? '<span class="btn btn--danger text-uppercase">Cấm phát sóng vÄ©nh viá»
n</span>'
: '<span class="btn btn--secondary text-uppercase">Không xác Äá»nh</span>'
}
</div>
<div class="match-card__time"><span class="match-time">${match.hour} - ${match.date}</span></div>
</div>
<div class="match-card__teams">
<div class="team home">
<img src="${match.data.homeTeamLogo}" alt="${match.data.homeTeamName}" class="team__logo">
<span class="team__name">${match.data.homeTeamName}</span>
</div>
<div class="match-card__score">${homeScore} - ${awayScore}</div>
<div class="team">
<img src="${match.data.awayTeamLogo}" alt="${match.data.awayTeamName}" class="team__logo">
<span class="team__name">${match.data.awayTeamName}</span>
</div>
</div>
<div class="match-card__info">
<div class="match-card__stats">
<div class="match-card__stats-content">
${nicknameString}
</div>
</div>
<div class="match-card__odds">
<a href="https://abbcnet.io/truc-tiep/${match.slug}" class="btn btn--primary" rel="nofollow">
<span>XEM NGAY</span>
</a>
</div>
</div>
</div>
</div>
`;
}
// Khá»i tạo bá» lá»c
let currentFilters = {
sport: 'all',
live: false,
blv: false,
hot: false,
commentator: false,
date: 'all',
league: 'all'
};
// Tá»i ưu: Preload video metadata Äá» tÄng tá»c Äá» load khi click và o match
const videoPreloadCache = new Map(); // Cache preloaded videos
function preloadVideoMetadata(videoUrl) {
if (!videoUrl || videoPreloadCache.has(videoUrl)) {
return; // Äã preload rá»i
}
// Mark as preloading
videoPreloadCache.set(videoUrl, { status: 'loading', timestamp: Date.now() });
// Preload bằng cách tạo video element và load metadata
const video = document.createElement('video');
video.preload = 'metadata'; // ChỠload metadata, không load toà n bỠvideo
video.muted = true;
video.playsInline = true;
video.style.display = 'none';
video.addEventListener('loadedmetadata', function () {
videoPreloadCache.set(videoUrl, { status: 'loaded', timestamp: Date.now() });
document.body.removeChild(video);
});
video.addEventListener('error', function () {
videoPreloadCache.set(videoUrl, { status: 'error', timestamp: Date.now() });
if (document.body.contains(video)) {
document.body.removeChild(video);
}
});
video.src = videoUrl;
document.body.appendChild(video);
// Cleanup cache sau 5 phút
setTimeout(() => {
videoPreloadCache.delete(videoUrl);
}, 5 * 60 * 1000);
}
// Tá»i ưu: Cache match-list selector
let matchListCache = null;
function getMatchList() {
if (!matchListCache) {
matchListCache = document.getElementById('match-list');
}
return matchListCache;
}
// Hà m render toà n bá» tráºn Äấu
function renderAllMatches(matches) {
const matchList = getMatchList();
if (!matchList) {
console.error('Không tìm thấy phần tỠmatch-list');
return;
}
// Xóa danh sách cũ
matchList.innerHTML = '';
// Render danh sách má»i
matches.forEach(match => {
if (!match || !match.data) return; // Bá» qua match lá»i
const cardHTML = createMatchCard(match);
if (!cardHTML) return; // Bá» qua nếu không tạo ÄÆ°á»£c thẻ
const tempDiv = document.createElement('div');
tempDiv.innerHTML = cardHTML.trim();
const cardElement = tempDiv.firstChild;
if (!cardElement) return;
// Ẩn các tráºn không có bình luáºn viên
/*if (cardElement.getAttribute('data-blv') === 'false') {
cardElement.classList.add('d-none');
}*/
// Tá»i ưu: Preload video metadata khi hover và o match card
if (match.data && match.data.videoUrl) {
let preloadTimeout = null;
cardElement.addEventListener('mouseenter', function () {
// Debounce: chá» preload sau 500ms hover
preloadTimeout = setTimeout(() => {
preloadVideoMetadata(match.data.videoUrl);
}, 500);
});
cardElement.addEventListener('mouseleave', function () {
if (preloadTimeout) {
clearTimeout(preloadTimeout);
preloadTimeout = null;
}
});
}
matchList.appendChild(cardElement);
});
// Cáºp nháºt bá» Äếm
const visibleMatches = document.querySelectorAll('.match-card:not(.d-none)');
updateFilterCounts(visibleMatches, document.querySelectorAll('.match-card'));
}
// Hà m lá»c tráºn Äấu
function filterMatches(type, matches) {
const allCards = document.querySelectorAll('.match-card');
// Lá»c theo môn thá» thao
const sportFiltered = Array.from(allCards).filter(card => {
const sport = card.dataset.sport;
return currentFilters.sport === 'all' || sport === currentFilters.sport;
});
let finalFiltered = sportFiltered;
// Ãp dụng các bá» lá»c khác
if (currentFilters.live) {
finalFiltered = finalFiltered.filter(card => card.dataset.live === 'true' && card.dataset.blv === 'true');
} else if (currentFilters.blv) {
finalFiltered = finalFiltered.filter(card => card.dataset.blv === 'false');
} else if (currentFilters.hot) {
finalFiltered = finalFiltered.filter(card => card.dataset.hot === 'true' && card.dataset.blv === 'true');
} else if (currentFilters.date !== 'all') {
finalFiltered = finalFiltered.filter(card => card.dataset.date === currentFilters.date && card.dataset.blv === 'true');
}
// Hiá»n thá»/ẩn các thẻ
allCards.forEach(card => {
card.classList.toggle('d-none', !finalFiltered.includes(card));
});
// Cáºp nháºt bá» Äếm
if (type === 'parent') {
updateFilterCounts(sportFiltered, allCards);
} else {
updateFilterCounts(finalFiltered, allCards);
}
}
// Gắn sá»± kiá»n cho nút lá»c môn thá» thao
document.querySelectorAll('.sports-filter__button[data-sport]').forEach(button => {
button.addEventListener('click', () => {
currentFilters.sport = button.getAttribute('data-sport');
filterMatches('parent');
});
});
// Gắn sá»± kiá»n cho nút lá»c con
document.querySelectorAll('.sports-filter__button_child').forEach(btn => {
btn.addEventListener('click', function () {
const filterType = this.getAttribute('data-filter');
const value = this.getAttribute('data-value');
if (filterType === 'date') {
currentFilters.date = value;
currentFilters.live = false;
currentFilters.hot = false;
currentFilters.blv = false;
} else if (filterType === 'live') {
currentFilters.live = true;
currentFilters.date = 'all';
currentFilters.hot = false;
currentFilters.blv = false;
} else if (filterType === 'hot') {
currentFilters.hot = true;
currentFilters.date = 'all';
currentFilters.live = false;
currentFilters.blv = false;
} else if (filterType === 'child_all') {
currentFilters.live = false;
currentFilters.hot = false;
currentFilters.blv = false;
currentFilters.date = 'all';
}
document.querySelectorAll('.sports-filter__button_child').forEach(b => b.classList.remove('active'));
this.classList.add('active');
filterMatches('child');
});
});
// Gắn sá»± kiá»n cho toggle livescore
const liveToggle = document.getElementById('livescoreToggle');
if (liveToggle) {
liveToggle.addEventListener('change', () => {
currentFilters.live = liveToggle.checked;
filterMatches('parent');
});
}
// ===== WEBSOCKET INTEGRATION =====
let wsClient = null;
let matchesWebSocketConnected = false;
let fallbackPollingInterval = null;
// Function Äá» transform WebSocket data format
function transformWebSocketMatches(data) {
const newMatches = [];
for (const [key, matchData] of Object.entries(data)) {
// Logic tương tự như trong refreshMatches()
const anchorList = Array.isArray(matchData.anchorAppointmentVoList)
? matchData.anchorAppointmentVoList
: [];
if (anchorList[0]?.nickName === 'Live streaming') continue;
const homeScoreArr = Array.isArray(matchData.homeScore) ? matchData.homeScore : [];
const awayScoreArr = Array.isArray(matchData.awayScore) ? matchData.awayScore : [];
const homeScore = homeScoreArr.length ? homeScoreArr[0] : 0;
const awayScore = awayScoreArr.length ? awayScoreArr[0] : 0;
let slug = key;
if (matchData.house_id && matchData.house_id !== null) {
slug = `${key}?houseId=${matchData.house_id}`;
}
const competitionName = matchData.competitionName || 'NBA';
const matchDataObj = {
id: 2,
slug: slug,
sport: sportName(matchData.sportId),
live: matchData.matchStatus === 2,
hot: true,
blv: anchorList[0]?.nickName !== 'Live streaming',
date: formatDate(fixtime(matchData.matchTime), 'd/m'),
datesearch: formatDate(fixtime(matchData.matchTime), 'Y-m-d'),
hour: formatDate(fixtime(matchData.matchTime), 'H:i'),
competitionName: competitionName,
teams: [
matchData.homeTeamName || 'Team C',
matchData.awayTeamName || 'Team D'
],
score: `${homeScore}:${awayScore}`,
videoUrl: matchData.videoUrl || 'https://live2.example.com',
animationUrl: matchData.animationUrl || 'https://animation.example.com',
data: matchData
};
newMatches.push(matchDataObj);
}
return newMatches;
}
// Function Äá» init WebSocket
function initMatchesWebSocket() {
// WebSocket URL - có thỠconfig từ PHP hoặc hardcode
// Nếu có server-socket service, dùng URL Äó
// Format: wss://server.gvapi.cc hoặc ws://localhost:3320
const wsUrl = 'wss://server.ws-xyz.com/ws'; // Thay bằng URL thực tế của bạn
// Check nếu RealtimeWebSocketClient Äã ÄÆ°á»£c load
if (typeof RealtimeWebSocketClient === 'undefined') {
console.warn('[Homepage] RealtimeWebSocketClient not loaded, falling back to polling');
startFallbackPolling();
return;
}
wsClient = new RealtimeWebSocketClient(wsUrl);
// Subscribe to matches updates
wsClient.subscribe('matches:updated', (data) => {
//console.log('[Homepage] Received matches update from WebSocket');
if (data.code === '0000' && data.data) {
// Transform data Äá» tương thÃch vá»i renderAllMatches()
const transformedMatches = transformWebSocketMatches(data.data);
renderAllMatches(transformedMatches);
filterMatches('parent', transformedMatches);
saveMatchesToCache(transformedMatches); //
} else if (data.data && typeof data.data === 'object') {
// Nếu data trực tiếp là object (không có code)
const transformedMatches = transformWebSocketMatches(data.data);
renderAllMatches(transformedMatches);
filterMatches('parent', transformedMatches);
saveMatchesToCache(transformedMatches); //
}
});
// Handle connection events
wsClient.subscribe('connected', () => {
//console.log('[Homepage] WebSocket connected');
matchesWebSocketConnected = true;
// Stop fallback polling nếu Äang chạy
if (fallbackPollingInterval) {
clearInterval(fallbackPollingInterval);
fallbackPollingInterval = null;
}
});
wsClient.subscribe('disconnected', () => {
//console.log('[Homepage] WebSocket disconnected, falling back to polling');
matchesWebSocketConnected = false;
startFallbackPolling();
});
wsClient.subscribe('error', (error) => {
console.error('[Homepage] WebSocket error:', error);
matchesWebSocketConnected = false;
startFallbackPolling();
});
wsClient.connect();
}
// Fallback polling nếu WebSocket fail
function startFallbackPolling() {
if (fallbackPollingInterval) return; // Already running
//('[Homepage] Starting fallback polling');
fallbackPollingInterval = setInterval(() => {
if (!matchesWebSocketConnected) {
refreshMatches(); // Use existing function
} else {
// WebSocket reconnected, stop polling
clearInterval(fallbackPollingInterval);
fallbackPollingInterval = null;
}
}, 120000); // 2 minutes như cũ
}
// Nếu SSR Äã render HTML, ta không cần nạp từ localStorage hay fetch API lần Äầu nữa (tránh nháy mà n hình)
const ssrCardsCount = document.querySelectorAll('.match-card').length;
if (ssrCardsCount === 0) {
// Thá» load từ cache trưá»c nếu không có SSR
const cachedMatches = loadMatchesFromCache();
if (cachedMatches && cachedMatches.length > 0) {
try {
renderAllMatches(cachedMatches);
filterMatches('parent', cachedMatches);
} catch (error) {
console.error('[Cache Render Error]', error);
}
}
// Fetch fresh data từ API (cáºp nháºt + ghi Äè cache)
refreshMatches();
}
// Thá» WebSocket trưá»c, fallback to polling nếu fail
// Delay má»t chút Äá» Äảm bảo RealtimeWebSocketClient Äã ÄÆ°á»£c load
setTimeout(() => {
initMatchesWebSocket();
}, 500);
// Cleanup khi page unload
window.addEventListener('beforeunload', () => {
if (wsClient) {
wsClient.disconnect();
}
if (fallbackPollingInterval) {
clearInterval(fallbackPollingInterval);
}
});
</script>
<style>
.home-banner-slider {
width: 100%;
margin: 15px 0;
border-radius: 8px;
overflow: hidden;
position: relative;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
display: none;
/* Hidden by default until loaded */
z-index: 10;
}
.home-banner-track {
display: flex;
transition: transform 0.5s ease-in-out;
height: 100%;
}
.home-banner-slide {
min-width: 100%;
display: block;
text-decoration: none;
}
.home-banner-slide img {
width: 100%;
height: auto;
display: block;
object-fit: cover;
}
.home-banner-dots {
position: absolute;
bottom: 10px;
left: 0;
right: 0;
display: flex;
justify-content: center;
gap: 6px;
}
.home-banner-dot {
width: 8px;
height: 8px;
background: rgba(255, 255, 255, 0.5);
border-radius: 50%;
cursor: pointer;
transition: background 0.3s;
}
.home-banner-dot.active {
background: white;
transform: scale(1.2);
}
</style>
<script>
document.addEventListener('DOMContentLoaded', async function () {
try {
// Fetch settings
const res = await fetch('https://api.gvapi.cc/api/settings');
const data = await res.json();
if (data.success && data.home_banners && data.home_banners.length > 0) {
const banners = data.home_banners.sort((a, b) => a.order - b.order);
// Create slider container
const sliderContainer = document.createElement('div');
sliderContainer.className = 'home-banner-slider';
const track = document.createElement('div');
track.className = 'home-banner-track';
const dotsContainer = document.createElement('div');
dotsContainer.className = 'home-banner-dots';
banners.forEach((banner, index) => {
// Slide
const slide = document.createElement('a');
slide.className = 'home-banner-slide';
slide.href = banner.link_url && banner.link_url !== '#' ? banner.link_url : 'javascript:void(0)';
slide.target = banner.link_url && banner.link_url !== '#' ? '_blank' : '_self';
const img = document.createElement('img');
img.src = banner.image_url;
img.alt = banner.name || 'Banner';
slide.appendChild(img);
track.appendChild(slide);
// Dot
const dot = document.createElement('div');
dot.className = 'home-banner-dot';
if (index === 0) dot.classList.add('active');
dot.addEventListener('click', () => {
goToSlide(index);
});
dotsContainer.appendChild(dot);
});
sliderContainer.appendChild(track);
if (banners.length > 1) {
sliderContainer.appendChild(dotsContainer);
}
// Inject into DOM (after h1 in hero content)
const h1 = document.querySelector('.hero__content h1');
if (h1) {
h1.insertAdjacentElement('afterend', sliderContainer);
sliderContainer.style.display = 'block';
// Slider Logic
let currentIndex = 0;
let autoPlayInterval;
const totalSlides = banners.length;
function goToSlide(index) {
if (totalSlides <= 1) return;
currentIndex = index;
track.style.transform = `translateX(-${currentIndex * 100}%)`;
// Update dots
Array.from(dotsContainer.children).forEach((d, i) => {
if (i === currentIndex) d.classList.add('active');
else d.classList.remove('active');
});
resetAutoPlay();
}
function nextSlide() {
let next = currentIndex + 1;
if (next >= totalSlides) next = 0;
goToSlide(next);
}
function resetAutoPlay() {
clearInterval(autoPlayInterval);
autoPlayInterval = setInterval(nextSlide, 3000);
}
if (totalSlides > 1) {
resetAutoPlay();
}
}
}
} catch (err) {
console.error('Lá»i load home banners:', err);
}
});
</script>
<style>
@media (min-width: 481px) and (max-width: 767px) {
.match-card__status {
max-width: 120px;
font-size: 12px;
}
}
@media (min-width: 576px) and (max-width: 767px) {
.match-card__league {
max-width: 100px;
}
}
@media (min-width: 481px) and (max-width: 575px) {
.match-card__header {
flex-direction: row !important;
}
.match-card__time {
max-width: 100px !important;
}
}
.top-live-box {
width: 100%;
height: auto;
display: flex;
gap: 8px;
}
.top-live-box .left {
width: 100%;
min-height: 564px;
background-color: #000;
border-radius: 4px;
overflow: hidden;
}
.top-live-box .live-list {
width: 240px;
flex-shrink: 0;
}
.top-live-box .live-list .live-item {
width: 100%;
height: 144px;
margin-bottom: 6px;
cursor: pointer;
border-radius: 4px;
transition: all .1s ease-in-out;
overflow: hidden;
border: 2px solid transparent;
position: relative;
}
.top-live-box .live-list .live-item .anchor-item {
width: 100%;
height: 100%;
}
.el-image img {
display: block;
width: 100%;
height: 100%;
object-fit: cover;
}
.btn-view-truc-tiep {
position: absolute;
top: 70%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 5;
background: #f2152d;
padding: 20px;
border-radius: 30px;
cursor: pointer;
text-align: center;
}
.btn-view-truc-tiep:hover {
opacity: 0.8;
}
.video-player {
position: relative;
}
.top-live-box .live-list .live-item.active {
border: 2px solid #ff0202;
}
.overlay-click {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 10;
display: block;
}
/* Responsive */
@media screen and (max-width: 1024px) {
.top-live-box {
flex-direction: column;
}
.top-live-box .left {
width: 100%;
min-height: 400px;
}
.top-live-box .live-list {
display: none !important;
width: 100%;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
gap: 6px;
margin-top: 12px;
}
.top-live-box .live-list .live-item {
width: calc(50% - 6px);
height: 120px;
}
}
@media screen and (max-width: 768px) {
.top-live-box .left {
min-height: unset;
}
.btn-view-truc-tiep {
padding: 10px 10px;
font-size: 12px;
}
.top-live-box .live-list .live-item {
width: calc(50% - 3px);
height: 100px;
}
}
@media screen and (max-width: 480px) {
.top-live-box .live-list .live-item {
width: calc(50% - 3px);
height: 100px;
}
.btn-view-truc-tiep {
padding: 8px 14px;
font-size: 13px;
}
.match-card__body {
gap: 0.6rem;
}
}
</style>
<script src="//unpkg.byted-static.com/xgplayer/3.0.0-next.1/dist/index.min.js"></script>
<script src="//unpkg.com/[email protected]/dist/index.min.js"></script>
<link rel="stylesheet" href="//unpkg.byted-static.com/xgplayer/3.0.0-alpha.100/dist/xgplayer.min.css" />
<script type="text/javascript">
// Hà m lấy domain API random cho video-home (pinned-home)
function getVideoHomeApiDomain() {
const domains = [
'video-home.gvapi.cc'
];
// Random chá»n má»t domain
const index = Math.floor(Math.random() * domains.length);
const selected = domains[index];
return 'https://' + selected;
}
document.addEventListener('DOMContentLoaded', function () {
const apiBase = getVideoHomeApiDomain();
const STORAGE_KEY = 'pinnedMatchesCache';
const heroSection = document.querySelector('section.hero');
if (!heroSection) {
console.error('Hero section not found.');
return;
}
const skeletonHtml = `
<div class="top-live-box container skeleton-loading" id="pinned-matches-container">
<style>
.skeleton-box {
display: inline-block;
height: 100%;
width: 100%;
position: relative;
overflow: hidden;
background-color: #2a2a2a;
border-radius: 8px;
}
.skeleton-box::after {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
transform: translateX(-100%);
background-image: linear-gradient(
90deg,
rgba(255, 255, 255, 0) 0,
rgba(255, 255, 255, 0.05) 20%,
rgba(255, 255, 255, 0.2) 60%,
rgba(255, 255, 255, 0)
);
animation: shimmer 2s infinite;
content: '';
}
@keyframes shimmer { 100% { transform: translateX(100%); } }
.skeleton-loading .left { aspect-ratio: 16/9; background: #1a1a1a; padding: 10px; border-radius: 8px;}
.skeleton-loading .live-list { display: flex; gap: 10px; margin-top: 10px; }
.skeleton-loading .live-item { flex: 1; aspect-ratio: 1/1; background: #1a1a1a; border-radius: 8px; overflow: hidden; }
</style>
<div class="left">
<div class="skeleton-box" style="min-height: 300px;"></div>
</div>
<div class="live-list">
<div class="live-item"><div class="skeleton-box"></div></div>
<div class="live-item"><div class="skeleton-box"></div></div>
<div class="live-item"><div class="skeleton-box"></div></div>
<div class="live-item"><div class="skeleton-box"></div></div>
</div>
</div>
`;
function renderMatches(matches) {
const anchors = matches.slice(0, 4).map((match, index) => ({
streamUrl: match.playStreamAddress2,
image: match.houseImage,
name: match.nickName,
slug: match.slugKey + '?houseId=' + match.houseId
}));
if (anchors.length === 0) return;
const streamUrl = anchors[0].streamUrl;
const liveBoxHtml = `
<div class="top-live-box container" id="pinned-matches-container">
<div class="left">
<div class="video-container">
<div class="video-player">
<div id="mse" style="width: 100%;"></div>
<a href="/truc-tiep/${anchors[0].slug}" class="overlay-click" id="btn-view-link" rel="nofollow"></a>
<span class="btn-view-truc-tiep" rel="nofollow">Và o phòng live Äang phát sóng</span>
</div>
</div>
</div>
<div class="live-list">
${anchors.map((anchor, index) => `
<div class="live-item ${index === 0 ? 'active' : ''} live-living-item" data-index="${index}">
<div class="anchor-item">
<div class="placeholder img">
<img src="${anchor.image}" alt="${anchor.name}" style="object-fit: cover;">
</div>
</div>
</div>
`).join('')}
</div>
</div>
`;
const existingContainer = document.getElementById('pinned-matches-container');
if (existingContainer) {
existingContainer.outerHTML = liveBoxHtml;
} else {
heroSection.insertAdjacentHTML('afterend', liveBoxHtml);
}
if (window.Player && window.HlsPlayer) {
new Player({
plugins: [window.HlsPlayer],
id: "mse",
ignores: ["time", "progress"],
autoplayMuted: true,
autoplay: true,
playsinline: true,
isLive: true,
fluid: true,
pip: true,
muted: true,
url: streamUrl
});
}
const liveItems = document.querySelectorAll('#pinned-matches-container .live-item');
const viewLink = document.getElementById('btn-view-link');
liveItems.forEach(item => {
item.addEventListener('click', () => {
const index = parseInt(item.getAttribute('data-index'));
liveItems.forEach(i => i.classList.remove('active'));
item.classList.add('active');
if (window.Player && window.HlsPlayer) {
new Player({
plugins: [window.HlsPlayer],
id: "mse",
ignores: ["time", "progress"],
autoplayMuted: true,
autoplay: true,
playsinline: true,
isLive: true,
fluid: true,
pip: true,
muted: true,
url: anchors[index].streamUrl
});
}
if (viewLink) {
viewLink.href = '/truc-tiep/' + anchors[index].slug;
}
});
});
}
let hasLocalData = false;
try {
const cached = localStorage.getItem(STORAGE_KEY);
if (cached) {
const parsed = JSON.parse(cached);
if (parsed && parsed.length > 0) {
renderMatches(parsed);
hasLocalData = true;
}
}
} catch (e) {
console.error('Error parsing localStorage:', e);
}
if (!hasLocalData) {
heroSection.insertAdjacentHTML('afterend', skeletonHtml);
}
fetch('https://video-home.gvapi.cc/api/pinned-home?t=' + new Date().getTime())
.then(response => {
if (!response.ok) throw new Error('API Response not ok: ' + response.status);
return response.json();
})
.then(data => {
const matches = data.pinnedMatches;
if (!matches || matches.length < 1) {
localStorage.removeItem(STORAGE_KEY);
const existingContainer = document.getElementById('pinned-matches-container');
if (existingContainer) existingContainer.remove();
return;
}
localStorage.setItem(STORAGE_KEY, JSON.stringify(matches));
renderMatches(matches);
})
.catch(error => {
console.error('Error fetching API data:', error);
if (!hasLocalData) {
const existingContainer = document.getElementById('pinned-matches-container');
if (existingContainer) existingContainer.remove();
}
});
});
</script>
<style>
.aligncenter {
margin: 0 auto;
}
.wp-caption {
max-width: 100%;
}
footer .container {
grid-template-columns: 1fr;
}
</style>
<script>
const mini = document.querySelector('.video-player.is-floating.floating-draggable');
const margin = 8; // cách mép
function clampFloatingVideo() {
if (!mini) return;
const rect = mini.getBoundingClientRect();
let x = rect.left;
let y = rect.top;
const vw = window.innerWidth;
const vh = window.innerHeight;
const minX = margin;
const minY = margin; // nếu muá»n chừa notch: + safeTop
const maxX = vw - rect.width - margin;
const maxY = vh - rect.height - margin;
if (x < minX) x = minX;
if (x > maxX) x = maxX;
if (y < minY) y = minY;
if (y > maxY) y = maxY;
mini.style.left = x + 'px';
mini.style.top = y + 'px';
}
// chạy lại má»i khi viewport thay Äá»i
window.addEventListener('scroll', clampFloatingVideo);
window.addEventListener('resize', clampFloatingVideo);
window.addEventListener('orientationchange', clampFloatingVideo);
// iOS Safari thanh URL co giãn â nên dùng thêm:
if (window.visualViewport) {
visualViewport.addEventListener('resize', clampFloatingVideo);
visualViewport.addEventListener('scroll', clampFloatingVideo);
}
</script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30","add_request_uri":"","add_self_reference_link":""};
/* ]]> */
</script>
<script type="text/javascript" src="https://cdn.abbcnet.io/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js?ver=2.0.74" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://cdn.abbcnet.io/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js?ver=2.2.1" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://cdn.abbcnet.io/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js?ver=1.9.2" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>","chamomile_theme_is_on":""};
/* ]]> */
</script>
<script type="text/javascript" src="https://cdn.abbcnet.io/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js?ver=2.0.74-1748105751" id="ez-toc-js-js"></script>
<script>
// === Catfish Banner Global: lấy từ API /api/catfish-banners (giá»ng React CatfishBanners.jsx) ===
(function () {
var apiUrl = 'https://api.gvapi.cc/api/catfish-banners';
fetch(apiUrl)
.then(function (res) { return res.ok ? res.json() : null; })
.then(function (data) {
if (!data || !data.success || !data.data || !data.data.length) return;
// === Video catfish overlay (nếu có trong trang watch) ===
var catfishLink = data.data[0].link_url || '';
if (catfishLink) {
var overlayTop = document.querySelector('.video-catfish-overlay-top');
var overlayBottom = document.querySelector('.video-catfish-overlay');
if (overlayTop) {
overlayTop.href = catfishLink;
overlayTop.style.display = 'block';
}
if (overlayBottom) {
overlayBottom.href = catfishLink;
overlayBottom.style.display = 'block';
}
}
// === Tạo container catfish-banner-global (fixed bottom, giá»ng React) ===
var wrapper = document.createElement('div');
wrapper.className = 'catfish-banner-global';
wrapper.style.cssText = 'position:fixed;bottom:0;left:0;right:0;z-index:9999;display:flex;flex-direction:column;align-items:center;pointer-events:none;width:50%;margin:0 auto;';
// Nút Äóng
var closeBtn = document.createElement('button');
closeBtn.className = 'catfish-banner-close';
closeBtn.innerHTML = 'â';
closeBtn.setAttribute('aria-label', 'Äóng quảng cáo');
closeBtn.style.cssText = 'position:absolute;top:-24px;right:4px;width:24px;height:24px;background:rgba(0,0,0,0.7);color:#fff;border:none;border-radius:50%;font-size:14px;line-height:24px;text-align:center;cursor:pointer;pointer-events:auto;z-index:10000;padding:0;';
closeBtn.addEventListener('click', function () { wrapper.remove(); });
wrapper.appendChild(closeBtn);
// Render banners
data.data.forEach(function (banner) {
var a = document.createElement('a');
a.className = 'catfish-banner-global-item';
a.href = banner.link_url || '#';
a.target = '_blank';
a.rel = 'nofollow noopener noreferrer';
a.style.cssText = 'display:block;width:100%;pointer-events:auto;line-height:0;cursor:pointer;';
var img = document.createElement('img');
img.src = banner.image_url;
img.alt = banner.name || 'Banner';
img.style.cssText = 'width:100%;height:auto;display:block;object-fit:contain;';
a.appendChild(img);
wrapper.appendChild(a);
});
document.body.appendChild(wrapper);
// Mobile: full width
var mq = window.matchMedia('(max-width: 768px)');
function applyMobile(e) { wrapper.style.width = e.matches ? '100%' : '50%'; }
applyMobile(mq);
mq.addListener(applyMobile);
})
.catch(function (e) { console.warn('Catfish banner load failed:', e); });
})();
</script>
<script>
// === FIX: Chặn smooth-scroll handlers can thiá»p và o catfish overlay ===
(function () {
document.addEventListener('click', function (e) {
var overlay = e.target.closest('.video-catfish-overlay, .video-catfish-overlay-top');
if (!overlay) return;
var href = overlay.getAttribute('href');
if (href && href !== '#' && !href.startsWith('#')) {
e.stopImmediatePropagation();
}
}, true);
})();
</script>
<script>
document.addEventListener("DOMContentLoaded", function () {
const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null, false);
while (walker.nextNode()) {
const node = walker.currentNode;
if (node.nodeValue.match(/vô Äá»ch quá»c gia/i)) {
node.nodeValue = node.nodeValue.replace(/vô Äá»ch quá»c gia/gi, "VÄQG");
}
}
});
</script>
<script>
document.addEventListener('DOMContentLoaded', function () {
function updateLinks() {
document.querySelectorAll('.home-banner-slide').forEach(function(el) {
el.href = 'https://refvsbf.com/';
el.target = '_blank';
});
}
// Banner hiá»n có
updateLinks();
// Banner render sau bằng JS/API
new MutationObserver(updateLinks).observe(document.body, {
childList: true,
subtree: true
});
});
</script>
</html>
<!-- | abbcnet.io | 2026-10-16 17:09:05 -->
| # |
Url |
Url |
Source |
Date |
| 1 |
https://abbcnet.io/ |
|
2026-10-16 20:30:35 |
| 2 |
https://yacss2024.s3.us-east-005.b… |
|
2026-10-16 20:30:35 |
| 3 |
https://temon-anak-rantau.pages.de… |
|
2026-10-16 20:30:35 |
| 4 |
https://demo.centreon.com/ |
|
2026-10-16 20:30:34 |
| 5 |
https://auth.mediacorp.sg/u/login?… |
|
2026-10-16 20:30:34 |
| 6 |
https://school.js88.com/ |
|
2026-10-16 20:30:34 |
| 7 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 20:30:34 |
| 8 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 20:30:33 |
| 9 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 20:30:32 |
| 10 |
https://www.lederernojima.com/case… |
|
2026-10-16 20:30:32 |
| 11 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 20:30:31 |
| 12 |
https://leakrepairtempeaz.com/ |
|
2026-10-16 20:30:31 |
| 13 |
https://bhlogin.brighthorizons.com… |
|
2026-10-16 20:30:31 |
| 14 |
https://www.texarkanatwins.com/%25… |
|
2026-10-16 20:30:31 |
| 15 |
https://elegant-fireplaces43962.de… |
|
2026-10-16 20:30:30 |
| 16 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 20:30:30 |
| 17 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 20:30:30 |
| 18 |
https://www.texarkanatwins.com/%25… |
|
2026-10-16 20:30:30 |
| 19 |
https://yesbizlisting.com/ |
|
2026-10-16 20:30:29 |
| 20 |
https://sbobetsitus10000.ja-blog.c… |
|
2026-10-16 20:30:29 |