| "use client"; |
|
|
| import { useEffect, useState } from "react"; |
| import IframeWarningModal from "./modal"; |
|
|
| export default function IframeDetector() { |
| const [showWarning, setShowWarning] = useState(false); |
|
|
| useEffect(() => { |
| |
| const isAllowedDomain = (hostname: string) => { |
| const host = hostname.toLowerCase(); |
| return ( |
| host.endsWith(".huggingface.co") || |
| host.endsWith(".hf.co") || |
| host === "huggingface.co" || |
| host === "hf.co" || |
| host === "enzostvs-deepsite.hf.space" || |
| host === "deepsite.hf.co" |
| ); |
| }; |
|
|
| |
| const isInIframe = () => { |
| try { |
| return window.self !== window.top; |
| } catch { |
| |
| |
| return true; |
| } |
| }; |
|
|
| |
| const isEmbedded = () => { |
| try { |
| return window.location !== window.parent.location; |
| } catch { |
| |
| return true; |
| } |
| }; |
|
|
| |
| const addCanonicalUrl = () => { |
| |
| const existingCanonical = document.querySelector('link[rel="canonical"]'); |
| if (existingCanonical) { |
| existingCanonical.remove(); |
| } |
|
|
| |
| const canonical = document.createElement("link"); |
| canonical.rel = "canonical"; |
| canonical.href = window.location.href; |
| document.head.appendChild(canonical); |
|
|
| |
| if (isInIframe() || isEmbedded()) { |
| try { |
| const parentHostname = document.referrer |
| ? new URL(document.referrer).hostname |
| : null; |
| if (parentHostname && !isAllowedDomain(parentHostname)) { |
| |
| const noIndexMeta = document.createElement("meta"); |
| noIndexMeta.name = "robots"; |
| noIndexMeta.content = "noindex, nofollow"; |
| document.head.appendChild(noIndexMeta); |
| } |
| } catch (error) { |
| |
| console.debug( |
| "SEO: Could not determine parent domain for iframe indexing rules" |
| ); |
| } |
| } |
| }; |
|
|
| |
| const shouldShowWarning = () => { |
| if (!isInIframe() && !isEmbedded()) { |
| return false; |
| } |
|
|
| try { |
| |
| const parentHostname = window.parent.location.hostname; |
| return !isAllowedDomain(parentHostname); |
| } catch { |
| |
| try { |
| if (document.referrer) { |
| const referrerUrl = new URL(document.referrer); |
| return !isAllowedDomain(referrerUrl.hostname); |
| } |
| } catch { |
| |
| } |
| return true; |
| } |
| }; |
|
|
| |
| addCanonicalUrl(); |
|
|
| if (shouldShowWarning()) { |
| |
| setShowWarning(true); |
| } |
| }, []); |
|
|
| return ( |
| <IframeWarningModal isOpen={showWarning} onOpenChange={setShowWarning} /> |
| ); |
| } |
|
|