diff --git a/src/js/content.js b/src/js/content.js index f8eff1c..19914dc 100644 --- a/src/js/content.js +++ b/src/js/content.js @@ -302,7 +302,7 @@ function setupObserver() { if (siteDiv && !siteDiv.querySelector('.fmhy-unsafe-badge')) { const badge = document.createElement('span'); badge.className = 'fmhy-unsafe-badge'; - badge.textContent = '⚠️ FMHY Unsafe Site'; + badge.innerHTML = '⚠️ FMHY Unsafe Site'; badge.dataset.domain = linkDomain; siteDiv.appendChild(badge); } @@ -382,148 +382,6 @@ function setupObserver() { attributes: true, attributeFilter: ['href'] }); - - // Special handling for Brave Search which actively removes our badges - if (currentDomain.includes("brave")) { - // Set up a more aggressive approach for Brave Search - braveSearchInterval = setInterval(() => { - // Create a global container for badges if it doesn't exist yet - if (!document.getElementById('fmhy-brave-badge-container')) { - const container = document.createElement('div'); - container.id = 'fmhy-brave-badge-container'; - container.style.cssText = 'position: absolute; z-index: 99999; pointer-events: none;'; - document.body.appendChild(container); - - // Use Shadow DOM to protect our content from being removed - const shadowRoot = container.attachShadow({mode: 'closed'}); - - // Add styles to the Shadow DOM - const style = document.createElement('style'); - style.textContent = ` - .brave-badge { - background-color: #ff0000; - color: #fff; - padding: 2px 6px; - border-radius: 4px; - font-weight: bold; - font-size: 12px; - font-family: Arial, sans-serif; - white-space: nowrap; - position: absolute; - transform: rotate(180deg) scaleX(-1); - box-shadow: 0 1px 3px rgba(0,0,0,0.3); - } - `; - shadowRoot.appendChild(style); - - // Create a container for badges - const badgesContainer = document.createElement('div'); - shadowRoot.appendChild(badgesContainer); - - // Store the badges container reference - window._fmhyBraveBadgesContainer = badgesContainer; - } - - // Process all links and update badges - document.querySelectorAll('a[href]').forEach(link => { - try { - // Skip if no valid URL - if (!link.href || link.href.startsWith('javascript:') || link.href.startsWith('#')) { - return; - } - - const linkDomain = normalizeDomain(new URL(link.href).hostname); - - // Check if it's an unsafe domain - if (userUntrusted.has(linkDomain) || - (!userTrusted.has(linkDomain) && unsafeDomains.has(linkDomain))) { - - // Get link position - const rect = link.getBoundingClientRect(); - const scrollTop = window.pageYOffset || document.documentElement.scrollTop; - const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft; - - // Create or update badge ID based on domain - const badgeId = `brave-badge-${linkDomain.replace(/[^a-z0-9]/g, '')}`; - - // Find existing badge or create new one - let badge = window._fmhyBraveBadgesContainer.querySelector(`#${badgeId}`); - - if (!badge) { - badge = document.createElement('div'); - badge.id = badgeId; - badge.className = 'brave-badge'; - badge.textContent = '⚠️ FMHY Unsafe Site'; - window._fmhyBraveBadgesContainer.appendChild(badge); - } - - // Position badge next to link - badge.style.top = `${rect.bottom + scrollTop}px`; - badge.style.left = `${rect.left + scrollLeft}px`; - badge.style.display = 'block'; - - // Mark as processed - link.classList.add('fmhy-processed'); - processedLinks.add(link); - } - } catch (e) { - console.error('[FMHY SafeGuard] Error in Brave Search processing:', e); - } - }); - - // Remove badges for elements that no longer exist - if (window._fmhyBraveBadgesContainer) { - const badges = window._fmhyBraveBadgesContainer.querySelectorAll('.brave-badge'); - badges.forEach(badge => { - const badgeId = badge.id; - const domainPart = badgeId.replace('brave-badge-', ''); - - // Check if any link to this domain exists on the page - let found = false; - document.querySelectorAll('a[href]').forEach(link => { - try { - if (!link.href || link.href.startsWith('javascript:')) return; - const linkDomain = normalizeDomain(new URL(link.href).hostname); - const sanitizedDomain = linkDomain.replace(/[^a-z0-9]/g, ''); - if (sanitizedDomain === domainPart) { - found = true; - } - } catch (e) {} - }); - - if (!found) { - badge.style.display = 'none'; - } - }); - } - }, 200); // Check more frequently (200ms) - - // Also handle scroll events to reposition badges - window.addEventListener('scroll', () => { - if (braveScrollTimer) clearTimeout(braveScrollTimer); - braveScrollTimer = setTimeout(() => { - // Trigger the interval function to reposition badges - if (window._fmhyBraveBadgesContainer) { - document.querySelectorAll('a[href].fmhy-processed').forEach(link => { - try { - const linkDomain = normalizeDomain(new URL(link.href).hostname); - const badgeId = `brave-badge-${linkDomain.replace(/[^a-z0-9]/g, '')}`; - const badge = window._fmhyBraveBadgesContainer.querySelector(`#${badgeId}`); - - if (badge) { - const rect = link.getBoundingClientRect(); - const scrollTop = window.pageYOffset || document.documentElement.scrollTop; - const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft; - - badge.style.top = `${rect.bottom + scrollTop}px`; - badge.style.left = `${rect.left + scrollLeft}px`; - } - } catch (e) {} - }); - } - }, 100); - }); - } } // Process a single link @@ -625,7 +483,7 @@ function addWarningBanner(link) { color: #ffffff !important; background-color: #ff0000 !important; border-radius: 4px !important; - padding: 2px 5px !important; + padding: 0px 5px !important; font-size: 12px !important; font-weight: bold !important; white-space: nowrap !important; @@ -660,7 +518,7 @@ function addWarningBanner(link) { if (!siteDiv.querySelector('.fmhy-unsafe-badge')) { const badge = document.createElement('span'); badge.className = 'fmhy-unsafe-badge'; - badge.textContent = '⚠️ FMHY Unsafe Site'; + badge.innerHTML = '⚠️ FMHY Unsafe Site'; siteDiv.appendChild(badge); } }