'use client' import React, { useState } from 'react'; export const runtime = 'edge' const FaviconDownloader: React.FC = () => { const [url, setUrl] = useState(''); const [faviconUrl, setFaviconUrl] = useState(''); const [showError, setShowError] = useState(''); const [isLoading, setIsLoading] = useState(false); const handleFetch = async (method: 'direct' | 'html') => { setIsLoading(true); setShowError(''); const apiUrl = method === 'direct' ? `/api/favicon?domain=${url}` : `/api/favicon-im?domain=${url}`; try { console.log(`Fetching favicon ${method === 'direct' ? 'directly' : 'from HTML'}: ${apiUrl}`); const response = await fetch(apiUrl); console.log(`Response status: ${response.status}`); if (!response.ok) { throw new Error('无法访问该网站或未找到 Favicon'); } const blob = await response.blob(); const blobUrl = window.URL.createObjectURL(blob); setFaviconUrl(blobUrl); } catch (error: unknown) { console.error(`Error fetching favicon ${method}:`, error); setShowError(error instanceof Error ? error.message : '发生错误,请重试。'); } finally { setIsLoading(false); } }; const downloadFavicon = () => { if (!faviconUrl) { setShowError('请先获取 Favicon。'); return; } const link = document.createElement('a'); link.href = faviconUrl; link.download = 'favicon.ico'; document.body.appendChild(link); link.click(); document.body.removeChild(link); }; return (
Favicon 已获取成功!
{showError}