Loading player...

Failed to load video

Prev Next
Server:
Cache:
Confess your love

Confess your love

Season 1 Episode 11 - Eps 11: Episode 11

7.1 ? 2023 Drama

Lin Chen, a graduate student from the Medical School, who decides to take on the identity of her sister, Lin Wan, an obscure celebrity who fell into a coma due to an accident. In an unexpected turn of events, Lin Chen coincidentally meets Lu Xun, a man she had a secret crush on during their student days, leading to the rekindling of their past relationship

Episodes in Season 1

/** * Ad Blocker Detection System * Detects if user has an ad blocker enabled and prevents access to the site */ class AdBlockerDetector { constructor() { this.isBlocked = false; this.debug = false; // Set to true for debugging } /** * Log debug messages */ log(...args) { if (this.debug || window.location.search.includes('debug=adblock')) { console.log('[AdBlock Detector]', ...args); } } /** * Check if AdSense script loaded - most reliable method */ async checkAdSenseLoaded() { // Check if script tag exists const scripts = Array.from(document.getElementsByTagName('script')); const adScript = scripts.find(script => script.src && script.src.includes('pagead2.googlesyndication.com') ); if (!adScript) { this.log('AdSense script tag not found in DOM'); return false; } this.log('AdSense script tag found, checking if loaded...'); // Method 1: Check if adsbygoogle is already defined (script loaded quickly) if (typeof window.adsbygoogle !== 'undefined') { this.log('AdSense script loaded (adsbygoogle already defined)'); return true; } // Method 2: Wait and check - but be more aggressive // Most scripts load within 1-2 seconds. If it's not loaded after 2.5 seconds, // it's likely blocked for (let i = 0; i < 5; i++) { await new Promise(resolve => setTimeout(resolve, 500)); if (typeof window.adsbygoogle !== 'undefined') { this.log(`AdSense script loaded after ${(i + 1) * 0.5} seconds`); return true; } } // After 2.5 seconds, if still undefined, it's very likely blocked // Ad blockers typically prevent the script from loading entirely this.log('AdSense script not loaded after 2.5 seconds - BLOCKED'); return false; } /** * Check if bait elements are blocked */ async checkBaitElements() { const baitElements = [ { id: 'ad-banner-detector', class: 'adsbygoogle' }, { id: 'google_ads_frame_1' }, { class: 'advertisement' }, { class: 'ads' }, { id: 'ad-container' } ]; const checks = []; baitElements.forEach(({ id, class: className }) => { const element = document.createElement('div'); if (id) element.id = id; if (className) element.className = className; element.style.cssText = 'position:absolute;left:-9999px;width:1px;height:1px;'; element.innerHTML = ' '; document.body.appendChild(element); // Create promise for each check checks.push(new Promise((resolve) => { // Check after a short delay to allow ad blocker to act setTimeout(() => { const style = window.getComputedStyle(element); const rect = element.getBoundingClientRect(); const isBlocked = !element.parentNode || style.display === 'none' || style.visibility === 'hidden' || rect.width === 0 || rect.height === 0; if (isBlocked) { this.log(`Bait element blocked: ${id || className}`); } // Clean up if (element.parentNode) { element.parentNode.removeChild(element); } resolve(isBlocked); }, 300); })); }); // Wait for all checks const results = await Promise.all(checks); const blockedCount = results.filter(Boolean).length; const result = blockedCount >= 2; // At least 2 elements blocked this.log(`Bait elements check: ${blockedCount} blocked out of ${baitElements.length}`); return result; } /** * Try to load an ad and see if it gets blocked */ async checkAdLoad() { return new Promise((resolve) => { const testAd = document.createElement('ins'); testAd.className = 'adsbygoogle'; testAd.style.cssText = 'display:block;width:1px;height:1px;position:absolute;left:-9999px;'; testAd.setAttribute('data-ad-client', 'ca-pub-3883277674447109'); testAd.setAttribute('data-ad-slot', 'test-slot'); document.body.appendChild(testAd); setTimeout(() => { const style = window.getComputedStyle(testAd); const isBlocked = !testAd.parentNode || style.display === 'none' || style.visibility === 'hidden'; this.log(`Ad load check: ${isBlocked ? 'blocked' : 'allowed'}`); // Clean up if (testAd.parentNode) { testAd.parentNode.removeChild(testAd); } resolve(isBlocked); }, 1000); }); } /** * Main detection method */ async detect() { this.log('Starting ad blocker detection...'); // Run all checks in parallel for faster detection const [adSenseLoaded, baitBlocked, adLoadBlocked] = await Promise.all([ this.checkAdSenseLoaded(), this.checkBaitElements(), this.checkAdLoad() ]); // If ANY method detects blocking, consider it blocked // This is more aggressive but more reliable if (!adSenseLoaded || baitBlocked || adLoadBlocked) { this.log('Detection: AD BLOCKER DETECTED'); this.log(` - AdSense loaded: ${adSenseLoaded}`); this.log(` - Bait blocked: ${baitBlocked}`); this.log(` - Ad load blocked: ${adLoadBlocked}`); this.isBlocked = true; return true; } this.log('Detection: No ad blocker detected'); this.isBlocked = false; return false; } /** * Show the ad blocker warning */ showWarning() { this.log('Showing ad blocker warning'); const event = new CustomEvent('adblock-detected', { detail: { detected: true }, bubbles: true, cancelable: true }); document.dispatchEvent(event); // Also try dispatching on window as fallback window.dispatchEvent(event); // Force show modal if event doesn't work (fallback) setTimeout(() => { const modal = document.querySelector('[x-data*="adblock"]'); if (modal && !modal.hasAttribute('x-show')) { this.log('Fallback: Manually showing modal'); modal.style.display = 'flex'; document.body.style.overflow = 'hidden'; } }, 100); } /** * Hide the ad blocker warning */ hideWarning() { this.log('Hiding ad blocker warning'); const event = new CustomEvent('adblock-detected', { detail: { detected: false } }); document.dispatchEvent(event); } /** * Start monitoring for ad blockers */ startMonitoring() { // Check if already detected in this session if (sessionStorage.getItem('adblock-detected') === 'true') { this.log('Ad blocker already detected in session'); this.showWarning(); document.body.style.overflow = 'hidden'; return; } // Quick immediate check - if adsbygoogle is not defined and script should have loaded // This catches cases where the script was blocked immediately setTimeout(() => { const scripts = Array.from(document.getElementsByTagName('script')); const adScript = scripts.find(script => script.src && script.src.includes('pagead2.googlesyndication.com') ); if (adScript && typeof window.adsbygoogle === 'undefined') { // Script tag exists but adsbygoogle not defined after 1 second // This is a strong indicator of blocking this.log('Quick check: AdSense script exists but adsbygoogle undefined - likely blocked'); // Continue with full detection to confirm } }, 1000); // Start full detection after a short delay to allow scripts to load setTimeout(() => { this.detect().then((blocked) => { if (blocked) { this.log('Detection complete: AD BLOCKER DETECTED - showing warning'); this.showWarning(); sessionStorage.setItem('adblock-detected', 'true'); document.body.style.overflow = 'hidden'; } else { this.log('Detection complete: No ad blocker detected'); // Also check after a longer delay in case script loads very slowly setTimeout(() => { this.detect().then((stillBlocked) => { if (stillBlocked) { this.log('Delayed check: AD BLOCKER DETECTED - showing warning'); this.showWarning(); sessionStorage.setItem('adblock-detected', 'true'); document.body.style.overflow = 'hidden'; } }); }, 5000); } }).catch((error) => { console.error('[AdBlock Detector] Detection error:', error); }); }, 2000); // Wait 2 seconds for scripts to potentially load } /** * Retry detection after user claims to have disabled ad blocker */ async retry() { this.log('Retrying ad blocker detection...'); sessionStorage.removeItem('adblock-detected'); // Wait a moment for ad blocker to potentially reload await new Promise(resolve => setTimeout(resolve, 1000)); // Re-detect const blocked = await this.detect(); if (!blocked) { this.hideWarning(); document.body.style.overflow = ''; return true; } return false; } } // Initialize detector window.adBlockerDetector = new AdBlockerDetector(); // Log that detector is loaded (for debugging) console.log('[AdBlock Detector] Script loaded and initialized'); // Start detection when DOM is ready if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', () => { console.log('[AdBlock Detector] DOM ready, starting monitoring...'); window.adBlockerDetector.startMonitoring(); }); } else { // DOM already loaded, start immediately console.log('[AdBlock Detector] DOM already loaded, starting monitoring...'); window.adBlockerDetector.startMonitoring(); } // Export for use in other scripts export default AdBlockerDetector;

FWAnime

Premium Anime Streaming

Watch thousands of anime episodes with premium quality and no ads!

Visit Now
s