1<!DOCTYPE html> 2<html lang="vi"> 3 4<head> 5 <meta charset="UTF-8" /> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 <link rel="preconnect" href="https://fonts.googleapis.com" /> 8 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> 9 <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet" /> 10 <link rel="stylesheet" href="/wp-content/themes/cakhiatv/style.css" /> 11 <meta name="google-site-verification" content="N4PHm8858vvS25ZaozakiBR8Rqy-cmJpCdu8VHCbLRQ" /> 12<meta name="google-site-verification" content="aZEowe-ibxNxKD09Gs1mSbrQ7Lc83SSXderlpnwvDCE" /> 13<meta name="google-site-verification" content="xZ47nKKCrBO5dAJUU7-o9jLaP0PsFrI9zlgm-odcJOU" /> 14<meta name="google-site-verification" content="Zy4loSo9PLVU1TsNjBfuqVm8SqsiF5qtYoy0LlS-5oI" /> 15<meta name="google-site-verification" content="t3dflyBr7raYAR-vsb_bRbrip94gKM-2V3a3FWHfNc4" /> 16<meta name="google-site-verification" content="KGxk3PXsTaGy9SiO1hcr3ma1OfueAusFMexB4hiBe_Y" /> 17<meta name="google-site-verification" content="qg1L9hymWrNWdhFzphpFQSmYwRkht-XfLQw
175dDRW17E" /> 18<meta name="google-site-verification" content="hefNkr9RbURzgVGAiv4hmP7ZtR80bIqdWDa8TrlsGsA" /> 19<meta name="google-site-verification" content="hEC36AuDDZoWtXwBr6wzeDifmWN99ZmvTMhz6-Xvj88" /> 20<!-- Google tag (tá»ng) -->
vendor: 65 bytes, lines 20-21
20 21<script async src="https://www.googletagmanager.com/gtag/js?id=
21G-V8GXMSME5N
vendor: 13 bytes, line 21
21"></script>
22<script> 23
vendor: 138 bytes, lines 23-27
23window.dataLayer = window.dataLayer || []; 24 function gtag(){dataLayer.push(arguments);} 25 gtag('js', new Date()); 26 27 gtag('config', '
27G-V8GXMSME5N
vendor: 5 bytes, line 27
27');
28</script>
28 29
29<script type="application/ld+json"> 30{ 31 "@context": "https://schema.org", 32 "@type": "BreadcrumbList", 33 "itemListElement": [ 34 35 { 36 "@type": "ListItem", 37 "position": 1, 38 "name": "Trang chá»§", 39 "item": "https://www.automarkhistory.com" 40 }, 41 42 { 43 "@type": "ListItem", 44 "position": 1, 45 "name": "Saoketv Link chÃnh thức", 46 "item": "https://www.automarkhistory.com/tin-tuc" 47 } 48 49 50 ] 51} 52</script>
52 53 <style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style> 54 55<!-- Tá»i ưu hóa công cụ tìm kiếm bá»i Rank Math PRO - https://rankmath.com/ --> 56<title>Saoketv - Trang xem trá»±c tiếp bóng Äá rõ nét, á»n Äá»nh 24/7</title> 57<meta name="description" content="Saoketv trang xem trá»±c tiếp bóng Äá miá» n phÃ, chất lượng Full HD, tá»c Äá» cao, không giáºt lag. Cáºp nháºt link xem bóng Äá hôm nay nhanh nhất, Äầy Äá»§ các giải Äấu."/> 58<meta name="robots" content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"/> 59<link rel="canonical" href="https://www.automarkhistory.com/" /> 60<meta property="og:locale" content="vi_VN" /> 61<meta property="og:type" content="website" /> 62<meta property="og:title" content="Saoketv - Trang xem trá»±c tiếp bóng Äá rõ nét, á»n Äá»nh 24/7" /> 63<meta property="og:description" content="Saoketv trang xem trá»±c tiếp bóng Äá miá» n phÃ, chất lượng Full HD, tá»c Äá» cao, không giáºt lag. Cáºp nháºt link xem bóng Äá hôm nay nhanh nhất, Äầy Äá»§ các giải Äấu." /> 64<meta property="og:url" content="https://www.automarkhistory.com/" /> 65<meta property="og:site_name" content="Saoketv" /> 66<meta property="og:updated_time" content="2026-02-06T23:39:49+07:00" /> 67<meta property="og:image" content="https://cdn.automarkhistory.com/wp-content/uploads/2025/12/bi-quyet-khien-saoketv-tro-thanh-trang-xem-bong-da-duoc-ua-chuong-1.jpg" /> 68<meta property="og:image:secure_url" content="https://cdn.automarkhistory.com/wp-content/uploads/2025/12/bi-quyet-khien-saoketv-tro-thanh-trang-xem-bong-da-duoc-ua-chuong-1.jpg" /> 69<meta property="og:image:width" content="800" /> 70<meta property="og:image:height" content="400" /> 71<meta property="og:image:alt" content="Saoketv" /> 72<meta property="og:image:type" content="image/jpeg" /> 73<meta property="article:published_time" content="2025-09-08T14:05:35+07:00" /> 74<meta property="article:modified_time" content="2026-02-06T23:39:49+07:00" /> 75<meta name="twitter:card" content="summary_large_image" /> 76<meta name="twitter:title" content="Saoketv - Trang xem trá»±c tiếp bóng Äá rõ nét, á»n Äá»nh 24/7" /> 77<meta name="twitter:description" content="Saoketv trang xem trá»±c tiếp bóng Äá miá» n phÃ, chất lượng Full HD, tá»c Äá» cao, không giáºt lag. Cáºp nháºt link xem bóng Äá hôm nay nhanh nhất, Äầy Äá»§ các giải Äấu." /> 78<meta name="twitter:image" content="https://cdn.automarkhistory.com/wp-content/uploads/2025/12/bi-quyet-khien-saoketv-tro-thanh-trang-xem-bong-da-duoc-ua-chuong-1.jpg" /> 79<meta name="twitter:label1" content="ÄÆ°á»£c viết bá»i" /> 80<meta name="twitter:data1" content="Admin" /> 81<meta name="twitter:label2" content="Thá»i gian Äá» Äá»c" /> 82<meta name="twitter:data2" content="25 phút" />
83<script type="application/ld+json" class="rank-math-schema-pro">{"@context":"https://schema.org","@graph":[{"@type":["Organization","Person"],"@id":"https://www.automarkhistory.com/#person","name":"Saoketv","url":"https://gameswebstore.com/"},{"@type":"WebSite","@id":"https://www.automarkhistory.com/#website","url":"https://www.automarkhistory.com","name":"Saoketv","publisher":{"@id":"https://www.automarkhistory.com/#person"},"inLanguage":"vi","potentialAction":{"@type":"SearchAction","target":"https://www.automarkhistory.com/?s={search_term_string}","query-input":"required name=search_term_string"}},{"@type":"ImageObject","@id":"https://cdn.automarkhistory.com/wp-content/uploads/2025/12/bi-quyet-khien-saoketv-tro-thanh-trang-xem-bong-da-duoc-ua-chuong-1.jpg","url":"https://cdn.automarkhistory.com/wp-content/uploads/2025/12/bi-quyet-khien-saoketv-tro-thanh-trang-xem-bong-da-duoc-ua-chuong-1.jpg","width":"800","height":"400","inLanguage":"vi"},{"@type":"WebPage","@id":"https://www.automarkhistory.com/#webpage","url":"https://www.automarkhistory.com/","name":"Saoketv - Trang xem tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1 r\u00f5 n\u00e9t, \u1ed5n \u0111\u1ecbnh 24/7","datePublished":"2025-09-08T14:05:35+07:00","dateModified":"2026-02-06T23:39:49+07:00","about":{"@id":"https://www.automarkhistory.com/#person"},"isPartOf":{"@id":"https://www.automarkhistory.com/#website"},"primaryImageOfPage":{"@id":"https://cdn.automarkhistory.com/wp-content/uploads/2025/12/bi-quyet-khien-saoketv-tro-thanh-trang-xem-bong-da-duoc-ua-chuong-1.jpg"},"inLanguage":"vi"},{"@type":"Person","@id":"https://www.automarkhistory.com/tac-gia/seo/","name":"Admin","url":"https://www.automarkhistory.com/tac-gia/seo/","image":{"@type":"ImageObject","@id":"https://secure.gravatar.com/avatar/ad61670926c47f2b732ffa3d7bcfeea37e9afab93cf5d1aaf83df66abc167a69?s=96&d=mm&r=g","url":"https://secure.gravatar.com/avatar/ad61670926c47f2b732ffa3d7bcfeea37e9afab93cf5d1aaf83df66abc167a69?s=96&d=mm&r=g","caption":"Admin","inLanguage":"vi"}},{"@type":"Article","headline":"Saoketv - Trang xem tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1 r\u00f5 n\u00e9t, \u1ed5n \u0111\u1ecbnh 24/7","keywords":"Saoketv","datePublished":"2025-09-08T14:05:35+07:00","dateModified":"2026-02-06T23:39:49+07:00","author":{"@id":"https://www.automarkhistory.com/tac-gia/seo/","name":"Admin"},"publisher":{"@id":"https://www.automarkhistory.com/#person"},"description":"Saoketv trang xem tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1 mi\u1ec5n ph\u00ed, ch\u1ea5t l\u01b0\u1ee3ng Full HD, t\u1ed1c \u0111\u1ed9 cao, kh\u00f4ng gi\u1eadt lag. C\u1eadp nh\u1eadt link xem b\u00f3ng \u0111\u00e1 h\u00f4m nay nhanh nh\u1ea5t, \u0111\u1ea7y \u0111\u1ee7 c\u00e1c gi\u1ea3i \u0111\u1ea5u.","name":"Saoketv - Trang xem tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1 r\u00f5 n\u00e9t, \u1ed5n \u0111\u1ecbnh 24/7","@id":"https://www.automarkhistory.com/#richSnippet","isPartOf":{"@id":"https://www.automarkhistory.com/#webpage"},"image":{"@id":"https://cdn.automarkhistory.com/wp-content/uploads/2025/12/bi-quyet-khien-saoketv-tro-thanh-trang-xem-bong-da-duoc-ua-chuong-1.jpg"},"inLanguage":"vi","mainEntityOfPage":{"@id":"https://www.automarkhistory.com/#webpage"}}]}</script>
83 84<meta name="google-site-verification" content="4V4Nk-aJkfRfz9xHiiWq9Cj2cICQbA4wuFeycxj_QOs" /> 85<!-- /Plugin SEO WordPress Rank Math --> 86 87<link rel='dns-prefetch' href='//cdn.automarkhistory.com' />
88<script type="text/javascript"> 89/* <![CDATA[ */ 90window._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.automarkhistory.com\/wp-content\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.8.1"}}; 91/*! This file is auto-generated */ 92!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); 93/* ]]> */ 94</script>
94 95<style id='wp-emoji-styles-inline-css' type='text/css'> 96 97 img.wp-smiley, img.emoji { 98 display: inline !important; 99 border: none !important; 100 box-shadow: none !important; 101 height: 1em !important; 102 width: 1em !important; 103 margin: 0 0.07em !important; 104 vertical-align: -0.1em !important; 105 background: none !important; 106 padding: 0 !important; 107 } 108</style> 109<link rel='stylesheet' id='wp-block-library-css' href='https://cdn.automarkhistory.com/wp-content/wp-includes/css/dist/block-library/style.min.css?ver=6.8.1' type='text/css' media='all' /> 110<style id='classic-theme-styles-inline-css' type='text/css'> 111/*! This file is auto-generated */ 112.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} 113</style> 114<style id='global-styles-inline-css' type='text/css'> 115: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%);
115--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;}
115.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;} 116:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;} 117:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;} 118:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;} 119</style> 120<link rel='stylesheet' id='main-style-css' href='https://cdn.automarkhistory.com/wp-content/themes/cakhiatv/style.css?ver=1770998152' type='text/css' media='all' /> 121<link rel="https://api.w.org/" href="https://www.automarkhistory.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://www.automarkhistory.com/wp-json/wp/v2/pages/1040" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.automarkhistory.com/xmlrpc.php?rsd" /> 122<meta name="generator" content="WordPress 6.8.1" /> 123<link rel='shortlink' href='https://www.automarkhistory.com/' /> 124<link rel="alternate" title="oNhúng (JSON)" type="application/json+oembed" href="https://www.automarkhistory.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.automarkhistory.com%2F" /> 125<link rel="alternate" title="oNhúng (XML)" type="text/xml+oembed" href="https://www.automarkhistory.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.automarkhistory.com%2F&format=xml" /> 126 <style> 127 .chat-message .cw-message-content{ 128 color: #fff; 129 } 130 @media (min-width: 1024px) { 131 h1 { 132 font-size: 1.5em !important; 133 } 134 } 135 136 .match-teams-score { 137 display: flex !important; 138 } 139 140 @media (max-width: 767px) { 141 .xgplayer .xg-inner-controls { 142 height: 60px !important; 143 } 144 .header .logo img{ 145 height: 35px; 146 } 147 } 148 149 @media (min-width: 481px) and (max-width: 767px) { 150 div#chat_messages { 151 max-height: 60vh !important; 152 } 153 } 154 </style> 155 <style> 156 .match-section { 157 min-height: 100%; 158 } 159 160 .match-card__status { 161 position: absolute; 162 top: 13%; 163 left: 50%; 164 transform: translate(-50%, -50%); 165 } 166 167 .match-card__stats-content { 168 background: none !important; 169 box-shadow: none !important 170 } 171 172 173 174 @media (max-width: 480px) { 175 .team__logo { 176 width: 40px !important; 177 height: 40px !important; 178 } 179 .match-card__league { 180 max-width: 100px; 181 } 182 183 .match-card__time { 184 max-width: 100px; 185 } 186 187 .match-card__status { 188 max-width: 120px; 189 order: 1 !important; 190 font-size: 12px 191 } 192 193 .streaming { 194 padding: 4px; 195 } 196 197 .btn-view-truc-tiep { 198 padding: 8px 4px !important; 199 font-size: 12px; 200 } 201 .match-card__stats-content { 202 display: block !important; 203 } 204 205 .match-card__stats { 206 display: block !important 207 } 208 } 209 210 @media (min-width: 768px) and (max-width: 1024px) { 211 .match-card__status { 212 position: absolute; 213 top: 13%; 214 left: 50%; 215 transform: translate(-50%, -50%); 216 } 217 218 .match-card__league { 219 max-width: 110px; 220 } 221 } 222 </style><link rel="icon" href="https://cdn.automarkhistory.com/wp-content/uploads/2025/12/cropped-6161200216581803284-removebg-preview-32x32.png" sizes="32x32" /> 223<link rel="icon" href="https://cdn.automarkhistory.com/wp-content/uploads/2025/12/cropped-6161200216581803284-removebg-preview-192x192.png" sizes="192x192" /> 224<link rel="apple-touch-icon" href="https://cdn.automarkhistory.com/wp-content/uploads/2025/12/cropped-6161200216581803284-removebg-preview-180x180.png" /> 225<meta name="msapplication-TileImage" content="https://cdn.automarkhistory.com/wp-content/uploads/2025/12/cropped-6161200216581803284-removebg-preview-270x270.png" /> 226 227 228</head> 229 230<body> 231 <!-- Header --> 232<header class="header"> 233 <div class="container"> 234 <div class="header__inner"> 235 <a href="/" class="logo"> 236 <img src="https://cdn.automarkhistory.com/wp-content/themes/cakhiatv/assets/images/saoketvlogo.png" alt="Menu" style="height:90px"> 237 </a> 238 <div style="display: flex; align-items: center"> 239 <nav class="nav"> 240 <button class="nav__toggle"> 241 <img src="https://cdn.automarkhistory.com/wp-content/themes/cakhiatv/assets/images/hamburger.svg" alt="Menu" /> 242 </button> 243 244 <ul class="nav__menu"> 245 <button class="nav__close" aria-label="Close menu"></button> 246 <li class="nav__item"><a href="/" class=" active">Saoke TV</a></li><li class="nav__item"><a href="https://www.automarkhistory.com/bang-xep-hang/" class="">Bảng xếp hạng</a></li><li class="nav__item"><a href="https://www.automarkhistory.com/ket-qua-bong-da/" class="">Kết quả bóng Äá</a></li><li class="nav__item"><a href="https://www.automarkhistory.com/lich-thi-dau/" class="">Lá»ch thi Äấu</a></li><li class="nav__item"><a href="https://www.automarkhistory.com/nhan-dinh/" class="">Nháºn Äá»nh bóng Äá</a></li><li class="nav__item"><a href="https://www.automarkhistory.com/soi-keo/" class="">Soi kèo bóng Äá</a></li><li class="nav__item"><a href="https://www.automarkhistory.com/tin-tuc/" class="">Tin tức</a></li> </ul> 247 </nav> 248 <div class="header__buttons"> 249 <a href="https://vsbetz75.com/login/" target="_blank" class="btn btn--secondary header-button" rel="nofollow">
250 <span class="header-text">CƯỢC VSBET</span> 251 </a> 252 <a href="https://vsbetz75.com/registered" class="btn btn--secondary header-button2" rel="nofollow"> 253 <span class="header-text">ÄÄNG KÃ</span> 254 </a> 255 256 </div> 257 258 </div> 259 260 261 262 </div> 263 </div> 264 </header> 265 266 <!-- Main Content --> 267 <!-- Main Content --> 268 <main style="padding-top: 1px"> 269 <section class="ads"> 270 <div class="container"> 271 <a href="<br /> 272<b>Warning</b>: file_get_contents(): php_network_getaddresses: getaddrinfo for xoilackvb.cc failed: Name or service not known in <b>/www/sites/automarkhistory.com/wp-content/themes/cakhiatv/front-page.php</b> on line <b>12</b><br /> 273<br /> 274<b>Warning</b>: file_get_contents(https://xoilackvb.cc/link.php): Failed to open stream: php_network_getaddresses: getaddrinfo for xoilackvb.cc failed: Name or service not known in <b>/www/sites/automarkhistory.com/wp-content/themes/cakhiatv/front-page.php</b> on line <b>12</b><br /> 275" target="_blank" rel="nofollow"><img style="display: none" src="<br /> 276<b>Warning</b>: file_get_contents(): php_network_getaddresses: getaddrinfo for xoilackvb.cc failed: Name or service not known in <b>/www/sites/automarkhistory.com/wp-content/themes/cakhiatv/front-page.php</b> on line <b>12</b><br /> 277<br /> 278<b>Warning</b>: file_get_contents(https://xoilackvb.cc/banner.php): Failed to open stream: php_network_getaddresses: getaddrinfo for xoilackvb.cc failed: Name or service not known in <b>/www/sites/automarkhistory.com/wp-content/themes/cakhiatv/front-page.php</b> on line <b>12</b><br /> 279" /></a> 280 </div> 281 </section> 282 <!-- Hero Section --> 283 <section class="hero"> 284 <div class="container"> 285 <div class="hero__content"> 286 <h1 class="text-uppercase"> 287 <p>Saoketv – Trang xem trá»±c tiếp bóng Äá rõ nét, á»n Äá»nh 24/7</p> 288 </h1> 289 </div> 290 </div> 291 </section> 292 293 <!-- Sports Filter --> 294 <section class="sports-filter" > 295 <div class="container"> 296 <div class="sports-filter__inner" style="display: none"> 297 <!-- Group 1: Sports Categories --> 298 <!--<div class="sports-filter__group sports-categories"> 299 <button 300 class="sports-filter__button" 301 data-sport="all" 302 > 303 <div class="sports-filter__button-icon"> 304 <img 305 src="https://cdn.automarkhistory.com/wp-content/themes/cakhiatv/assets/images/icons/football.png" 306 alt="Tất Cả" 307 /> 308 </div> 309 <div class="sports-filter__button-text">Tất Cả</div> 310 <div class="sports-filter__button-count" id="count-all-type"></div> 311 </button> 312 313 <button 314 class="sports-filter__button" 315 data-sport="football" 316 > 317 <div class="sports-filter__button-icon"> 318 <img 319 src="https://cdn.automarkhistory.com/wp-content/themes/cakhiatv/assets/images/icons/football.png" 320 alt="Football" 321 /> 322 </div> 323 <div class="sports-filter__button-text">Bóng Äá</div> 324 <div class="sports-filter__button-count" id="count-football"></div> 325 </button> 326 327 <button class="sports-filter__button" data-sport="basketball"> 328 <div class="sports-filter__button-icon"> 329 <img 330 src="https://cdn.automarkhistory.com/wp-content/themes/cakhiatv/assets/images/icons/basketball.png" 331 alt="Basketball" 332 /> 333 </div> 334 <div class="sports-filter__button-text">Bóng rá»</div> 335 <div class="sports-filter__button-count" id="count-basketball"></div> 336 </button> 337 338 <!-- <button class="sports-filter__button" data-sport="tennis"> 339 <div class="sports-filter__button-icon"> 340 <img src="https://cdn.automarkhistory.com/wp-content/themes/cakhiatv/assets/images/icons/tennis.png" alt="Tennis" /> 341 </div> 342 <div class="sports-filter__button-text">Tennis</div> 343 <div class="sports-filter__button-count" id="count-tennis"></div> 344 </button> --> 345 346 <!--<button class="sports-filter__button" data-sport="volleyball"> 347 <div class="sports-filter__button-icon"> 348 <img 349 src="https://cdn.automarkhistory.com/wp-content/themes/cakhiatv/assets/images/icons/volleyball.png" 350 alt="Volleyball" 351 /> 352 </div> 353 <div class="sports-filter__button-text">Bóng chuyá»n</div> 354 <div class="sports-filter__button-count" id="count-volleyball"></div> 355 </button> --> 356 357 <div class="livescore-switch"> 358 <label class="switch"> 359 <input type="checkbox" id="livescoreToggle" />
360 <span class="slider"></span> 361 </label> 362 <span class="livescore-label">Livescore</span> 363 </div> 364 </div> 365 366 <!-- Divider --> 367 <div class="sports-filter__divider"></div> 368 369 <!-- Group 2: Match Filters --> 370 <div class="sports-filter__group match-filters"> 371 <button class="sports-filter__button_child active" data-filter="child_all"> 372 <div class="sports-filter__button-icon"> 373 <img src="https://cdn.automarkhistory.com/wp-content/themes/cakhiatv/assets/images/icons/all.png" alt="All" /> 374 </div> 375 <div class="sports-filter__button-text">Tất cả</div> 376 <div class="sports-filter__button-count" id="count-all-type"></div> 377 </button> 378 379 <button class="sports-filter__button_child live" data-filter="live"> 380 <div class="sports-filter__button-icon"> 381 <img src="https://cdn.automarkhistory.com/wp-content/themes/cakhiatv/assets/images/icons/live.png" alt="Live" /> 382 </div> 383 <div class="sports-filter__button-text">Äang Live</div> 384 <div class="sports-filter__button-count" id="count-live"></div> 385 </button> 386 387 <!--<button class="sports-filter__button_child" data-filter="hot"> 388 <div class="sports-filter__button-icon"> 389 <img src="https://cdn.automarkhistory.com/wp-content/themes/cakhiatv/assets/images/icons/hot.png" alt="Hot" /> 390 </div> 391 <div class="sports-filter__button-text">Tráºn HOT</div> 392 <div class="sports-filter__button-count" id="count-hot">48</div> 393 </button>--> 394 395 <!--<button class="sports-filter__button_child" data-filter="date" data-value="2026-09-27"> 396 <div class="sports-filter__button-icon"> 397 <img src="https://cdn.automarkhistory.com/wp-content/themes/cakhiatv/assets/images/icons/calendar.png" alt="Today" /> 398 </div> 399 <div class="sports-filter__button-text">Hôm Nay</div> 400 <div class="sports-filter__button-count" id="count-today"></div> 401 </button>--> 402 403 <!--<button class="sports-filter__button_child" data-filter="date" data-value="2026-09-28"> 404 <div class="sports-filter__button-icon"> 405 <img 406 src="https://cdn.automarkhistory.com/wp-content/themes/cakhiatv/assets/images/icons/calendar.png" 407 alt="Tomorrow" 408 /> 409 </div> 410 <div class="sports-filter__button-text">Ngà y Mai</div> 411 <div class="sports-filter__button-count" id="count-tomorrow"></div> 412 </button>--> 413 <!-- 414 <button class="sports-filter__button_child" data-filter="no_blv"> 415 <div class="sports-filter__button-text">Live không BLV</div> 416 <div class="sports-filter__button-count" id="noblv-live">0</div> 417 </button> 418 --> 419 </div> 420 </div> 421 </div> 422 </section> 423 424 <!-- Featured Matches --> 425 <section class="featured-matches" style=""> 426 <div class="container"> 427 <div class="match-section"> 428 <div id="match-list" class="matches"> 429 </div> 430 </div> 431 432 <!--<div 433 style=" 434 display: flex; 435 justify-content: center; 436 margin-top: 1rem; 437 margin-bottom: 1rem; 438 " 439 > 440 <a href="#" class="btn btn--readmore"> 441 <span>Xem thêm lá»ch trá»±c tiếp -></span> 442 </a> 443 </div>--> 444 </div> 445 </section> 446 447 <!-- Content Navigation Section --> 448 <section class="content-nav"> 449 <div class="container"> 450 <div class="content-nav__container" style="max-height:800px !important"> 451 <div class="content-nav__lists"> 452 <div class="content-nav__list"> 453 <!-- Nếu bạn vẫn muá»n giữ Mục lục nà y thá»§ công, thì Äá» lại --> 454 <p style="font-weight: bold; font-size: 120%">Mục Lục</p> 455 <!-- Hoặc có thá» xoá toà n bá» <ul>
455 nà y nếu muá»n Gutenberg xá» lý luôn --> 456 457 <div class="content-nav__divider"></div> 458 459 <div class="content-nav__text"> 460 <p><a href="/">Saoketv</a> là kênh TTBD quen thuá»c cá»§a những tÃn Äá» bóng Äá, nÆ¡i bạn có thá» theo dõi má»i tráºn cầu Äá»nh cao hoà n toà n miá» n phÃ. Có thá» theo dõi má»i giải Äấu lá»n nhá»Â từ Ngoại hạng Anh Äến V-League vá»i ÄÆ°á»ng truyá»n á»n Äá»nh. Không chá» xem bóng Äá, kênh còn mang Äến lá»ch thi Äấu, tá»· sá» trá»±c tiếp và những thông tin nóng há»i má»i ngà y cho ngưá»i hâm má».</p> 461<h2>Lý do má»i ngưá»i nên xem bd truc tuyen trên Saoketv</h2> 462<div id="attachment_1310" style="width: 810px" class="wp-caption aligncenter"><img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-1310" class="size-full wp-image-1310" src="https://cdn.enjoysmallthings.com/wp-content/uploads/2025/12/bi-quyet-khien-saoketv-thanh-web-xem-bong-da-uy-tin-5.jpg" alt="bi quyet khien saoketv thanh web xem bong da uy tin 5" width="800" height="400" title="Saoketv - Trang xem trá»±c tiếp bóng Äá rõ nét, á»n Äá»nh 24/7 1" srcset="https://cdn.automarkhistory.com/wp-content/uploads/2025/12/bi-quyet-khien-saoketv-thanh-web-xem-bong-da-uy-tin-5.jpg 800w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/bi-quyet-khien-saoketv-thanh-web-xem-bong-da-uy-tin-5-300x150.jpg 300w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/bi-quyet-khien-saoketv-thanh-web-xem-bong-da-uy-tin-5-768x384.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1310" class="wp-caption-text">Bà quyết khiến Saoketv trá» thà nh trang xem bóng Äá ÄÆ°á»£c ưa chuá»ng</p></div> 463<p>Saoketv là trang xem bóng Äá ná»i báºt, mang Äến cho ngưá»i hâm má» những trải nghiá»m thá» thao hoà n toà n má»i mẻ và tiá»n lợi. Chá» vá»i má»t thiết bá» có Internet, bạn có thá» táºn hưá»ng tráºn cầu Äá»nh cao á» bất kỳ nÆ¡i Äâu.</p> 464<h3>Thưá»ng thức bóng Äá liá»n mạch, không bá» ngắt quãng</h3> 465<p>Trang web giúp bạn xem trá»±c tiếp má»i tráºn Äấu lá»n nhá» trong và ngoà i nưá»c. Dù là các giải hà ng Äầu châu Ãu hay những tráºn cầu Viá»t Nam, bạn Äá»u có thá» theo dõi dá» dà ng. Má»i khung giá», má»i thiết bá», chá» cần truy cáºp là có thá» xem bd ngay. Không còn bá» lỡ những phút giây ká»ch tÃnh vì giá»i hạn vá» thá»i gian hay Äá»a Äiá»m.</p> 466<h3>Äá» nét cao, tá»c Äá» phát nhanh chóng</h3> 467<p>Má»t trong những ưu Äiá»m ná»i báºt cá»§a trang là chất lượng hình ảnh siêu mượt. Nhá» há» thá»ng máy chá»§ tá»i ưu, video luôn sắc nét, không giáºt lag hay bá» Äứng hình. Má»i pha chuyá»n bóng, cú sút hay tình huá»ng gay cấn Äá»u ÄÆ°á»£c tái hiá»n chân thá»±c. Trải nghiá»m xem ttbd cá»§a bạn luôn mượt mà và sá»ng Äá»ng như Äang á» sân váºn Äá»ng.</p> 468<h3>Không cần trả phà Äá» táºn hưá»ng</h3> 469<p>Saoketv mang lại cho ngưá»i dùng sá»± tá»± do tuyá»t Äá»i khi thưá»ng thức bóng Äá mà không mất tiá»n. Không yêu cầu ÄÄng ký, không thu phà ẩn, chá» cần truy cáºp là có thá» xem trá»±c tiếp bóng Äá ngay. Ngưá»i hâm má» có thá» tiết kiá»m chi phà mà vẫn xem ÄÆ°á»£c những tráºn cầu Äá»nh cao. Äây là lá»±a chá»n tá»i ưu cho má»i tầng lá»p yêu bóng Äá.</p> 470<h3>Cáºp nháºt liên tục những giải bóng hot nhất hà nh tinh</h3> 471<p>Từ Ngoại Hạng Anh, Bundesliga Äến Champions League hay EURO, tất cả Äá»u có mặt trên Saoketv. Bạn không cần phải tìm kiếm rá»i rạc trên nhiá»u trang web bongdatructiep khác nhau. Há» thá»ng liên tục cáºp nháºt Äá» Äảm bảo má»i giải Äấu hot nhất Äá»u ÄÆ°á»£c phát sóng. Sá»± Äa dạng nà y khiến trang web trá» thà nh trung tâm cá»§a ngưá»i mê túc cầu.</p> 472<h3>Bình luáºn sinh Äá»ng, cảm xúc chân tháºt</h3> 473<p>Các tráºn Äấu trên Saoketv ÄÆ°á»£c lá»ng tiếng và bình luáºn tiếng Viá»t chuyên nghiá»p. Giá»ng bình luáºn viên mang Äến sá»± hà o hứng, giúp tráºn Äấu thêm phần cuá»n hút. Há» không chá» tưá»ng thuáºt mà còn phân tÃch chiến thuáºt và tình huá»ng hay. Nhá» Äó, ngưá»i xem cảm thấy gần gÅ©i và dá» hòa mình và o không khà tráºn Äấu.</p> 474<h3>Xem mượt trên má»i thiết bá»</h3> 475<p>Saoketv tương thÃch hoà n toà n vá»i Äiá»n thoại, máy tÃnh bảng, laptop và smart TV. Dù bạn á» nhà , Äi là m hay Äang du lá»ch, chá» cần có mạng là có thá» xemtructiepbongda ngay. Há» thá»ng tá»± Äá»ng Äiá»u chá»nh chất lượng phù hợp vá»i tá»c Äá» Internet. Ngưá»i dùng luôn có trải nghiá»m á»n Äá»nh và tiá»n lợi dù á» bất kỳ Äâu.</p> 476<h3>
476Ãt quảng cáo, không bá» gián Äoạn</h3> 477<p>Không gì khó chá»u hÆ¡n khi Äang xem tráºn Äấu mà bá» quảng cáo xen ngang. Saoketv hiá»u Äiá»u Äó và luôn giữ cho mà n hình xem cá»§a bạn thông suá»t. Tần suất quảng cáo ÄÆ°á»£c giảm tá»i Äa Äá» không là m mất cảm xúc. Bạn ÄÆ°á»£c táºn hưá»ng tráºn Äấu trá»n vẹn từ Äầu Äến cuá»i mà không bá» là m phiá»n.</p> 478<h2>Trang tructiepbongda Saoketv có bản quyá»n cá»§a tất cả giải Äấu</h2> 479<div id="attachment_1315" style="width: 810px" class="wp-caption aligncenter"><img decoding="async" aria-describedby="caption-attachment-1315" class="size-full wp-image-1315" src="https://cdn.enjoysmallthings.com/wp-content/uploads/2025/12/saoketv-noi-quy-tu-cac-giai-bong-da-hang-dau-the-gioi-1-7.jpg" alt="saoketv noi quy tu cac giai bong da hang dau the gioi 1 7" width="800" height="400" title="Saoketv - Trang xem trá»±c tiếp bóng Äá rõ nét, á»n Äá»nh 24/7 2" srcset="https://cdn.automarkhistory.com/wp-content/uploads/2025/12/saoketv-noi-quy-tu-cac-giai-bong-da-hang-dau-the-gioi-1-7.jpg 800w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/saoketv-noi-quy-tu-cac-giai-bong-da-hang-dau-the-gioi-1-7-300x150.jpg 300w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/saoketv-noi-quy-tu-cac-giai-bong-da-hang-dau-the-gioi-1-7-768x384.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1315" class="wp-caption-text">Saoketv nÆ¡i quy tụ các giải bóng Äá hà ng Äầu thế giá»i</p></div> 480<p>Trên Saoketv, khán giả có thá» xembd live nhiá»u giải Äấu Äẳng cấp quá»c tế cÅ©ng như các giải trong nưá»c ÄÆ°á»£c cáºp nháºt liên tục. Dưá»i Äây là má»t sá» giải Äấu hấp dẫn Äang ÄÆ°á»£c phát sóng thưá»ng xuyên.</p> 481<table> 482<tbody> 483<tr> 484<td>Các giải Äấu</td> 485<td>Các Äá»i ná»i báºt</td> 486<td>Các chức nÄng trá»±c tiếp</td> 487</tr> 488<tr> 489<td>Ngoại Hạng Anh â Giải bóng Äá sôi Äá»ng, ká»ch tÃnh hà ng Äầu châu Ãu</td> 490<td>Manchester United, Liverpool, Chelsea, Arsenal</td> 491<td>Saoketv tưá»ng thuáºt trá»±c tiếp Premier League, cáºp nháºt từng bà n thắng và pha bóng quan trá»ng. Ngưá»i hâm má» có thá» xem bong da má»i lúc, má»i nÆ¡i nhá» ÄÆ°á»ng truyá»n mượt mà . TÃnh nÄng trá»±c tiếp giúp trải nghiá»m tráºn Äấu sá»ng Äá»ng và chân thá»±c.</td> 492</tr> 493<tr> 494<td>Xem trá»±c tiếp bóng Äá giải Champions League</td> 495<td>Real Madrid, Manchester City, Bayern Munich, PSG</td> 496<td>Má»i tráºn Champions League Äá»u ÄÆ°á»£c Saoketv phát trá»±c tiếp ngay khi diá» n ra. Ngưá»i xem có thá» táºn hưá»ng từng bà n thắng và pha bóng gay cấn mà không bá» gián Äoạn. TÃnh nÄng truc tiep bong da Äảm bảo cảm xúc tráºn Äấu ÄÆ°á»£c truyá»n tải trá»n vẹn. Trang web là lá»±a chá»n hà ng Äầu cho fan bóng Äá châu Ãu.</td> 497</tr> 498<tr> 499<td>Europa League â Sân chÆ¡i Äẳng cấp thứ hai châu Ãu</td> 500<td>Sevilla, Arsenal, AS Roma, Bayer Leverkusen</td> 501<td>Saoketv tưá»ng thuáºt trá»±c tiếp Europa League vá»i ÄÆ°á»ng truyá»n mượt mà , á»n Äá»nh. Má»i diá» n biến trên sân Äá»u ÄÆ°á»£c cáºp nháºt tức thì. TÃnh nÄng ttbd mang lại trải nghiá»m bóng Äá chân thá»±c. Ngưá»i xem có thá» theo dõi má»i tráºn Äấu má»t cách thuáºn tiá»n.</td> 502</tr> 503<tr> 504<td>La Liga â NÆ¡i há»i tụ tinh hoa bóng Äá mang Äáºm bản sắc Tây Ban Nha</td> 505<td>Barcelona, Real Madrid, Atletico Madrid, Sevilla</td> 506<td>Tất cả các tráºn La Liga Äá»u ÄÆ°á»£c Saoketv phát trá»±c tiếp chất lượng cao. Má»i bà n thắng và tình huá»ng gay cấn Äá»u hiá»n thá» rõ nét. TÃnh nÄng bóng Äá live giúp ngưá»i xem không bá» lỡ khoảnh khắc quan trá»ng. Saoketv mang Äến trải nghiá»m bóng Äá trá»n vẹn, gần gÅ©i vá»i khán giả.</td> 507</tr> 508<tr> 509<td>Serie A â Nét tinh tế và chiến thuáºt báºc thầy cá»§a bóng Äá Ã</td> 510<td>Juventus, AC Milan, Inter Milan, Napoli</td> 511<td>Saoketv cung cấp trá»±c tiếp Serie A vá»i tá»c Äá» á»n Äá»nh và hình ảnh sắc nét. Ngưá»i xem có thá» theo sát từng chiến thuáºt và pha bóng quan trá»ng. TÃnh nÄng trá»±c tiếp tạo cảm giác như Äang theo dõi tráºn Äấu tại sân váºn Äá»ng. Äây là Äiá»m Äến lý tưá»ng cho fan bóng Äá Ã.</td> 512</tr> 513<tr> 514<td>V-League â Sức hút Äến từ sân cá» Viá»t Nam</td> 515<td>Hà Ná»i FC, HAGL, Viettel, Bình Dương</td> 516<td>Ngưá»i hâm má» bóng Äá Viá»t Nam có thá» xem trá»±c tiếp V-League ngay trên Saoketv. Tất cả các tráºn Äấu trong nưá»c Äá»u ÄÆ°á»£c cáºp nháºt chất lượng cao. Xem bd truc tiep giúp khán giả hòa mình và o không khà sôi Äá»ng. Saoketv là Äá»a chá» tin cáºy cho fan bóng Äá ná»i Äá»a.</td> 517</tr> 518<tr> 519<td>Bundesliga â Giải Äấu tầm cỡ thế giá»i, thu hút hà ng nghìn khán giả</td> 520<td>Bayern Munich, Borussia Dortmund, RB Leipzig, Bayer Leverkusen</td> 521<td>Ngưá»i hâm má» Bundesliga có thá» xem trá»±c tiếp các tráºn Äấu trên Saoketv vá»i chất lượng cao. Má»i bà n thắng và p
521ha xá» lý kỹ thuáºt ÄÆ°á»£c cáºp nháºt nhanh chóng. TÃnh nÄng trá»±c tiếp mang lại trải nghiá»m chân thá»±c và sá»ng Äá»ng. Saoketv kết ná»i ngưá»i hâm má» vá»i giải Äấu Äức hiá»u quả.</td> 522</tr> 523<tr> 524<td>AFC Champions League</td> 525<td>Al Hilal, Urawa Reds, Pohang Steelers, Jeonbuk Hyundai Motors</td> 526<td>Saoketv tưá»ng thuáºt trá»±c tiếp AFC Champions League, giúp ngưá»i xem theo dõi các câu lạc bá» châu à ká»ch tÃnh. Má»i bà n thắng và pha xá» lý Äá»u ÄÆ°á»£c phát sóng ngay láºp tức. TÃnh nÄng trá»±c tiếp mang Äến trải nghiá»m sá»ng Äá»ng và chân thá»±c. Saoketv là cầu ná»i niá»m Äam mê bóng Äá châu à cho khán giả Viá»t.</td> 527</tr> 528</tbody> 529</table> 530<p> </p> 531<h2>Tá»ng hợp các BLV chuyên nghiá»p trên trá»±c tiếp bóng Äá Saoketv</h2> 532<div id="attachment_1312" style="width: 810px" class="wp-caption aligncenter"><img decoding="async" aria-describedby="caption-attachment-1312" class="size-full wp-image-1312" src="https://cdn.enjoysmallthings.com/wp-content/uploads/2025/12/gap-go-doi-ngu-blv-tai-nang-dong-hanh-cung-saoketv-7.jpg" alt="gap go doi ngu blv tai nang dong hanh cung saoketv 7" width="800" height="400" title="Saoketv - Trang xem trá»±c tiếp bóng Äá rõ nét, á»n Äá»nh 24/7 3" srcset="https://cdn.automarkhistory.com/wp-content/uploads/2025/12/gap-go-doi-ngu-blv-tai-nang-dong-hanh-cung-saoketv-7.jpg 800w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/gap-go-doi-ngu-blv-tai-nang-dong-hanh-cung-saoketv-7-300x150.jpg 300w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/gap-go-doi-ngu-blv-tai-nang-dong-hanh-cung-saoketv-7-768x384.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1312" class="wp-caption-text">Gặp gỡ Äá»i ngÅ© BLV tà i nÄng Äá»ng hà nh cùng Saoketv</p></div> 533<p>Má»t tráºn bóng Äá hấp dẫn không chá» Äến từ những pha ghi bà n Äẹp mắt, mà còn nhá» giá»ng bình luáºn truyá»n cảm cá»§a các BLV. Trên Saoketv, Äá»i ngÅ© bình luáºn viên chuyên nghiá»p chÃnh là Äiá»m nhấn giúp má»i buá»i xem bong da trá» nên sá»ng Äá»ng và cuá»n hút hÆ¡n bao giá» hết.</p> 534<h3>BLV Minh Äức â Giá»ng nói cá»§a nhiá»t huyết</h3> 535<p>BLV Minh Äức là gương mặt quen thuá»c vá»i khán giả Saoketv. Anh sá» hữu giá»ng nói mạnh mẽ, truyá»n cảm và phong cách bình luáºn Äầy nÄng lượng. Má»i pha bóng ÄÆ°á»£c anh miêu tả Äá»u khiến ngưá»i nghe cảm thấy như Äang sá»ng trong không khà sân cá» tháºt sá»±. Minh Äức ná»i báºt vá»i khả nÄng là m chá»§ cảm xúc, tạo nên bầu không khà sôi Äá»ng và hà o hứng.</p> 536<h3>BLV Hoà ng Nam â Chuyên gia phân tÃch chiến thuáºt</h3> 537<p>Không chá» tưá»ng thuáºt, Hoà ng Nam còn là ngưá»i âgiải mãâ từng ÄÆ°á»ng chuyá»n, từng Äá»i hình thi Äấu. Anh có kiến thức sâu rá»ng vá» chiến thuáºt, mang Äến cho ngưá»i xem góc nhìn Äa chiá»u. Khi nghe anh bình luáºn, khán giả không chá» ÄÆ°á»£c giải trà mà còn há»c há»i thêm vá» chuyên môn bóng Äá. Sá»± logic và tinh tế là Äiá»m mạnh khiến Hoà ng Nam ÄÆ°á»£c yêu mến.</p> 538<h3>BLV Quang Anh â Cảm xúc chân thá»±c trong từng câu nói</h3> 539<p>Quang Anh là cái tên quen thuá»c vá»i những ai yêu thÃch sá»± tá»± nhiên, gần gÅ©i. Anh không quá âkỹ thuáºtâ trong lá»i nói, mà chú trá»ng Äến cảm xúc chân tháºt cá»§a ngưá»i xem bd tt. Giá»ng nói trầm ấm và cách thá» hiá»n nhẹ nhà ng giúp ngưá»i nghe cảm thấy thoải mái. Vá»i Quang Anh, má»i tráºn Äấu là má»t câu chuyá»n, má»t hà nh trình cá»§a cảm xúc.</p> 540<h3>BLV Hải SÆ¡n â Ngưá»i truyá»n lá»a cá»§a Saoketv</h3> 541<p>Hải SÆ¡n là má»t trong những BLV ÄÆ°á»£c Äánh giá cao nhá» khả nÄng khuấy Äá»ng không khÃ. Anh luôn mang Äến tinh thần máu lá»a, sôi ná»i trong từng phút tưá»ng thuáºt. Phong cách bình luáºn mạnh mẽ, pha chút hà i hưá»c khiến khán giả vô cùng thÃch thú. Vá»i Hải SÆ¡n, tráºn Äấu nà o cÅ©ng trá» thà nh má»t lá» há»i bóng Äá ÄÃch thá»±c.</p> 542<h3>BLV Viá»t DÅ©ng â Phân tÃch sắc bén, kiến thức vững và ng</h3> 543<p>Viá»t DÅ©ng là ngưá»i có nhiá»u nÄm kinh nghiá»m trong lÄ©nh vá»±c bình luáºn thá» thao. Anh am hiá»u bóng Äá châu Ãu, Äặc biá»t là Ngoại Hạng Anh và Champions League. Những phân tÃch cá»§a anh luôn chÃnh xác, Äi sâu và o bản chất chiến thuáºt. Nhá» váºy, ngưá»i xem bd live không chá» xem mà còn hiá»u sâu hÆ¡n vá» lá»i chÆ¡i cá»§a từng Äá»i bóng.</p> 544<h2>Hưá»ng dẫn truy cáºp link chÃnh thức Saoketv an toà n</h2> 545<div id="attachment_1317" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1317" class="size-full wp-image-1317" src="https://cdn.enjoysmallthings.com/wp-content/uploads/2025/12/tim-link-xem-bong-da-saoketv-chuan-khong-bi-ch
545an-5.jpg" alt="tim link xem bong da saoketv chuan khong bi chan 5" width="800" height="400" title="Saoketv - Trang xem trá»±c tiếp bóng Äá rõ nét, á»n Äá»nh 24/7 4" srcset="https://cdn.automarkhistory.com/wp-content/uploads/2025/12/tim-link-xem-bong-da-saoketv-chuan-khong-bi-chan-5.jpg 800w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/tim-link-xem-bong-da-saoketv-chuan-khong-bi-chan-5-300x150.jpg 300w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/tim-link-xem-bong-da-saoketv-chuan-khong-bi-chan-5-768x384.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1317" class="wp-caption-text">Cách tìm link xem bóng Äá Saoketv chuẩn không bá» chặn</p></div> 546<p>Viá»c truy cáºp các trang web xem bóng Äá trá»±c tuyến cần ÄÆ°á»£c thá»±c hiá»n cẩn trá»ng Äá» tránh rá»§i ro. Nhiá»u ÄÆ°á»ng link xem bóng Äá trá»±c tiếp giả mạo, chứa mã Äá»c hoặc quảng cáo Äá»c hại có thá» khiến ngưá»i xem gặp nguy hiá»m.</p> 547<ul> 548<li style="font-weight: 400;" aria-level="1"><strong>Xác Äá»nh Äúng Äá»a chá» trang Saoketv chÃnh thức</strong>: Trưá»c tiên, ngưá»i xem cần kiá»m tra kỹ ÄÆ°á»ng dẫn truy cáºp trưá»c khi nhấp và o. Link chÃnh thức gameswebstore.com thưá»ng có giao diá»n quen thuá»c, hiá»n thá» rõ tên thương hiá»u và không chứa ký tá»± lạ. Nên truy cáºp từ nguá»n Äáng tin cáºy như trang chá»§ Saoketv hoặc liên kết ÄÆ°á»£c chia sẻ trên các kênh chÃnh thức.</li> 549<li style="font-weight: 400;" aria-level="1"><strong>Dùng trình duyá»t bảo máºt và tránh tải phần má»m lạ</strong>: Khi xem bóng Äá trá»±c tuyến, bạn nên sá» dụng các trình duyá»t phá» biến như Chrome, Firefox hoặc Edge có chế Äá» bảo máºt cao. Tuyá»t Äá»i không cà i Äặt tiá»n Ãch má» rá»ng hoặc phần má»m ÄÆ°á»£c yêu cầu từ các trang không rõ rà ng.</li> 550<li style="font-weight: 400;" aria-level="1"><strong>Liên há» há» trợ nếu không truy cáºp ÄÆ°á»£c link</strong>: Trong trưá»ng hợp ÄÆ°á»ng dẫn chÃnh thức bá» chặn hoặc lá»i, bạn có thá» liên há» Äá»i ngÅ© há» trợ cá»§a sao ke tv qua các kênh mạng xã há»i. Há» sẽ cung cấp ÄÆ°á»ng link hoạt Äá»ng má»i nhất và hưá»ng dẫn chi tiết Äá» truy cáºp an toà n. Viá»c nà y giúp Äảm bảo bạn luôn theo dõi ÄÆ°á»£c các tráºn Äấu mà không bá» gián Äoạn.</li> 551<li style="font-weight: 400;" aria-level="1"><strong>Không truy cáºp các link lạ từ mạng xã há»i hoặc nhóm chia sẻ</strong>: Nhiá»u link giả Saoketv xuất hiá»n trên Facebook, Telegram hoặc các trang tin không xác thá»±c. Các ÄÆ°á»ng dẫn nà y thưá»ng gắn mã theo dõi hoặc chứa quảng cáo gây phiá»n toái. Ngưá»i xem bd link nên tuyá»t Äá»i tránh truy cáºp các link lạ Äá» Äảm bảo an toà n thông tin cá nhân và thiết bá» cá»§a mình.</li> 552</ul> 553<h2>Danh sách các kênh trá»±c tiếp cùng há» thá»ng Saoketv</h2> 554<div id="attachment_1313" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1313" class="size-full wp-image-1313" src="https://cdn.enjoysmallthings.com/wp-content/uploads/2025/12/he-thong-kenh-truc-tuyen-lien-ket-voi-saoketv-7.jpg" alt="he thong kenh truc tuyen lien ket voi saoketv 7" width="800" height="400" title="Saoketv - Trang xem trá»±c tiếp bóng Äá rõ nét, á»n Äá»nh 24/7 5" srcset="https://cdn.automarkhistory.com/wp-content/uploads/2025/12/he-thong-kenh-truc-tuyen-lien-ket-voi-saoketv-7.jpg 800w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/he-thong-kenh-truc-tuyen-lien-ket-voi-saoketv-7-300x150.jpg 300w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/he-thong-kenh-truc-tuyen-lien-ket-voi-saoketv-7-768x384.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1313" class="wp-caption-text">Há» thá»ng kênh trá»±c tuyến liên kết vá»i Saoketv</p></div> 555<p>Sao kê tv xây dá»±ng má»t há» thá»ng phát sóng trá»±c tuyến rá»ng khắp, kết ná»i nhiá»u kênh thá» thao trong và ngoà i nưá»c. Dưá»i Äây là danh sách các kênh trá»±c tiếp nằm trong há» thá»ng, mang Äến cho khán giả trải nghiá»m bóng Äá liá»n mạch và phong p
555hú nhất.</p> 556<table> 557<tbody> 558<tr> 559<td>Kênh trá»±c tiếp bóng Äá</td> 560<td>TÃnh nÄng ná»i báºt cá»§a kênh</td> 561</tr> 562<tr> 563<td>Saoke live</td> 564<td>Sao kê live mang Äến trải nghiá»m xem bóng Äá trá»±c tiếp tá»c Äá» cao vá»i hình ảnh sắc nét á» mức 60 khung hình/giây. Trang há» trợ hÆ¡n 100 giải Äấu lá»n nhá» má»i nÄm như Ngoại Hạng Anh, La Liga, Serie A và Cúp C1. Chá» vá»i má»t cú nhấp chuá»t, khán giả có thá» truy cáºp ngay tráºn cầu yêu thÃch mà không cần tải ứng dụng.</td> 565</tr> 566<tr> 567<td>Saoke 5 link</td> 568<td>Sao kê 5 link cung cấp 5 ÄÆ°á»ng dẫn khác nhau giúp ngưá»i xem luôn có lá»±a chá»n khi má»t link gặp lá»i. Tá»· lá» á»n Äá»nh ÄÆ°á»ng truyá»n Äạt tá»i 98%, giảm thiá»u tình trạng giáºt, lag trong giá» cao Äiá»m. Äây là Äá»a chá» Äáng tin cáºy cho những ai muá»n xem bóng Äá trÆ¡n tru, không bá» gián Äoạn.</td> 569</tr> 570<tr> 571<td>Saoke 6 link</td> 572<td>Saoke 6 link trá»±c tiếp há» trợ xem trá»±c tiếp trên Äiá»n thoại, máy tÃnh và TV thông minh, phù hợp vá»i nhiá»u thiết bá» khác nhau. Chất lượng hình ảnh tá»± Äá»ng Äiá»u chá»nh từ 480p Äến 1080p theo tá»c Äá» mạng cá»§a ngưá»i dùng. Chá» cần truy cáºp sao ke 6 link là có thá» thưá»ng thức tráºn Äấu má»i lúc, má»i nÆ¡i.</td> 573</tr> 574<tr> 575<td>Saoke 8 link</td> 576<td>Sao kê 8 link cáºp nháºt ÄÆ°á»ng dẫn má»i chá» trong 30 giây khi xảy ra lá»i phát sóng, giúp ngưá»i xem không bá» lỡ khoảnh khắc nà o. Trang liên kết vá»i hÆ¡n 20 kênh thá» thao quá»c tế, Äảm bảo nguá»n phát phong phú và á»n Äá»nh. Ngoà i ra, lá»ch thi Äấu ÄÆ°á»£c hiá»n thá» rõ rà ng ngay dưá»i video.</td> 577</tr> 578<tr> 579<td>Saoke 10 link</td> 580<td>Saoke 10 Link ná»i báºt vá»i tá»c Äá» tải video nhanh hÆ¡n 40% so vá»i nhiá»u trang bóng Äá khác. Giao diá»n thân thiá»n, chá» mất 3 giây Äá» má» tráºn Äấu mong muá»n. Äây là lá»±a chá»n lý tưá»ng cho ngưá»i hâm má» muá»n xem nhanh, rõ và tiá»n lợi.</td> 581</tr> 582<tr> 583<td>Saoke 11 link</td> 584<td>Saoke 11 link cung cấp chất lượng hình ảnh Full HD 1080p cùng âm thanh sá»ng Äá»ng. Trang ÄÆ°á»£c tá»i ưu cho hÆ¡n 90% thiết bá» di Äá»ng, giúp xembd line mượt mà ká» cả khi Äang di chuyá»n. Má»i 5 phút, há» thá»ng tá»± Äá»ng cáºp nháºt link dá»± phòng má»i Äá» duy trì kết ná»i á»n Äá»nh.</td> 585</tr> 586<tr> 587<td>Saoke 12 link</td> 588<td>Saoke 12 Link có hÆ¡n 10 máy chá»§ hoạt Äá»ng song song, giúp Äảm bảo tá»c Äá» truy cáºp luôn nhanh và mượt. Ngưá»i xem bong da có thá» chuyá»n giữa các tráºn Äấu chá» trong 2 giây mà không bá» ngắt quãng. Giao diá»n gá»n gà ng, dá» thao tác, phù hợp vá»i má»i Äá»i tượng khán giả.</td> 589</tr> 590<tr> 591<td>Saoke 2 link</td> 592<td>Saoke 2 tv ÄÆ°á»£c nhiá»u ngưá»i dùng Äánh giá cao nhá» khả nÄng hoạt Äá»ng á»n Äá»nh chá» vá»i 3 Mbps ÄÆ°á»ng truyá»n. Trang có tá»· lá» truy cáºp thà nh công hÆ¡n 95% trong khung giá» cao Äiá»m. Thiết kế ÄÆ¡n giản, dá» dùng, giúp khán giả truy cáºp nhanh chóng và xem ngay không cần chá» Äợi.</td> 593</tr> 594<tr> 595<td>Saoke tv</td> 596<td>Saoke tv trá»±c tiếp bóng Äá là trung tâm cá»§a há» thá»ng saoketv, nÆ¡i tá»ng hợp hÆ¡n 500 tráºn Äấu trá»±c tiếp má»i tháng. Vá»i hÆ¡n 1 triá»u lượt truy cáºp thưá»ng xuyên, sao kê tv trá»±c tiếp bóng Äá là Äá»a chá» quen thuá»c cá»§a fan túc cầu Viá»t Nam. Saoke tivi cung cấp hình ảnh Full HD, tá»c Äá» cao, mang Äến trải nghiá»m bóng Äá sá»ng Äá»ng và trá»n vẹn nhất.</td> 597</tr> 598<tr> 599<td>Saoke link</td> 600<td>Sao kê link ÄÆ°á»£c xem là trung tâm kết ná»i các ÄÆ°á»ng dẫn xem bóng Äá trá»±c tiếp nhanh, rõ và á»n Äá»nh nhất trong há» thá»ng. Trang luôn cáºp nháºt link trá»±c tiếp bóng Äá má»i trưá»c má»i tráºn Äấu, giúp khán giả dá» dà ng truy cáºp mà không lo gián Äoạn. Vá»i tá»c Äá» truyá»n tải ấn tượng, hình ảnh sắc nét và khả nÄng tá»± Äá»ng thay thế khi link lá»i.</td> 601</tr> 602</tbody> 603</table> 604<h2>Saoketv cáºp nháºt các tráºn trá»±c tiếp bóng Äá World Cup 2026</h2> 605<div id="attachment_1318" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1318" class="size-full wp-image-1318" src="https://cdn.enjoysmallthings.com/wp-content/uploads/2025/12/truc-tiep-world-cup-2026-toan-canh-tren-saoketv-5.jpg" alt="truc tiep world cup 2026 toan canh tren saoketv 5" width="800" height="400" title="Saoketv - Trang xem trá»±c tiếp bóng Äá rõ nét, á»n Äá»nh 24/7 6" srcset="https://cdn.automarkhistory.com/wp-content/uploads/2025/12/truc-tiep-world-cup-2026-toan-canh-tren-saoketv-5.jpg 800w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/truc-tiep-world-cup-2026-toan-canh-tren-saoketv-5-300x150.jpg 300w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/truc-tiep-world-cup-2026-toan-canh-tren-saoketv-5-768x384.jpg 768w" sizes="auto, (max-width: 800px) 100v
605w, 800px" /><p id="caption-attachment-1318" class="wp-caption-text">Trá»±c tiếp World Cup 2026 toà n cảnh giải Äấu trên Saoketv</p></div> 606<p>World Cup 2026 hứa hẹn sẽ là kỳ cúp bóng Äá lá»n nhất lá»ch sá» vá»i sá»± góp mặt cá»§a 48 Äá»i tuyá»n trên khắp thế giá»i. Äá» theo dõi trá»n vẹn giải Äấu, viá»c cáºp nháºt các kênh và link xem trá»±c tiếp bóng Äá miá» n phà như Saoketv trá» nên vô cùng quan trá»ng.</p> 607<ul> 608<li style="font-weight: 400;" aria-level="1"><strong>Thông tin chung vá» World Cup 2026</strong>: Giải Äấu sẽ diá» n ra và o mùa hè nÄm 2026, kéo dà i gần má»t tháng vá»i hà ng trÄm tráºn cầu hấp dẫn. Äây là lần Äầu tiên World Cup ÄÆ°á»£c tá» chức tại ba quá»c gia cùng lúc.</li> 609<li style="font-weight: 400;" aria-level="1"><strong>Trá»±c tiếp má»i tráºn cầu</strong>: Saoketv cung cấp lá»ch thi Äấu và link xem trá»±c tiếp: gameswebstore.com Äầy Äá»§, giúp ngưá»i xem dá» dà ng theo dõi Äá»i tuyá»n yêu thÃch. Từ vòng bảng Äến chung kết, má»i tráºn Äấu cá»§a World Cup 2026 Äá»u ÄÆ°á»£c phát sóng vá»i tá»c Äá» á»n Äá»nh, không giáºt lag.</li> 610<li style="font-weight: 400;" aria-level="1"><strong>Cáºp nháºt tin tức, kết quả và phân tÃch chuyên sâu</strong>: Không chá» dừng lại á» viá»c phát sóng trá»±c tiếp, Saoketv còn mang Äến tin tức nóng há»i vá» World Cup 2026. Ngưá»i hâm má» có thá» theo dõi bảng xếp hạng, kết quả bóng Äá hôm nay, tá»· lá» kèo và nháºn Äá»nh chuyên sâu từ các chuyên gia.</li> 611<li style="font-weight: 400;" aria-level="1"><strong>Äá»i ngÅ© bình luáºn viên</strong>: Các BLV cá»§a Saoketv không chá» là ngưá»i dẫn dắt tráºn Äấu mà còn là bạn Äá»ng hà nh cùng khán giả. Há» thưá»ng xuyên tương tác qua phần bình luáºn trá»±c tiếp, trả lá»i câu há»i và chia sẻ cảm nháºn sau má»i tráºn Äấu.</li> 612</ul> 613<p>World Cup 2026 hứa hẹn là giải Äấu bùng ná» cảm xúc và Saoketv sẽ Äá»ng hà nh cùng ngưá»i xem trong từng phút giây ká»ch tÃnh. Hãy truy cáºp Saoketv Äá» sẵn sà ng cháy hết mình cùng World Cup 2026 â nÆ¡i má»i cảm xúc bóng Äá ÄÆ°á»£c thÄng hoa.</p> 614<h2>Nguyên nhân và cách khắc phục lá»i há» thá»ng xem bd Saoketv</h2> 615<div id="attachment_1316" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1316" class="size-full wp-image-1316" src="https://cdn.enjoysmallthings.com/wp-content/uploads/2025/12/sua-loi-khi-khong-vao-duoc-link-xem-bong-da-saoketv-5.jpg" alt="sua loi khi khong vao duoc link xem bong da saoketv 5" width="800" height="400" title="Saoketv - Trang xem trá»±c tiếp bóng Äá rõ nét, á»n Äá»nh 24/7 7" srcset="https://cdn.automarkhistory.com/wp-content/uploads/2025/12/sua-loi-khi-khong-vao-duoc-link-xem-bong-da-saoketv-5.jpg 800w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/sua-loi-khi-khong-vao-duoc-link-xem-bong-da-saoketv-5-300x150.jpg 300w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/sua-loi-khi-khong-vao-duoc-link-xem-bong-da-saoketv-5-768x384.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1316" class="wp-caption-text">Cách sá»a lá»i khi không và o ÄÆ°á»£c link xem bóng Äá Saoketv</p></div> 616<p>Khi xem trá»±c tiếp bóng Äá full HD hôm nay trên Saoketv, Äôi lúc ngưá»i xem có thá» gặp phải má»t sá» lá»i há» thá»ng khiến tráºn Äấu bá» gián Äoạn. Hiá»u rõ nguyên nhân và cách khắc phục sẽ giúp bạn theo dõi tráºn cầu mượt mà , á»n Äá»nh và trá»n vẹn cảm xúc.</p> 617<h3>Nguyên nhân</h3> 618<p>Dù Saoketv luôn chú trá»ng mang Äến chất lượng truyá»n phát tá»t, song không tránh khá»i viá»c xảy ra lá»i trong quá trình xem truc tiep bd.</p> 619<ul> 620<li style="font-weight: 400;" aria-level="1"><strong>Kết ná»i mạng yếu hoặc không á»n Äá»nh</strong>: Äây là nguyên nhân phá» biến nhất khiến video bá» giáºt, Äứng hình hoặc mất tiếng. Khi ÄÆ°á»ng truyá»n Internet yếu, dữ liá»u không thá» tải Äá»§ nhanh Äá» hiá»n thá» hình ảnh liên tục.</li> 621<li style="font-weight: 400;" aria-level="1"><strong>Trình duyá»t chưa ÄÆ°á»£c cáºp nháºt phiên bản má»i</strong>: Nhiá»u lá»i phát sinh khi trình duyá»t web Äã quá cÅ© hoặc chứa bá» nhá» Äá»m (cache) Äầy. Má»t sá» tiá»n Ãch má» rá»ng (extension) cÅ©ng có thá» xung Äá»t vá»i trình phát cá»§a Saoketv, gây lá»i hiá»n thá».</li> 622<li style="font-weight: 400;" aria-level="1"><strong>
622Lá»i máy chá»§ hoặc quá tải ngưá»i xem</strong>: Và o những tráºn cầu lá»n, lượng ngưá»i truy cáºp tÄng Äá»t biến khiến há» thá»ng phát bá» quá tải. Khi Äó, ngưá»i xem có thá» gặp lá»i âkhông truy cáºp ÄÆ°á»£câ hoặc âÄang bảo trìâ.</li> 623<li style="font-weight: 400;" aria-level="1"><strong>Phần má»m bảo máºt hoặc tưá»ng lá»a chặn truy cáºp</strong>: Má»t sá» thiết bá» có phần má»m diá»t virus hoặc tưá»ng lá»a tá»± Äá»ng chặn các luá»ng phát trá»±c tiếp. Khi Äó, trang Saoketv có thá» không hiá»n thá» hình ảnh hoặc bá» giá»i hạn kết ná»i. Äây là nguyên nhân Ãt gặp nhưng vẫn cần lưu ý khi không thá» truy cáºp dù mạng á»n Äá»nh.</li> 624</ul> 625<h3>Khắc phục</h3> 626<p>Sau khi xác Äá»nh nguyên nhân, ngưá»i xem có thá» chá»§ Äá»ng áp dụng má»t sá» biá»n pháp ÄÆ¡n giản Äá» khắc phục.</p> 627<ul> 628<li style="font-weight: 400;" aria-level="1"><strong>Cáºp nháºt hoặc Äá»i sang trình duyá»t má»i</strong>: Ngưá»i dùng nên sá» dụng các trình duyá»t hiá»n Äại như Chrome, Edge hoặc Firefox bản má»i nhất. Viá»c cáºp nháºt giúp tương thÃch tá»t hÆ¡n vá»i công nghá» phát trá»±c tiếp bóng Äá hôm nay. Äá»ng thá»i, nên xóa bá» nhá» cache và cookie Äá» tránh lá»i tải video hoặc hiá»n thá» sai.</li> 629<li style="font-weight: 400;" aria-level="1"><strong>Nâng cấp thiết bá» và Äóng bá»t ứng dụng chạy ngầm</strong>: Nếu thiết bá» quá yếu, viá»c xem video chất lượng cao sẽ dá» bá» giáºt. Bạn có thá» nâng cấp phần cứng, hoặc tạm tắt các ứng dụng ná»n không cần thiết Äá» tÄng hiá»u suất.</li> 630<li style="font-weight: 400;" aria-level="1"><strong>Tạm tắt phần má»m bảo máºt khi cần thiết</strong>: Trong má»t sá» trưá»ng hợp, bạn nên tạm thá»i tắt tưá»ng lá»a hoặc phần má»m diá»t virus Äá» kiá»m tra khả nÄng truy cáºp. Sau khi xem xong, hãy báºt lại Äá» Äảm bảo an toà n cho thiết bá».</li> 631<li style="font-weight: 400;" aria-level="1"><strong>Thá» Äá»i ÄÆ°á»ng dẫn hoặc link dá»± phòng</strong>
631: Khi máy chá»§ Äang quá tải, Saoketv thưá»ng cung cấp nhiá»u ÄÆ°á»ng link khác nhau cho cùng má»t tráºn Äấu. Hãy thá» chuyá»n sang link dá»± phòng Äá» Äảm bảo xem á»n Äá»nh.</li> 632</ul> 633<h2>Quy trình Äá» xem bóng Äá trên trang Saoketv dá» dà ng</h2> 634<div id="attachment_1314" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1314" class="size-full wp-image-1314" src="https://cdn.enjoysmallthings.com/wp-content/uploads/2025/12/huong-dan-xem-bong-da-truc-tiep-tren-saoketv-5.jpg" alt="huong dan xem bong da truc tiep tren saoketv 5" width="800" height="400" title="Saoketv - Trang xem trá»±c tiếp bóng Äá rõ nét, á»n Äá»nh 24/7 8" srcset="https://cdn.automarkhistory.com/wp-content/uploads/2025/12/huong-dan-xem-bong-da-truc-tiep-tren-saoketv-5.jpg 800w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/huong-dan-xem-bong-da-truc-tiep-tren-saoketv-5-300x150.jpg 300w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/huong-dan-xem-bong-da-truc-tiep-tren-saoketv-5-768x384.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1314" class="wp-caption-text">Hưá»ng dẫn các bưá»c xem bóng Äá trá»±c tiếp trên Saoketv</p></div> 635<p>Saoketv mang Äến cho ngưá»i dùng trải nghiá»m xem bd truc tiep keo nha cai nhanh, mượt và dá» thao tác dù á» bất kỳ Äâu. Äá» giúp bạn theo dõi các tráºn cầu yêu thÃch má»t cách trá»n vẹn, dưá»i Äây là quy trình chi tiết và dá» thá»±c hiá»n nhất.</p> 636<h3>Má» trang web Saoketv bằng trình duyá»t Internet</h3> 637<p>Äá» bắt Äầu, hãy má» trình duyá»t bạn thưá»ng dùng như Chrome, Safari hoặc Cá»c Cá»c và gõ âSaoketvâ và o thanh tìm kiếm. Chá»n Äúng Äá»a chá» trang web chÃnh thức Äá» Äảm bảo an toà n và tránh các ÄÆ°á»ng link giả mạo. Khi truy cáºp thà nh công, giao diá»n chÃnh sẽ hiá»n thá» danh sách các tráºn Äấu sắp và Äang diá» n ra.</p> 638<h3>Tìm và chá»n tráºn Äấu yêu thÃch</h3> 639<p>Ngay tại trang chá»§, Saoketv hiá»n thá» rõ rà ng lá»ch thi Äấu cá»§a các giải bóng lá»n như Ngoại Hạng Anh, C1, La Liga hay Serie A. Bạn có thá» cuá»n xuá»ng Äá» tìm Äá»i bóng mình yêu thÃch hoặc sá» dụng thanh tìm kiếm Äá» chá»n nhanh. Khi nhấp và o tên tráºn Äấu, trình phát video sẽ tá»± Äá»ng má» ra trong và i giây. Giao diá»n ÄÆ¡n giản, rõ rà ng giúp ai cÅ©ng có thá» thao tác dá» dà ng, ká» cả ngưá»i má»i sá» dụng.</p> 640<h3>Cấu hình chất lượng video phù hợp vá»i ÄÆ°á»ng truyá»n</h3> 641<p>Khi tráºn Äấu bắt Äầu phát, ngưá»i xem bd trá»±c tuyến có thá» Äiá»u chá»nh Äá» phân giải hình ảnh từ thấp Äến cao tùy theo tá»c Äá» mạng. Khi Internet Äạt tá»c Äá» cao, bạn có thá» theo dõi tráºn Äấu sắc nét và mượt mà Ỡchế Äá» Full HD. Nếu mạng yếu, hãy chá»n chất lượng thấp hÆ¡n Äá» hình ảnh tải nhanh và không bá» gián Äoạn.</p> 642<h3>Táºn hưá»ng tráºn Äấu và tham gia tương tác trá»±c tiếp</h3> 643<p>Khi Äã á»n Äá»nh chất lượng xem, bạn chá» cần ngá»i lại và táºn hưá»ng bầu không khà sôi Äá»ng cá»§a tráºn cầu. Saoketv còn tÃch hợp khung bình luáºn trá»±c tiếp Äá» ngưá»i xem bd trá»±c tiếp chia sẻ cảm xúc hoặc dá»± Äoán tá» sá» cùng cá»ng Äá»ng yêu bóng Äá. Những bình luáºn, phân tÃch và phản ứng cá»§a khán giả giúp tráºn Äấu thêm phần thú vá».</p> 644<h2>Các Äáng giá cá»§a ngưá»i dùng vá» trang trá»±c tiếp bóng Äá saoketv</h2> 645<div id="attachment_1319" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1319" class="size-full wp-image-1319" src="https://cdn.enjoysmallthings.com/wp-content/uploads/2025/12/y-kien-nguoi-dung-ve-xem-bong-da-tren-saoketv-5.jpg" alt="y kien nguoi dung ve xem bong da tren saoketv 5" width="800" height="400" title="Saoketv - Trang xem trá»±c tiếp bóng Äá rõ nét, á»n Äá»nh 24/7 9" srcset="https://cdn.automarkhistory.com/wp-content/uploads/2025/12/y-kien-nguoi-dung-ve-xem-bong-da-tren-saoketv-5.jpg 800w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/y-kien-nguoi-dung-ve-xem-bong-da-tren-saoketv-5-300x150.jpg 300w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/y-kien-nguoi-dung-ve-xem-bong-da-tren-saoketv-5-768x384.jpg 768w" sizes="auto, (max-width: 800px) 100v
645w, 800px" /><p id="caption-attachment-1319" class="wp-caption-text">à kiến ngưá»i dùng vá» trải nghiá»m xem bóng Äá trên SaokeTV</p></div> 646<p>Trang trá»±c tiếp bóng Äá SaokeTV Äã nhanh chóng trá» thà nh Äá»a chá» quen thuá»c vá»i những ngưá»i yêu thÃch bóng Äá. Dưá»i Äây là tá»ng hợp các phản há»i từ cá»ng Äá»ng ngưá»i xem vá» trải nghiá»m.</p> 647<ul> 648<li style="font-weight: 400;" aria-level="1"><strong>Trần Minh</strong>: âTôi Äã thá» nhiá»u trang xem bd truc tuyen, nhưng Saoketv vẫn là lá»±a chá»n hà ng Äầu. Má»i tráºn Äấu tôi quan tâm Äá»u có á» Äây, không cần phải tìm link từ nhiá»u nguá»n.â</li> 649<li style="font-weight: 400;" aria-level="1"><strong>Nguyá» n Hoà ng</strong>: âTôi thÃch Saoketv vì tá»c Äá» load video nhanh, không phải chá» lâu như nhiá»u trang khác. Ãm thanh sá»ng Äá»ng, Äúng chuẩn chất lượng HD. Tôi cÅ©ng Äánh giá cao viá»c trang web Ãt quảng cáo gây phiá»n, giúp trải nghiá»m xem bóng Äá trá»n vẹn hÆ¡n.â</li> 650<li style="font-weight: 400;" aria-level="1"><strong>Ngá»c Hân</strong>: âMá»t Äiá»m cá»ng nữa là Saoketv cho phép bình luáºn trá»±c tiếp ngay trên video. Tôi vừa xem tráºn Äấu vừa trao Äá»i cảm xúc vá»i các fan khác, tạo cảm giác như Äang xem cùng bạn bè. Tháºt sá»± rất thú vá» và tiá»n lợi.â</li> 651<li style="font-weight: 400;" aria-level="1"><strong>Minh Tú</strong>: âTôi thưá»ng xem trá»±c tiếp bóng Äá bằng Äiá»n thoại vÃ ÄÆ°á»ng truyá»n 4G, nhưng Saoketv vẫn chạy rất á»n Äá»nh. Không bá» Äứng hình hay giáºt lag như nhiá»u trang khác.â</li> 652</ul> 653<h2>FAQ – Danh mục câu há»i thưá»ng gặp khi xem trá»±c tuyến bóng Äá tại Saoketv</h2> 654<div id="attachment_1311" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1311" class="size-full wp-image-1311" src="https://cdn.enjoysmallthings.com/wp-content/uploads/2025/12/cau-hoi-pho-bien-cua-nguoi-xem-bong-da-tren-saoketv-7.jpg" alt="cau hoi pho bien cua nguoi xem bong da tren saoketv 7" width="800" height="400" title="Saoketv - Trang xem trá»±c tiếp bóng Äá rõ nét, á»n Äá»nh 24/7 10" srcset="https://cdn.automarkhistory.com/wp-content/uploads/2025/12/cau-hoi-pho-bien-cua-nguoi-xem-bong-da-tren-saoketv-7.jpg 800w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/cau-hoi-pho-bien-cua-nguoi-xem-bong-da-tren-saoketv-7-300x150.jpg 300w, https://cdn.automarkhistory.com/wp-content/uploads/2025/12/cau-hoi-pho-bien-cua-nguoi-xem-bong-da-tren-saoketv-7-768x384.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1311" class="wp-caption-text">Câu há»i phá» biến cá»§a ngưá»i xem bóng Äá trên Saoketv</p></div> 655<p>Khi xem bÄ trá»±c tiếp hôm nay ngưá»i hâm má» Äôi khi gặp phải má»t sá» tình huá»ng khiến trải nghiá»m bá» gián Äoạn hoặc cần ÄÆ°á»£c giải Äáp ká»p thá»i. Dưá»i Äây là những thắc mắc thưá»ng gặp và lá»i giải thÃch cụ thá» Äá» bạn sá» dụng Saoketv má»t cách thuáºn tiá»n và an toà n nhất.</p> 656<h3>Là m sao biết Äâu là link xembd chÃnh thức cá»§a Saoketv?</h3> 657<p>Hiá»n nay, có nhiá»u trang giả mạo lợi dụng tên Saoketv Äá» lừa ngưá»i dùng truy cáºp và o ÄÆ°á»ng dẫn không an toà n. Äá» tránh Äiá»u nà y, bạn nên tìm link chÃnh thức thông qua trang fanpage, kênh cá»ng Äá»ng hoặc kết quả tìm kiếm có dấu âhttps://â trên Google. Ngoà i ra, Saoketv thưá»ng xuyên cáºp nháºt ÄÆ°á»ng dẫn má»i trên các trang mạng xã há»i chÃnh thức Äá» ngưá»i xem dá» dà ng nháºn biết và truy cáºp.</p> 658<h3>Vì sao Äôi khi không xem ÄÆ°á»£c tráºn Äấu trên Saoketv?</h3> 659<p>Tình trạng không xem ÄÆ°á»£c có thá» xảy ra do sá»± cá» ÄÆ°á»ng truyá»n, trình duyá»t bá» lá»i hoặc server quá tải trong giá» cao Äiá»m. Bạn nên tải lại trang, Äá»i thiết bá» khác hoặc kiá»m tra kết ná»i mạng. Trong trưá»ng hợp sá»± cá» Äến từ phÃa há» thá»ng, Saoketv sẽ khắc phục và cáºp nháºt link má»i trong thá»i gian sá»m nhất Äá» ngưá»i dùng tiếp tục xem mà không bá» gián Äoạn.</p> 660<h3>Có cần tà i khoản Äá» xem bóng Äá trá»±c tuyến trên Saoketv không?</h3> 661<p>Không. Saoketv cho phép ngưá»i dùng xem bóng Äá trá»±c tiếp hoà n toà n miá» n phà mà không yêu cầu ÄÄng ký hay ÄÄng nháºp. Bạn chá» cần truy cáºp Äúng ÄÆ°á»ng dẫn là có thá» xem ngay. Nếu gặp trang yêu
661cầu nháºp thông tin cá nhân, hãy dừng lại vì Äó có thá» là website giả mạo, không thuá»c há» thá»ng Saoketv.</p> 662<h3>Saoketv có há» trợ xem lại tráºn Äấu cÅ© không?</h3> 663<p>Saoketv thưá»ng cáºp nháºt phần âHighlightâ, âVideo ngắnâ và kết quả bóng Äá sau khi tráºn Äấu kết thúc. Ngưá»i xem có thá» truy cáºp chuyên mục nà y Äá» theo dõi lại các pha bóng hay, bà n thắng Äẹp hoặc tình huá»ng ná»i báºt</p> 664<h3>Là m sao Äá» cáºp nháºt lá»ch thi Äấu và giá» phát sóng má»i nhất?</h3> 665<p>Tại trang chá»§ Saoketv, mục âLá»ch thi Äấuâ luôn ÄÆ°á»£c cáºp nháºt má»i ngà y vá»i Äầy Äá»§ thông tin giá» phát sóng, Äá»i hình và sân váºn Äá»ng. Bạn cÅ©ng có thá» theo dõi fanpage chÃnh thức Äá» nháºn thông báo vá» các tráºn cầu sắp diá» n ra. Tất cả giúp bạn không bá» lỡ bất kỳ tráºn bóng nà o, dù là giải quá»c ná»i hay quá»c tế.</p> 666<h3>Có cần trả phà khi xem bóng Äá trên Saoketv không?</h3> 667<p>Saoketv cung cấp dá»ch vụ xem bóng Äá miá» n phà cho toà n bá» ngưá»i hâm má». Má»i tráºn Äấu Äá»u ÄÆ°á»£c phát truc tiep bong da mà không yêu cầu thanh toán hay ÄÄng ký gói thà nh viên. Tuy nhiên, má»t sá» ná»i dung Äặc biá»t hoặc sá»± kiá»n lá»n có thá» ÄÆ°á»£c giá»i hạn trong thá»i gian nhất Äá»nh, và thông tin nà y sẽ luôn ÄÆ°á»£c công bá» công khai trưá»c khi phát sóng.</p> 668<h2>Tá»ng kết</h2> 669<p>Saoketv Äã trá» thà nh lá»±a chá»n quen thuá»c cá»§a cá»ng Äá»ng ngưá»i hâm má» bóng Äá Viá»t Nam. NÆ¡i Äây không chá» mang Äến những tráºn cầu Äá»nh cao, mà còn kết ná»i cảm xúc và niá»m Äam mê cá»§a hà ng triá»u khán giả. Má»i lần xem bd truc tuyen hom nay là má»t hà nh trình sá»ng trá»n cùng bóng Äá, từ những pha bóng nghẹt thá» Äến giây phút Än mừng chiến thắng.</p> 670 </div> 671 </div> 672 </div> 673 </div> 674 </div> 675</section> 676 </main> 677
677<script> 678// Sample data (tráºn Äấu) 679const matches = {}; 680</script>
680 681<!-- Footer --> 682<!-- <footer class="footer"> 683 <div class="container"> 684 <div class="footer__content"> 685 <p style="font-size: 14px"> 686 Bản quyá»n bá»i 687 <a href="#"><span class="text-primary">CakhiaTV</span></a> - All 688 rights reserved 689 </p> 690 </div> 691 </div> 692 </footer> --> 693 694<footer style=" padding: 30px 15px;"> 695 <div class="container"> 696 <div class="footer-column"> 697 <div class="footer-logo"> 698 <img src="https://cdn.automarkhistory.com/wp-content/themes/cakhiatv/assets/images/saoketvlogo.png" alt="Xoilac TV" style="vertical-align: middle; height: 90px;"> 699 </div> 700 <p class="footer-descript"> 701 <p><a href="/"><strong>Saoketv</strong></a> là ná»n tảng trá»±c tiếp bóng Äá ÄÆ°á»£c nhiá»u ngưá»i tin chá»n theo dõi các tráºn Äấu lá»n nhá», từ giải quá»c ná»i Äến quá»c tế, vá»i hình ảnh sắc nét và âm thanh rõ rà ng. Sao ke tv không chá» phát sóng bóng Äá trá»±c tiếp uy tÃn và miá» n phà mà trang còn cáºp nháºt lá»ch thi Äấu, tá»· sá» và thông tin bóng Äá liên tục, giúp ngưá»i xem bóng Äá nắm bắt diá» n biến nhanh chóng.</p> 702 </p> 703 704 705 706 707 </div> 708 709 <div class="footer-column list"> 710 <div class="footer-title"> 711 DANH MỤC 712 </div> 713 <ul> 714<li><strong><a href="/dieu-khoan-su-dung">Äiá»u khoản sá» dụng</a></strong></li> 715<li><strong><a href="/chinh-sach-bao-mat">ChÃnh sách bảo máºt</a></strong></li> 716<li><strong><a href="/mien-tru-trach-nhiem">Miá» n trừ trách nhiá»m</a></strong></li> 717<li><a href="/lien-he"><strong>Liên há»</strong></a></li> 718</ul> 719 </div> 720 721 722 723 <div class="footer-column"> 724 <div class="footer-title"> 725 THÃNG TIN CHUNG 726 </div> 727 <ul> 728<li class="footer-text"><strong>Tên doanh nghiá»p</strong>: <strong>SAOKETV</strong></li> 729<li class="footer-text"><strong>Sá» Äiá»n thoại</strong>: 0938 368 997</li> 730<li class="footer-text"><strong>Email</strong>: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0271636d69677674767660663a3a3b42656f636b6e2c616d6f">[email protected]</a></li> 731<li class="footer-text"><strong>Äá»a chá»</strong>: <a href="https://maps.app.goo.gl/fxEF76cXCfRphGTL9">219/3 Trần Hưng Äạo, Phưá»ng Cô Giang, Quáºn 1, Thà nh phá» Há» Chà Minh, Vietnam</a></li> 732<li class="footer-text"><strong>Website</strong>: <a href="/">https://gameswebstore.com/</a></li> 733</ul> 734 <div style="margin-top: 15px;"> 735 <a href="#"><img src="https://cdn.automarkhistory.com/wp-content/wp-content/uploads/2025/04/icon-facebook.webp" alt="Facebook" style="width: 24px; margin: 0 5px;"></a> 736 <a href="#" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/04/twitter_x-logo-freelogovectors.net_.png" alt="Twitter" style="width: 24px; margin: 0 5px;"></a> 737 <a href="#" rel="nofollow" target="_blank"><img src="https://cdn.automarkhistory.com/wp-content/wp-content/uploads/2025/04/pngimg.com-twitch_PNG28.png" alt="Twitch" style="width: 24px; margin: 0 5px;"></a> 738 <a href="#" rel="nofollow" target="_blank"><img src="https://cdn.automarkhistory.com/wp-content/wp-content/uploads/2025/04/Youtube_logo.png" alt="Youtube" style="width: 24px; margin: 0 5px;"></a> 739 <a href="#" rel="nofollow" target="_blank"><img src="https://cdn.automarkhistory.com/wp-content/wp-content/uploads/2025/04/reddit-logo-1.png" alt="Reddit" style="width: 24px; margin: 0 5px;"></a> 740 <a href="#" rel="nofollow" target="_blank"><img src="https://cdn.automarkhistory.com/wp-content/wp-content/uploads/2025/04/pngimg.com-pinterest_PNG63.png" alt="Pinterest" style="width: 24px; margin: 0 5px;"></a> 741 <a href="#" rel="nofollow" target="_blank"><img src="https://cdn.automarkhistory.com/wp-content/wp-content/uploads/2025/04/free-tumblr-logo-icon-2434-thumb.png" alt="Tumblr" style="width: 24px; margin: 0 5px;"></a> 742 </div> 743 </div> 744 745 746 747 </div> 748 749 750 751 752</footer> 753 754 755<button onclick="scrollToTop()" id="scrollTopBtn" title="Go to top"> 756 <svg viewBox="0 0 24 24"> 757 <path 758 d="M13,20H11V8L5.5,13.5L4.08,12.08L12,4.16L19.92,12.08L18.5,13.5L13,8V20Z"></path> 759 </svg> 760</button>
vendor: 110 bytes, lines 760-762
760 761 762<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
762<script src="https://cdn.automarkhistory.com/wp-content/themes/cakhiatv/assets/js/main.js"></script>
762 763
764<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"005e8f941b7f4ea08939c08c22aed489","r":1,"spa":2}' crossorigin="anonymous"></script>
764 765</body> 766
766<script> 767 if ('serviceWorker' in navigator) { 768 window.addEventListener('load', function () { 769 navigator.serviceWorker.register('/sw.js') 770 .then(function (reg) { /*console.log('[SW] â Registered, scope:', reg.scope);*/ }) 771 .catch(function (err) { /*console.warn('[SW] Registration failed:', err);*/ }); 772 }); 773 } 774 </script>
774 775
775<script type="speculationrules"> 776{"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"}]} 777</script>
777 778
778<script src="https://www.automarkhistory.com/js/websocket-client.js"></script>
778 779 <style> 780 @keyframes spin { 781 0% { 782 transform: rotate(0deg); 783 } 784 785 100% { 786 transform: rotate(360deg); 787 } 788 } 789 790 .loading-spinner { 791 animation: spin 1s linear infinite; 792 } 793 794 #match-list { 795 position: relative; 796 } 797 798 #match-list>div[style*="display: flex"] { 799 width: 100% !important; 800 max-width: 100% !important; 801 } 802 </style> 803
803<script> 804 // âââ LocalStorage Cache (giá»ng colatv40.live) ââââââââââââââââ 805 const LS_MATCHES_KEY = 'colatv_matches_v1'; 806 const LS_MATCHES_TTL = 10 * 60 * 1000; // 10 phút 807 808 function loadMatchesFromCache() { 809 try { 810 const raw = localStorage.getItem(LS_MATCHES_KEY); 811 if (!raw) return null; 812 const { data, ts } = JSON.parse(raw); 813 if (!data || !Array.isArray(data) || data.length === 0) return null; 814 if (Date.now() - ts > LS_MATCHES_TTL) return null; 815 return data; 816 } catch { return null; } 817 } 818 819 function saveMatchesToCache(matches) { 820 try { 821 if (!matches || matches.length === 0) return; 822 localStorage.setItem(LS_MATCHES_KEY, JSON.stringify({ data: matches, ts: Date.now() })); 823 } catch { /* localStorage full, bá» qua */ } 824 } 825 // âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 826 827 // Tá»i ưu: Cache DOM selectors Äá» tránh query lại 828 const filterCountCache = { 829 countAllType: null, 830 countAll: null, 831 countElements: {}, 832 noBlvElement: null, 833 liveElement: null, 834 hotElement: null, 835 todayElement: null, 836 tomorrowElement: null, 837 initialized: false 838 }; 839 840 function initFilterCountCache() { 841 if (filterCountCache.initialized) return; 842 843 filterCountCache.countAllType = document.getElementById('count-all-type'); 844 filterCountCache.countAll = document.getElementById('count-all'); 845 filterCountCache.noBlvElement = document.getElementById('noblv-live'); 846 filterCountCache.liveElement = document.getElementById('count-live'); 847 filterCountCache.hotElement = document.getElementById('count-hot'); 848 filterCountCache.todayElement = document.getElementById('count-today'); 849 filterCountCache.tomorrowElement = document.getElementById('count-tomorrow'); 850 851 ['football', 'basketball', 'tennis', 'volleyball'].forEach(sport => { 852 filterCountCache.countElements[sport] = document.getElementById(`count-${sport}`); 853 }); 854 855 filterCountCache.initialized = true; 856 } 857 858 // Hà m Äếm sá» lượng tráºn Äấu theo bá» lá»c - Tá»i ưu vá»i cached selectors 859 function updateFilterCounts(visibleMatchCards, allMatchCards) { 860 initFilterCountCache(); 861 862 if (filterCountCache.countAllType) { 863 filterCountCache.countAllType.textContent = allMatchCards.length; 864 } 865 866 if (filterCountCache.countAll) { 867 filterCountCache.countAll.textContent = visibleMatchCards.length; 868 } 869 870 ['football', 'basketball', 'tennis', 'volleyball'].forEach(sport => { 871 const countElement = filterCountCache.countElements[sport]; 872 if (countElement) { 873 const count = Array.from(allMatchCards).filter(card => card.dataset.sport === sport).length; 874 countElement.textContent = count; 875 } 876 }); 877 878 if (filterCountCache.noBlvElement) { 879 const noBlvCount = Array.from(visibleMatchCards).filter(card => card.dataset.blv === 'false').length; 880 filterCountCache.noBlvElement.textContent = noBlvCount; 881 } 882 883 if (filterCountCache.liveElement) { 884 const noBlvCount = Array.from(visibleMatchCards).filter(card => card.dataset.blv === 'false').length; 885 const liveCount = Array.from(visibleMatchCards).filter(card => card.dataset.live === 'true').length - noBlvCount; 886 filterCountCache.liveElement.textContent = liveCount; 887 } 888 889 if (filterCountCache.hotElement) { 890 const noBlvCount = Array.from(visibleMatchCards).filter(card => card.dataset.blv === 'false').length; 891 const hotCount = Array.from(visibleMatchCards).filter(card => card.dataset.hot === 'true').length - noBlvCount; 892 filterCountCache.hotElement.textContent = hotCount; 893 } 894 895 const today = new Date().toISOString().split('T')[0]; 896 const tomorrow = new Date(Date.now() + 86400000).toISOString().split('T')[0]; 897 898 if (filterCountCache.todayElement) { 899 const todayCount = Array.from(visibleMatchCards).filter(card => card.dataset.date === today).length; 900 filterCountCache.todayElement.textContent = todayCount; 901 } 902 903 if (filterCountCache.tomorrowElement) { 904 const tomorrowCount = Array.from(visibleMatchCards).filter(card => card.dataset.date === tomorrow).length; 905 filterCountCache.tomorrowElement.textContent = tomorrowCount; 906 } 907 } 908 909 // Hà m chuyá»n Äá»i ID môn thá» thao thà nh tên 910 function sportName(sportId) { 911 const sports = { 912 1: 'football', 913 2: 'basketball', 914 }; 915 return sports[sportId] || 'unknown'; 916 } 917 918 // Hà m xá» lý timestamp 919 function fixtime(timestamp) { 920 return isNaN(timestamp) ? new Date(timestamp).getTime() : timestamp; 921 } 922 923 // Hà m Äá»nh dạng ngà y giá» 924 function formatDate(timestamp, format) { 925 const date = new Date(timestamp * 1000); 926 const day = String(date.getDate()).padStart(2, '0');
927 const month = String(date.getMonth() + 1).padStart(2, '0'); 928 const year = date.getFullYear(); 929 const hours = String(date.getHours()).padStart(2, '0'); 930 const minutes = String(date.getMinutes()).padStart(2, '0'); 931 if (format === 'd/m') return `${day}/${month}`; 932 if (format === 'Y-m-d') return `${year}-${month}-${day}`; 933 if (format === 'H:i') return `${hours}:${minutes}`; 934 return date; 935 } 936 937 // Hà m lấy domain API random Äá» tránh Cloudflare rate limit 938 function getApiDomain() { 939 const domains = ['api.gvapi.cc']; 940 941 // Random chá»n má»t domain 942 const index = Math.floor(Math.random() * domains.length); 943 const selected = domains[index]; 944 945 return 'https://' + selected; 946 } 947 948 // Hà m lấy domain API random cho video-home (pinned-home) 949 function getVideoHomeApiDomain() { 950 const domains = ['video-home.gvapi.cc']; 951 952 // Random chá»n má»t domain 953 const index = Math.floor(Math.random() * domains.length); 954 const selected = domains[index]; 955 956 return 'https://' + selected; 957 } 958 959 // Hà m hiá»n thá» loading 960 function showLoading() { 961 const matchList = getMatchList(); 962 if (!matchList) return; 963 964 // Hiá»n thá» trá»±c tiếp trong match-list, thay thế toà n bá» ná»i dung 965 matchList.innerHTML = ` 966 <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;"> 967 <div class="loading-spinner" style="display: block; width: 50px; height: 50px; border: 4px solid #f3f3f3;
967 border-top: 4px solid #3498db; border-radius: 50%; animation: spin 1s linear infinite; margin: 0 auto;"></div> 968 <p style="margin-top: 20px; color: #666; font-size: 16px; text-align: center; width: 100%;">Äang tải dữ liá»u...</p> 969 </div> 970 `; 971 } 972 973 // Hà m hiá»n thá» lá»i vá»i các button Äá» xuất 974 function showErrorWithSuggestions() { 975 const matchList = getMatchList(); 976 if (!matchList) return; 977 978 const suggestionLinks = [ 979 { name: 'iotditr.com', url: 'https://iotditr.com' }, 980 { name: 'cntsiend.com', url: 'https://cntsiend.com' }, 981 { name: 'euwygrb.com', url: 'https://euwygrb.com' }, 982 { name: 'ppoemlg.com', url: 'https://ppoemlg.com' }, 983 { name: 'eyhtldu.com', url: 'https://eyhtldu.com' } 984 ]; 985 986 const buttonsHtml = suggestionLinks.map(link => 987 `<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>` 988 ).join(''); 989 990 // Hiá»n thá» trá»±c tiếp trong match-list, thay thế toà n bá» ná»i dung 991 matchList.innerHTML = ` 992 <div style="text-align: center; padding: 60px 20px; width: 100%; min-height: 400px; display: flex; flex-direction: column; justify-content: center; align-items: center;"> 993 <div style="margin-bottom: 20px;"> 994 <svg width="64" height="64" viewBox="0 0 24 24" fill="none" stroke="#e74c3c" stroke-width="2" style="margin: 0 auto; display: block;"> 995 <circle cx="12" cy="12" r="10"></circle> 996 <line x1="12" y1="8" x2="12" y2="12"></line> 997 <line x1="12" y1="16" x2="12.01" y2="16"></line> 998 </svg> 999 </div> 1000 <h3 style="color: #e74c3c; margin-bottom: 15px; font-size: 24px; font-weight: bold;">Há» thá»ng gặp sá»± cá»</h3> 1001 <p style="color: #666; margin-bottom: 30px; font-size: 16px; max-width: 500px;">Bạn có thá» chá»n kênh khác:</p> 1002 <div style="display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; width: 100%; max-width: 800px;"> 1003 ${buttonsHtml} 1004 </div> 1005 </div> 1006 `; 1007 } 1008 1009 // Hà m fetch vá»i timeout 1010 function fetchWithTimeout(url, timeout = 10000) { 1011 return Promise.race([ 1012 fetch(url), 1013 new Promise((_, reject) => 1014 setTimeout(() => reject(new Error('Request timeout')), timeout) 1015 ) 1016 ]); 1017 } 1018 1019 // Hà m lấy dữ liá»u tráºn Äấu từ API và render 1020 async function refreshMatches() { 1021 const matchList = getMatchList(); 1022 if (!matchList) { 1023 console.error('Không tìm thấy phần tá» match-list'); 1024 return; 1025 } 1026 1027 // Chá» hiá»n thá» loading nếu chưa có data từ cache 1028 if (!matchList.querySelector('.match-card')) { 1029 showLoading(); 1030 } 1031 1032 try { 1033 const apiBase = getApiDomain(); 1034 const response = await fetchWithTimeout(apiBase + '/api/matches?t=' + new Date().getTime(), 10000); 1035 1036 if (!response.ok) { 1037 throw new Error('Lá»i khi lấy dữ liá»u API: ' + response.status); 1038 } 1039 1040 const datas = await response.json(); 1041 1042 if (!datas.data || typeof datas.data !== 'object') { 1043 throw new Error('Cấu trúc dữ liá»u API không hợp lá»'); 1044 } 1045 1046 const newMatches = []; 1047 const matchesByGroup = {}; // Nhóm matches theo competitionName 1048 1049 for (const [key, data] of Object.entries(datas.data)) { 1050 // Bảo vá» nếu anchorAppointmentVoList không phải array 1051 const anchorList = Array.isArray(data.anchorAppointmentVoList) ? data.anchorAppointmentVoList : []; 1052 //if (!anchorList.length) continue; 1053 1054 // Bá» các tráºn "Live streaming" 1055 if (anchorList[0]?.nickName === 'Live streaming') continue; 1056 1057 // Bảo vá» tá» sá» 1058 const homeScoreArr = Array.isArray(data.homeScore) ? data.homeScore : []; 1059 const awayScoreArr = Array.isArray(data.awayScore) ? data.awayScore : []; 1060 const homeScore = homeScoreArr.length ? homeScoreArr[0] : 0; 1061 const awayScore = awayScoreArr.length ? awayScoreArr[0] : 0; 1062 1063 // Nếu match có house_id khác null, thêm ?houseId=... và o slug 1064 let slug = key; 1065 if (data.house_id && data.house_id !== null) { 1066 slug = `${key}?houseId=${data.house_id}`; 1067 } 1068 1069 const competitionName = data.competitionName || 'NBA'; 1070 const matchData = { 1071 id: 2, 1072 slug: slug, 1073 sport: sportName(data.sportId), 1074 live: data.matchStatus === 2, 1075 hot: true, 1076 blv: anchorList[0]?.nickName !== 'Live streaming', 1077 date: formatDate(fixtime(data.matchTime), 'd/m'), 1078 datesearch: formatDate(fixtime(data.matchTime), 'Y-m-d'), 1079 hour: formatDate(fixtime(data.matchTime), 'H:i'),
1080 competitionName: competitionName, 1081 teams: [ 1082 data.homeTeamName || 'Team C', 1083 data.awayTeamName || 'Team D' 1084 ], 1085 score: `${homeScore}:${awayScore}`, 1086 videoUrl: data.videoUrl || 'https://live2.example.com', 1087 animationUrl: data.animationUrl || 'https://animation.example.com', 1088 data: data 1089 }; 1090 1091 newMatches.push(matchData); 1092 1093 // Nhóm matches theo competitionName 1094 if (!matchesByGroup[competitionName]) { 1095 matchesByGroup[competitionName] = []; 1096 } 1097 matchesByGroup[competitionName].push(matchData); 1098 } 1099 1100 // Gá»i hà m render vá»i danh sách tráºn Äấu má»i 1101 renderAllMatches(newMatches); 1102 filterMatches('parent', newMatches); 1103 saveMatchesToCache(newMatches); // 1104 } catch (error) { 1105 console.error('Lá»i khi là m má»i tráºn Äấu:', error); 1106 // Äã 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. 1107 // Há» thá»ng sẽ âm thầm giữ nguyên giao diá»n SSR và Äợi Socket cáºp nháºt. 1108 } 1109 } 1110 1111 function createMatchCard(match) { 1112 // Bảo vá» dữ liá»u, tránh crash nếu cache cÅ© thiếu data 1113 if (!match || !match.data) return ''; 1114 1115 // Bảo vá» anchorAppointmentVoList 1116 const anchorList = Array.isArray(match.data.anchorAppointmentVoList) 1117 ? match.data.anchorAppointmentVoList 1118 : []; 1119 1120 // Xá» lý slug an toà n 1121 const slugStr = match.slug || ''; 1122 const baseSlug = slugStr.includes('?') ? slugStr.split('?')[0] : slugStr; 1123 1124 const nicknames = anchorList.map(item => { 1125 const itemHouseId = item.houseId || ''; 1126 if (itemHouseId !== '') { 1127 const separator = baseSlug.includes('?') ? '&' : '?'; 1128 return `<a href="https://www.automarkhistory.com/truc-tiep/${baseSlug}${separator}houseId=${itemHouseId}" rel="nofollow">${item.nickName}</a>`; 1129 } else { 1130 return `<a href="https://www.automarkhistory.com/truc-tiep/${slugStr}" rel="nofollow">${item.nickName}</a>`; 1131 } 1132 }); 1133 1134 const nicknameString = nicknames.join(' | '); 1135 1136 // Bảo vá» tá» sá» (dùng lại match.score nếu muá»n) 1137 const homeScoreArr = Array.isArray(match.data.homeScore) ? match.data.homeScore : []; 1138 const awayScoreArr = Array.isArray(match.data.awayScore) ? match.data.awayScore : []; 1139 const homeScore = homeScoreArr.length ? homeScoreArr[0] : 0; 1140 const awayScore = awayScoreArr.length ? awayScoreArr[0] : 0; 1141 1142 return ` 1143 <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}"> 1144 <div class="match-card__body"> 1145 <a href="https://www.automarkhistory.com/truc-tiep/${match.slug}" class="link-match" rel="nofollow"></a> 1146 <div class="match-card__header"> 1147 <div class="match-card__league"> 1148 <span>${match.data.competitionName}</span> 1149 </div> 1150 <div class="match-card__status"> 1151 ${match.data.matchStatus == 1 1152 ? '<div class="match-card__status text-warning text-uppercase">CHƯA BẮT ÄẦU</div>' 1153 : match.data.matchStatus == 2 1154 ? '<div class="match-card__status streaming">ÄANG TRá»°C TIẾP</div>' 1155 : match.data.matchStatus == 3 1156 ? '<span class="btn btn--warning text-uppercase">Tạm ngừng phát sóng</span>' 1157 : match.data.matchStatus == 4 1158 ? '<span class="btn btn--danger text-uppercase">Cấm phát sóng vÄ©nh viá» n</span>' 1159 : '<span class="btn btn--secondary text-uppercase">Không xác Äá»nh</span>' 1160 } 1161 </div> 1162 <div class="match-card__time"><span class="match-time">${match.hour} - ${match.date}</span></div> 1163 </div> 1164 <div class="match-card__teams"> 1165 <div class="team home"> 1166 <img src="${match.data.homeTeamLogo}" alt="${match.data.homeTeamName}" class="team__logo">
1167 <span class="team__name">${match.data.homeTeamName}</span> 1168 </div> 1169 <div class="match-card__score">${homeScore} - ${awayScore}</div> 1170 <div class="team"> 1171 <img src="${match.data.awayTeamLogo}" alt="${match.data.awayTeamName}" class="team__logo"> 1172 <span class="team__name">${match.data.awayTeamName}</span> 1173 </div> 1174 </div> 1175 <div class="match-card__info"> 1176 <div class="match-card__stats"> 1177 <div class="match-card__stats-content"> 1178 ${nicknameString} 1179 </div> 1180 </div> 1181 <div class="match-card__odds"> 1182 <a href="https://www.automarkhistory.com/truc-tiep/${match.slug}" class="btn btn--primary" rel="nofollow"> 1183 <span>XEM NGAY</span> 1184 </a> 1185 </div> 1186 </div> 1187 </div> 1188 </div> 1189 `; 1190 } 1191 1192 // Khá»i tạo bá» lá»c 1193 let currentFilters = { 1194 sport: 'all', 1195 live: false, 1196 blv: false, 1197 hot: false, 1198 commentator: false, 1199 date: 'all', 1200 league: 'all' 1201 }; 1202 1203 // Tá»i ưu: Preload video metadata Äá» tÄng tá»c Äá» load khi click và o match 1204 const videoPreloadCache = new Map(); // Cache preloaded videos 1205 function preloadVideoMetadata(videoUrl) { 1206 if (!videoUrl || videoPreloadCache.has(videoUrl)) { 1207 return; // Äã preload rá»i 1208 } 1209 1210 // Mark as preloading 1211 videoPreloadCache.set(videoUrl, { status: 'loading', timestamp: Date.now() }); 1212 1213 // Preload bằng cách tạo video element và load metadata 1214 const video = document.createElement('video'); 1215 video.preload = 'metadata'; // Chá» load metadata, không load toà n bá» video 1216 video.muted = true; 1217 video.playsInline = true; 1218 video.style.display = 'none'; 1219 1220 video.addEventListener('loadedmetadata', function () { 1221 videoPreloadCache.set(videoUrl, { status: 'loaded', timestamp: Date.now() }); 1222 document.body.removeChild(video); 1223 }); 1224 1225 video.addEventListener('error', function () { 1226 videoPreloadCache.set(videoUrl, { status: 'error', timestamp: Date.now() }); 1227 if (document.body.contains(video)) { 1228 document.body.removeChild(video); 1229 } 1230 }); 1231 1232 video.src = videoUrl; 1233 document.body.appendChild(video); 1234 1235 // Cleanup cache sau 5 phút 1236 setTimeout(() => { 1237 videoPreloadCache.delete(videoUrl); 1238 }, 5 * 60 * 1000); 1239 } 1240 1241 // Tá»i ưu: Cache match-list selector 1242 let matchListCache = null; 1243 function getMatchList() { 1244 if (!matchListCache) { 1245 matchListCache = document.getElementById('match-list'); 1246 } 1247 return matchListCache; 1248 } 1249 1250 // Hà m render toà n bá» tráºn Äấu 1251 function renderAllMatches(matches) { 1252 const matchList = getMatchList(); 1253 if (!matchList) { 1254 console.error('Không tìm thấy phần tá» match-list'); 1255 return; 1256 } 1257 1258 // Xóa danh sách cÅ© 1259 matchList.innerHTML = ''; 1260 1261 // Render danh sách má»i 1262 matches.forEach(match => { 1263 if (!match || !match.data) return; // Bá» qua match lá»i 1264 1265 const cardHTML = createMatchCard(match); 1266 if (!cardHTML) return; // Bá» qua nếu không tạo ÄÆ°á»£c thẻ 1267 1268 const tempDiv = document.createElement('div'); 1269 tempDiv.innerHTML = cardHTML.trim(); 1270 const cardElement = tempDiv.firstChild; 1271 if (!cardElement) return; 1272 1273 // Ẩn các tráºn không có bình luáºn viên 1274 /*if (cardElement.getAttribute('data-blv') === 'false') { 1275 cardElement.classList.add('d-none'); 1276 }*/ 1277 1278 // Tá»i ưu: Preload video metadata khi hover và o match card 1279 if (match.data && match.data.videoUrl) { 1280 let preloadTimeout = null; 1281 cardElement.addEventListener('mouseenter', function () { 1282 // Debounce: chá» preload sau 500ms hover 1283 preloadTimeout = setTimeout(() => { 1284 preloadVideoMetadata(match.data.videoUrl); 1285 }, 500); 1286 }); 1287 cardElement.addEventListener('mouseleave', function () { 1288 if (preloadTimeout) { 1289 clearTimeout(preloadTimeout); 1290 preloadTimeout = null; 1291 } 1292 }); 1293 } 1294 1295 matchList.appendChild(cardElement); 1296 }); 1297 1298 // Cáºp nháºt bá» Äếm 1299 const visibleMatches = document.querySelectorAll('.match-card:not(.d-none)'); 1300 updateFilterCounts(visibleMatches, document.querySelectorAll('.match-card')); 1301 } 1302 1303 // Hà m lá»c tráºn Äấu 1304 function filterMatches(type, matches) { 1305 const allCards = document.querySelectorAll('.match-card'); 1306 1307 // Lá»c theo môn thá» thao 1308 const sportFiltered = Array.from(allCards).filter(card => { 1309 const sport = card.dataset.sport; 1310 return currentFilters.sport === 'all' || sport === currentFilters.sport; 1311 }); 1312 1313 let finalFiltered = sportFiltered; 1314 1315 // Ãp dụng các bá» lá»c khác 1316 if (currentFilters.live) { 1317 finalFiltered = finalFiltered.filter(card => card.dataset.live === 'true' && card.dataset.blv === 'true'); 1318 } else if (currentFilters.blv) { 1319 finalFiltered = finalFiltered.filter(card => card.dataset.blv === 'false'); 1320 } else if (currentFilters.hot) { 1321 finalFiltered = finalFiltered.filter(card => card.dataset.hot === 'true' && card.dataset.blv === 'true'); 1322 } else if (currentFilters.date !== 'all') { 1323 finalFiltered = finalFiltered.filter(card => card.dataset.date === currentFilters.date && card.dataset.blv === 'true'); 1324 } 1325 1326 // Hiá»n thá»/ẩn các thẻ 1327 allCards.forEach(card => { 1328 card.classList.toggle('d-none', !finalFiltered.includes(card)); 1329 }); 1330 1331 // Cáºp nháºt bá» Äếm 1332 if (type === 'parent') { 1333 updateFilterCounts(sportFiltered, allCards); 1334 } else { 1335 updateFilterCounts(finalFiltered, allCards); 1336 } 1337 } 1338 1339 // Gắn sá»± kiá»n cho nút lá»c môn thá» thao 1340 document.querySelectorAll('.sports-filter__button[data-sport]').forEach(button => { 1341 button.addEventListener('click', () => { 1342 currentFilters.sport = button.getAttribute('data-sport'); 1343 filterMatches('parent'); 1344 }); 1345 }); 1346 1347 // Gắn sá»± kiá»n cho nút lá»c con 1348 document.querySelectorAll('.sports-filter__button_child').forEach(btn => { 1349 btn.addEventListener('click', function () { 1350 const filterType = this.getAttribute('data-filter'); 1351 const value = this.getAttribute('data-value'); 1352 1353 if (filterType === 'date') { 1354 currentFilters.date = value; 1355 currentFilters.live = false;
1356 currentFilters.hot = false; 1357 currentFilters.blv = false; 1358 } else if (filterType === 'live') { 1359 currentFilters.live = true; 1360 currentFilters.date = 'all'; 1361 currentFilters.hot = false; 1362 currentFilters.blv = false; 1363 } else if (filterType === 'hot') { 1364 currentFilters.hot = true; 1365 currentFilters.date = 'all'; 1366 currentFilters.live = false; 1367 currentFilters.blv = false; 1368 } else if (filterType === 'child_all') { 1369 currentFilters.live = false; 1370 currentFilters.hot = false; 1371 currentFilters.blv = false; 1372 currentFilters.date = 'all'; 1373 } 1374 1375 document.querySelectorAll('.sports-filter__button_child').forEach(b => b.classList.remove('active')); 1376 this.classList.add('active'); 1377 1378 filterMatches('child'); 1379 }); 1380 }); 1381 1382 // Gắn sá»± kiá»n cho toggle livescore 1383 const liveToggle = document.getElementById('livescoreToggle'); 1384 if (liveToggle) { 1385 liveToggle.addEventListener('change', () => { 1386 currentFilters.live = liveToggle.checked; 1387 filterMatches('parent'); 1388 }); 1389 } 1390 1391 // ===== WEBSOCKET INTEGRATION ===== 1392 let wsClient = null; 1393 let matchesWebSocketConnected = false; 1394 let fallbackPollingInterval = null; 1395 1396 // Function Äá» transform WebSocket data format 1397 function transformWebSocketMatches(data) { 1398 const newMatches = []; 1399 1400 for (const [key, matchData] of Object.entries(data)) { 1401 // Logic tương tá»± như trong refreshMatches() 1402 const anchorList = Array.isArray(matchData.anchorAppointmentVoList) 1403 ? matchData.anchorAppointmentVoList 1404 : []; 1405 1406 if (anchorList[0]?.nickName === 'Live streaming') continue; 1407 1408 const homeScoreArr = Array.isArray(matchData.homeScore) ? matchData.homeScore : []; 1409 const awayScoreArr = Array.isArray(matchData.awayScore) ? matchData.awayScore : []; 1410 const homeScore = homeScoreArr.length ? homeScoreArr[0] : 0; 1411 const awayScore = awayScoreArr.length ? awayScoreArr[0] : 0; 1412 1413 let slug = key; 1414 if (matchData.house_id && matchData.house_id !== null) { 1415 slug = `${key}?houseId=${matchData.house_id}`; 1416 } 1417 1418 const competitionName = matchData.competitionName || 'NBA'; 1419 const matchDataObj = { 1420 id: 2, 1421 slug: slug, 1422 sport: sportName(matchData.sportId), 1423 live: matchData.matchStatus === 2, 1424 hot: true, 1425 blv: anchorList[0]?.nickName !== 'Live streaming', 1426 date: formatDate(fixtime(matchData.matchTime), 'd/m'), 1427 datesearch: formatDate(fixtime(matchData.matchTime), 'Y-m-d'), 1428 hour: formatDate(fixtime(matchData.matchTime), 'H:i'), 1429 competitionName: competitionName, 1430 teams: [ 1431 matchData.homeTeamName || 'Team C', 1432 matchData.awayTeamName || 'Team D' 1433 ], 1434 score: `${homeScore}:${awayScore}`, 1435 videoUrl: matchData.videoUrl || 'https://live2.example.com', 1436 animationUrl: matchData.animationUrl || 'https://animation.example.com', 1437 data: matchData 1438 }; 1439 1440 newMatches.push(matchDataObj); 1441 } 1442 1443 return newMatches; 1444 } 1445 1446 // Function Äá» init WebSocket 1447 function initMatchesWebSocket() { 1448 // WebSocket URL - có thá» config từ PHP hoặc hardcode 1449 // Nếu có server-socket service, dùng URL Äó 1450 // Format: wss://server.gvapi.cc hoặc ws://localhost:3320 1451 const wsUrl = 'wss://server.colahd.tv/ws'; // Thay bằng URL thá»±c tế cá»§a bạn 1452 1453 // Check nếu RealtimeWebSocketClient Äã ÄÆ°á»£c load 1454 if (typeof RealtimeWebSocketClient === 'undefined') { 1455 console.warn('[Homepage] RealtimeWebSocketClient not loaded, falling back to polling'); 1456 startFallbackPolling(); 1457 return; 1458 } 1459 1460 wsClient = new RealtimeWebSocketClient(wsUrl); 1461 1462 // Subscribe to matches updates
1463 wsClient.subscribe('matches:updated', (data) => { 1464 //console.log('[Homepage] Received matches update from WebSocket'); 1465 1466 if (data.code === '0000' && data.data) { 1467 // Transform data Äá» tương thÃch vá»i renderAllMatches() 1468 const transformedMatches = transformWebSocketMatches(data.data); 1469 renderAllMatches(transformedMatches); 1470 filterMatches('parent', transformedMatches); 1471 saveMatchesToCache(transformedMatches); // 1472 } else if (data.data && typeof data.data === 'object') { 1473 // Nếu data trá»±c tiếp là object (không có code) 1474 const transformedMatches = transformWebSocketMatches(data.data); 1475 renderAllMatches(transformedMatches); 1476 filterMatches('parent', transformedMatches); 1477 saveMatchesToCache(transformedMatches); // 1478 } 1479 }); 1480 1481 // Handle connection events
1482 wsClient.subscribe('connected', () => { 1483 //console.log('[Homepage] WebSocket connected'); 1484 matchesWebSocketConnected = true; 1485 // Stop fallback polling nếu Äang chạy 1486 if (fallbackPollingInterval) { 1487 clearInterval(fallbackPollingInterval); 1488 fallbackPollingInterval = null; 1489 } 1490 }); 1491 1492 wsClient.subscribe('disconnected', () => { 1493 //console.log('[Homepage] WebSocket disconnected, falling back to polling'); 1494 matchesWebSocketConnected = false; 1495 startFallbackPolling(); 1496 }); 1497 1498 wsClient.subscribe('error', (error) => { 1499 console.error('[Homepage] WebSocket error:', error); 1500 matchesWebSocketConnected = false; 1501 startFallbackPolling(); 1502 }); 1503 1504 wsClient.connect(); 1505 } 1506 1507 // Fallback polling nếu WebSocket fail 1508 function startFallbackPolling() { 1509 if (fallbackPollingInterval) return; // Already running 1510 1511 //('[Homepage] Starting fallback polling'); 1512 fallbackPollingInterval = setInterval(() => { 1513 if (!matchesWebSocketConnected) { 1514 refreshMatches(); // Use existing function 1515 } else { 1516 // WebSocket reconnected, stop polling 1517 clearInterval(fallbackPollingInterval); 1518 fallbackPollingInterval = null; 1519 } 1520 }, 120000); // 2 minutes như cÅ© 1521 } 1522 1523 // 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) 1524 const ssrCardsCount = document.querySelectorAll('.match-card').length; 1525 1526 if (ssrCardsCount === 0) { 1527 // Thá» load từ cache trưá»c nếu không có SSR 1528 const cachedMatches = loadMatchesFromCache(); 1529 if (cachedMatches && cachedMatches.length > 0) { 1530 try { 1531 renderAllMatches(cachedMatches); 1532 filterMatches('parent', cachedMatches); 1533 } catch (error) { 1534 console.error('[Cache Render Error]', error); 1535 } 1536 } 1537 1538 // Fetch fresh data từ API (cáºp nháºt + ghi Äè cache) 1539 refreshMatches(); 1540 } 1541 1542 // Thá» WebSocket trưá»c, fallback to polling nếu fail 1543 // Delay má»t chút Äá» Äảm bảo RealtimeWebSocketClient Äã ÄÆ°á»£c load 1544 setTimeout(() => { 1545 initMatchesWebSocket(); 1546 }, 500); 1547 1548 // Cleanup khi page unload 1549 window.addEventListener('beforeunload', () => { 1550 if (wsClient) { 1551 wsClient.disconnect(); 1552 } 1553 if (fallbackPollingInterval) { 1554 clearInterval(fallbackPollingInterval); 1555 } 1556 }); 1557 </script>
1557 1558 <style> 1559 .home-banner-slider { 1560 width: 100%; 1561 margin: 15px 0; 1562 border-radius: 8px; 1563 overflow: hidden; 1564 position: relative; 1565 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); 1566 display: none; 1567 /* Hidden by default until loaded */ 1568 z-index: 10; 1569 } 1570 1571 .home-banner-track { 1572 display: flex; 1573 transition: transform 0.5s ease-in-out; 1574 height: 100%; 1575 } 1576 1577 .home-banner-slide { 1578 min-width: 100%; 1579 display: block; 1580 text-decoration: none; 1581 } 1582 1583 .home-banner-slide img { 1584 width: 100%; 1585 height: auto; 1586 display: block; 1587 object-fit: cover; 1588 } 1589 1590 .home-banner-dots { 1591 position: absolute; 1592 bottom: 10px; 1593 left: 0; 1594 right: 0; 1595 display: flex; 1596 justify-content: center; 1597 gap: 6px; 1598 } 1599 1600 .home-banner-dot { 1601 width: 8px; 1602 height: 8px; 1603 background: rgba(255, 255, 255, 0.5); 1604 border-radius: 50%; 1605 cursor: pointer; 1606 transition: background 0.3s; 1607 } 1608 1609 .home-banner-dot.active { 1610 background: white; 1611 transform: scale(1.2); 1612 } 1613 </style> 1614
1614<script> 1615 document.addEventListener('DOMContentLoaded', async function () { 1616 try { 1617 // Fetch settings 1618 const res = await fetch('https://api.gvapi.cc/api/settings'); 1619 const data = await res.json(); 1620 1621 if (data.success && data.home_banners && data.home_banners.length > 0) { 1622 const banners = data.home_banners.sort((a, b) => a.order - b.order); 1623 1624 // Create slider container 1625 const sliderContainer = document.createElement('div'); 1626 sliderContainer.className = 'home-banner-slider'; 1627 1628 const track = document.createElement('div'); 1629 track.className = 'home-banner-track'; 1630 1631 const dotsContainer = document.createElement('div'); 1632 dotsContainer.className = 'home-banner-dots'; 1633 1634 banners.forEach((banner, index) => { 1635 // Slide 1636 const slide = document.createElement('a'); 1637 slide.className = 'home-banner-slide'; 1638 slide.href = banner.link_url && banner.link_url !== '#' ? banner.link_url : 'javascript:void(0)'; 1639 slide.target = banner.link_url && banner.link_url !== '#' ? '_blank' : '_self'; 1640 1641 const img = document.createElement('img'); 1642 img.src = banner.image_url; 1643 img.alt = banner.name || 'Banner'; 1644 1645 slide.appendChild(img); 1646 track.appendChild(slide); 1647 1648 // Dot 1649 const dot = document.createElement('div'); 1650 dot.className = 'home-banner-dot'; 1651 if (index === 0) dot.classList.add('active'); 1652 1653 dot.addEventListener('click', () => { 1654 goToSlide(index); 1655 }); 1656 1657 dotsContainer.appendChild(dot); 1658 }); 1659 1660 sliderContainer.appendChild(track); 1661 if (banners.length > 1) { 1662 sliderContainer.appendChild(dotsContainer); 1663 } 1664 1665 // Inject into DOM (after h1 in hero content) 1666 const h1 = document.querySelector('.hero__content h1'); 1667 if (h1) { 1668 h1.insertAdjacentElement('afterend', sliderContainer); 1669 sliderContainer.style.display = 'block'; 1670 1671 // Slider Logic 1672 let currentIndex = 0; 1673 let autoPlayInterval; 1674 const totalSlides = banners.length; 1675 1676 function goToSlide(index) { 1677 if (totalSlides <= 1) return; 1678 currentIndex = index; 1679 track.style.transform = `translateX(-${currentIndex * 100}%)`; 1680 1681 // Update dots 1682 Array.from(dotsContainer.children).forEach((d, i) => { 1683 if (i === currentIndex) d.classList.add('active'); 1684 else d.classList.remove('active'); 1685 }); 1686 1687 resetAutoPlay(); 1688 } 1689 1690 function nextSlide() { 1691 let next = currentIndex + 1; 1692 if (next >= totalSlides) next = 0; 1693 goToSlide(next); 1694 } 1695 1696 function resetAutoPlay() { 1697 clearInterval(autoPlayInterval); 1698 autoPlayInterval = setInterval(nextSlide, 3000); 1699 } 1700 1701 if (totalSlides > 1) { 1702 resetAutoPlay(); 1703 } 1704 } 1705 } 1706 } catch (err) { 1707 console.error('Lá»i load home banners:', err); 1708 } 1709 }); 1710 </script>
1710 1711 <style> 1712 @media (min-width: 481px) and (max-width: 767px) { 1713 .match-card__status { 1714 max-width: 120px; 1715 font-size: 12px; 1716 } 1717 } 1718 1719 @media (min-width: 576px) and (max-width: 767px) { 1720 .match-card__league { 1721 max-width: 100px; 1722 } 1723 } 1724 1725 @media (min-width: 481px) and (max-width: 575px) { 1726 .match-card__header { 1727 flex-direction: row !important; 1728 } 1729 1730 .match-card__time { 1731 max-width: 100px !important; 1732 } 1733 } 1734 1735 .top-live-box { 1736 width: 100%; 1737 height: auto; 1738 display: flex; 1739 gap: 8px; 1740 } 1741 1742 .top-live-box .left { 1743 width: 100%; 1744 min-height: 564px; 1745 background-color: #000; 1746 border-radius: 4px; 1747 overflow: hidden; 1748 } 1749 1750 .top-live-box .live-list { 1751 width: 240px; 1752 flex-shrink: 0; 1753 } 1754 1755 .top-live-box .live-list .live-item { 1756 width: 100%; 1757 height: 144px; 1758 margin-bottom: 6px; 1759 cursor: pointer; 1760 border-radius: 4px; 1761 transition: all .1s ease-in-out; 1762 overflow: hidden; 1763 border: 2px solid transparent; 1764 position: relative; 1765 } 1766 1767 .top-live-box .live-list .live-item .anchor-item { 1768 width: 100%; 1769 height: 100%; 1770 } 1771 1772 .el-image img { 1773 display: block; 1774 width: 100%; 1775 height: 100%; 1776 object-fit: cover; 1777 } 1778 1779 .btn-view-truc-tiep { 1780 position: absolute; 1781 top: 70%; 1782 left: 50%; 1783 transform: translate(-50%, -50%); 1784 z-index: 5; 1785 background: #f2152d; 1786 padding: 20px; 1787 border-radius: 30px; 1788 cursor: pointer; 1789 text-align: center; 1790 } 1791 1792 .btn-view-truc-tiep:hover { 1793 opacity: 0.8; 1794 } 1795 1796 .video-player { 1797 position: relative; 1798 } 1799 1800 .top-live-box .live-list .live-item.active { 1801 border: 2px solid #ff0202; 1802 } 1803 1804 .overlay-click { 1805 position: absolute; 1806 top: 0; 1807 left: 0; 1808 width: 100%; 1809 height: 100%; 1810 z-index: 10; 1811 display: block; 1812 } 1813 1814 /* Responsive */ 1815 @media screen and (max-width: 1024px) { 1816 .top-live-box { 1817 flex-direction: column; 1818 } 1819 1820 .top-live-box .left { 1821 width: 100%; 1822 min-height: 400px; 1823 } 1824 1825 .top-live-box .live-list { 1826 display: none !important; 1827 width: 100%; 1828 flex-direction: row; 1829 flex-wrap: wrap; 1830 justify-content: center; 1831 gap: 6px; 1832 margin-top: 12px; 1833 } 1834 1835 .top-live-box .live-list .live-item { 1836 width: calc(50% - 6px); 1837 height: 120px; 1838 } 1839 } 1840 1841 @media screen and (max-width: 768px) { 1842 .top-live-box .left { 1843 min-height: unset; 1844 } 1845 1846 .btn-view-truc-tiep { 1847 padding: 10px 10px; 1848 font-size: 12px; 1849 } 1850 1851 .top-live-box .live-list .live-item { 1852 width: calc(50% - 3px); 1853 height: 100px; 1854 } 1855 } 1856 1857 @media screen and (max-width: 480px) { 1858 .top-live-box .live-list .live-item { 1859 width: calc(50% - 3px); 1860 height: 100px; 1861 } 1862 1863 .btn-view-truc-tiep { 1864 padding: 8px 14px; 1865 font-size: 13px; 1866 } 1867 1868 .match-card__body { 1869 gap: 0.6rem; 1870 } 1871 } 1872 </style> 1873
1873<script src="//unpkg.byted-static.com/xgplayer/3.0.0-next.1/dist/index.min.js"></script>
1873 1874
1874<script src="//unpkg.com/[email protected]/dist/index.min.js"></script>
1874 1875 <link rel="stylesheet" href="//unpkg.byted-static.com/xgplayer/3.0.0-alpha.100/dist/xgplayer.min.css" /> 1876
1876<script type="text/javascript"> 1877 // Hà m lấy domain API random cho video-home (pinned-home) 1878 function getVideoHomeApiDomain() { 1879 const domains = [ 1880 'video-home.gvapi.cc' 1881 ]; 1882 1883 // Random chá»n má»t domain 1884 const index = Math.floor(Math.random() * domains.length); 1885 const selected = domains[index]; 1886 1887 return 'https://' + selected; 1888 } 1889 1890 document.addEventListener('DOMContentLoaded', function () { 1891 const apiBase = getVideoHomeApiDomain(); 1892 const STORAGE_KEY = 'pinnedMatchesCache'; 1893 const heroSection = document.querySelector('section.hero'); 1894 if (!heroSection) { 1895 console.error('Hero section not found.'); 1896 return; 1897 } 1898 1899 const skeletonHtml = ` 1900 <div class="top-live-box container skeleton-loading" id="pinned-matches-container"> 1901 <style> 1902 .skeleton-box { 1903 display: inline-block; 1904 height: 100%; 1905 width: 100%; 1906 position: relative; 1907 overflow: hidden; 1908 background-color: #2a2a2a; 1909 border-radius: 8px; 1910 } 1911 .skeleton-box::after { 1912 position: absolute; 1913 top: 0; 1914 right: 0; 1915 bottom: 0; 1916 left: 0; 1917 transform: translateX(-100%); 1918 background-image: linear-gradient( 1919 90deg, 1920 rgba(255, 255, 255, 0) 0, 1921 rgba(255, 255, 255, 0.05) 20%, 1922 rgba(255, 255, 255, 0.2) 60%, 1923 rgba(255, 255, 255, 0) 1924 ); 1925 animation: shimmer 2s infinite; 1926 content: ''; 1927 } 1928 @keyframes shimmer { 100% { transform: translateX(100%); } } 1929 .skeleton-loading .left { aspect-ratio: 16/9; background: #1a1a1a; padding: 10px; border-radius: 8px;} 1930 .skeleton-loading .live-list { display: flex; gap: 10px; margin-top: 10px; } 1931 .skeleton-loading .live-item { flex: 1; aspect-ratio: 1/1; background: #1a1a1a; border-radius: 8px; overflow: hidden; } 1932 </style> 1933 <div class="left"> 1934 <div class="skeleton-box" style="min-height: 300px;"></div> 1935 </div> 1936 <div class="live-list"> 1937 <div class="live-item"><div class="skeleton-box"></div></div> 1938 <div class="live-item"><div class="skeleton-box"></div></div> 1939 <div class="live-item"><div class="skeleton-box"></div></div> 1940 <div class="live-item"><div class="skeleton-box"></div></div> 1941 </div> 1942 </div> 1943 `; 1944 1945 function renderMatches(matches) { 1946 const anchors = matches.slice(0, 4).map((match, index) => ({ 1947 streamUrl: match.playStreamAddress2, 1948 image: match.houseImage, 1949 name: match.nickName, 1950 slug: match.slugKey + '?houseId=' + match.houseId 1951 })); 1952 1953 if (anchors.length === 0) return; 1954 1955 const streamUrl = anchors[0].streamUrl; 1956 1957 const liveBoxHtml = ` 1958 <div class="top-live-box container" id="pinned-matches-container"> 1959 <div class="left"> 1960 <div class="video-container"> 1961 <div class="video-player"> 1962 <div id="mse" style="width: 100%;"></div> 1963 <a href="/truc-tiep/${anchors[0].slug}" class="overlay-click" id="btn-view-link" rel="nofollow"></a>
1964 <span class="btn-view-truc-tiep" rel="nofollow">Và o phòng live Äang phát sóng</span> 1965 </div> 1966 </div> 1967 </div> 1968 <div class="live-list"> 1969 ${anchors.map((anchor, index) => ` 1970 <div class="live-item ${index === 0 ? 'active' : ''} live-living-item" data-index="${index}"> 1971 <div class="anchor-item"> 1972 <div class="placeholder img"> 1973 <img src="${anchor.image}" alt="${anchor.name}" style="object-fit: cover;"> 1974 </div> 1975 </div> 1976 </div> 1977 `).join('')} 1978 </div> 1979 </div> 1980 `; 1981 1982 const existingContainer = document.getElementById('pinned-matches-container'); 1983 if (existingContainer) { 1984 existingContainer.outerHTML = liveBoxHtml; 1985 } else { 1986 heroSection.insertAdjacentHTML('afterend', liveBoxHtml); 1987 } 1988 1989 if (window.Player && window.HlsPlayer) { 1990 new Player({ 1991 plugins: [window.HlsPlayer], 1992 id: "mse", 1993 ignores: ["time", "progress"], 1994 autoplayMuted: true, 1995 autoplay: true, 1996 playsinline: true, 1997 isLive: true, 1998 fluid: true, 1999 pip: true, 2000 muted: true, 2001 url: streamUrl 2002 }); 2003 } 2004 2005 const liveItems = document.querySelectorAll('#pinned-matches-container .live-item'); 2006 const viewLink = document.getElementById('btn-view-link'); 2007 2008 liveItems.forEach(item => { 2009 item.addEventListener('click', () => { 2010 const index = parseInt(item.getAttribute('data-index')); 2011 liveItems.forEach(i => i.classList.remove('active')); 2012 item.classList.add('active'); 2013 2014 if (window.Player && window.HlsPlayer) { 2015 new Player({ 2016 plugins: [window.HlsPlayer], 2017 id: "mse", 2018 ignores: ["time", "progress"], 2019 autoplayMuted: true, 2020 autoplay: true, 2021 playsinline: true, 2022 isLive: true, 2023 fluid: true, 2024 pip: true, 2025 muted: true, 2026 url: anchors[index].streamUrl 2027 }); 2028 } 2029 if (viewLink) { 2030 viewLink.href = '/truc-tiep/' + anchors[index].slug; 2031 } 2032 }); 2033 }); 2034 } 2035 2036 let hasLocalData = false; 2037 try { 2038 const cached = localStorage.getItem(STORAGE_KEY); 2039 if (cached) { 2040 const parsed = JSON.parse(cached); 2041 if (parsed && parsed.length > 0) { 2042 renderMatches(parsed); 2043 hasLocalData = true; 2044 } 2045 } 2046 } catch (e) { 2047 console.error('Error parsing localStorage:', e); 2048 } 2049 2050 if (!hasLocalData) { 2051 heroSection.insertAdjacentHTML('afterend', skeletonHtml); 2052 } 2053 2054 fetch('https://video-home.gvapi.cc/api/pinned-home?t=' + new Date().getTime()) 2055 .then(response => { 2056 if (!response.ok) throw new Error('API Response not ok: ' + response.status); 2057 return response.json(); 2058 }) 2059 .then(data => { 2060 const matches = data.pinnedMatches; 2061 if (!matches || matches.length < 1) { 2062 if (!hasLocalData) { 2063 const existingContainer = document.getElementById('pinned-matches-container'); 2064 if (existingContainer) existingContainer.remove(); 2065 } 2066 return; 2067 } 2068 localStorage.setItem(STORAGE_KEY, JSON.stringify(matches)); 2069 renderMatches(matches); 2070 }) 2071 .catch(error => { 2072 console.error('Error fetching API data:', error); 2073 if (!hasLocalData) { 2074 const existingContainer = document.getElementById('pinned-matches-container'); 2075 if (existingContainer) existingContainer.remove(); 2076 } 2077 }); 2078 }); 2079 </script>
2079 2080 2081 <style> 2082 .aligncenter { 2083 margin: 0 auto; 2084 2085 } 2086 2087 .wp-caption { 2088 max-width: 100%; 2089 } 2090 2091 footer .container { 2092 grid-template-columns: 1fr; 2093 } 2094 </style> 2095
2095<script> 2096 const mini = document.querySelector('.video-player.is-floating.floating-draggable'); 2097 const margin = 8; // cách mép 2098 2099 function clampFloatingVideo() { 2100 if (!mini) return; 2101 2102 const rect = mini.getBoundingClientRect(); 2103 2104 let x = rect.left; 2105 let y = rect.top; 2106 2107 const vw = window.innerWidth; 2108 const vh = window.innerHeight; 2109 2110 const minX = margin; 2111 const minY = margin; // nếu muá»n chừa notch: + safeTop 2112 const maxX = vw - rect.width - margin; 2113 const maxY = vh - rect.height - margin; 2114 2115 if (x < minX) x = minX; 2116 if (x > maxX) x = maxX; 2117 if (y < minY) y = minY; 2118 if (y > maxY) y = maxY; 2119 2120 mini.style.left = x + 'px'; 2121 mini.style.top = y + 'px'; 2122 } 2123 2124 // chạy lại má»i khi viewport thay Äá»i 2125 window.addEventListener('scroll', clampFloatingVideo); 2126 window.addEventListener('resize', clampFloatingVideo); 2127 window.addEventListener('orientationchange', clampFloatingVideo); 2128 2129 // iOS Safari thanh URL co giãn â nên dùng thêm: 2130 if (window.visualViewport) { 2131 visualViewport.addEventListener('resize', clampFloatingVideo); 2132 visualViewport.addEventListener('scroll', clampFloatingVideo); 2133 } 2134 </script>
2134 2135 2136
2136<script> 2137 // === Catfish Banner Global: lấy từ API /api/catfish-banners (giá»ng React CatfishBanners.jsx) === 2138 (function () { 2139 var apiUrl = 'https://api.gvapi.cc/api/catfish-banners'; 2140 fetch(apiUrl) 2141 .then(function (res) { return res.ok ? res.json() : null; }) 2142 .then(function (data) { 2143 if (!data || !data.success || !data.data || !data.data.length) return; 2144 2145 // === Video catfish overlay (nếu có trong trang watch) === 2146 var catfishLink = data.data[0].link_url || ''; 2147 if (catfishLink) { 2148 var overlayTop = document.querySelector('.video-catfish-overlay-top'); 2149 var overlayBottom = document.querySelector('.video-catfish-overlay'); 2150 if (overlayTop) { 2151 overlayTop.href = catfishLink; 2152 overlayTop.style.display = 'block'; 2153 } 2154 if (overlayBottom) { 2155 overlayBottom.href = catfishLink; 2156 overlayBottom.style.display = 'block'; 2157 } 2158 } 2159 2160 // === Tạo container catfish-banner-global (fixed bottom, giá»ng React) === 2161 var wrapper = document.createElement('div'); 2162 wrapper.className = 'catfish-banner-global'; 2163 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;'; 2164 2165 // Nút Äóng 2166 var closeBtn = document.createElement('button'); 2167 closeBtn.className = 'catfish-banner-close'; 2168 closeBtn.innerHTML = 'â'; 2169 closeBtn.setAttribute('aria-label', 'Äóng quảng cáo'); 2170 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;'; 2171 closeBtn.addEventListener('click', function () { wrapper.remove(); }); 2172 wrapper.appendChild(closeBtn); 2173 2174 // Render banners 2175 data.data.forEach(function (banner) { 2176 var a = document.createElement('a'); 2177 a.className = 'catfish-banner-global-item'; 2178 a.href = banner.link_url || '#'; 2179 a.target = '_blank'; 2180 a.rel = 'nofollow noopener noreferrer'; 2181 a.style.cssText = 'display:block;width:100%;pointer-events:auto;line-height:0;cursor:pointer;'; 2182 var img = document.createElement('img'); 2183 img.src = banner.image_url; 2184 img.alt = banner.name || 'Banner'; 2185 img.style.cssText = 'width:100%;height:auto;display:block;object-fit:contain;'; 2186 a.appendChild(img); 2187 wrapper.appendChild(a); 2188 }); 2189 2190 document.body.appendChild(wrapper); 2191 2192 // Mobile: full width 2193 var mq = window.matchMedia('(max-width: 768px)'); 2194 function applyMobile(e) { wrapper.style.width = e.matches ? '100%' : '50%'; } 2195 applyMobile(mq); 2196 mq.addListener(applyMobile); 2197 }) 2198 .catch(function (e) { console.warn('Catfish banner load failed:', e); }); 2199 })(); 2200 </script>
2200 2201
2201<script> 2202 // === FIX: Chặn smooth-scroll handlers can thiá»p và o catfish overlay === 2203 (function () { 2204 document.addEventListener('click', function (e) { 2205 var overlay = e.target.closest('.video-catfish-overlay, .video-catfish-overlay-top'); 2206 if (!overlay) return; 2207 var href = overlay.getAttribute('href'); 2208 if (href && href !== '#' && !href.startsWith('#')) { 2209 e.stopImmediatePropagation(); 2210 } 2211 }, true); 2212 })(); 2213 </script>
2213 2214
2214<script> 2215 document.addEventListener("DOMContentLoaded", function () { 2216 const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null, false); 2217 while (walker.nextNode()) { 2218 const node = walker.currentNode; 2219 if (node.nodeValue.match(/vô Äá»ch quá»c gia/i)) { 2220 node.nodeValue = node.nodeValue.replace(/vô Äá»ch quá»c gia/gi, "VÄQG"); 2221 } 2222 } 2223 }); 2224 </script>
2224 2225 2226</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.