fakhr-khaleej-blog
Version:
Moving and relocation services blog
89 lines (78 loc) • 3.59 kB
JavaScript
import '../styles/globals.css'
import Head from 'next/head'
import { useEffect } from 'react'
import Script from 'next/script'
export default function App({ Component, pageProps }) {
useEffect(() => {
// تحميل متغيرات البيئة من الخادم إن وجدت
if (typeof window !== 'undefined' && !window.ENV) {
window.ENV = {
SITE_URL: process.env.NEXT_PUBLIC_SITE_URL || 'https://fakhrkhaleej.netlify.app',
DOMAIN: process.env.NEXT_PUBLIC_DOMAIN || 'fakhrkhaleej.netlify.app',
SITE_NAME: process.env.NEXT_PUBLIC_SITE_NAME || 'فخر الخليج',
DEFAULT_LOCALE: process.env.NEXT_PUBLIC_DEFAULT_LOCALE || 'ar',
NODE_ENV: process.env.NODE_ENV || 'development',
IS_NETLIFY: process.env.NETLIFY === 'true'
};
}
// Register service worker
if ('serviceWorker' in navigator && typeof window !== 'undefined') {
window.addEventListener('load', async function() {
try {
// Clear any existing service workers
const registrations = await navigator.serviceWorker.getRegistrations();
for(let registration of registrations) {
await registration.unregister();
}
// Register new service worker with more error handling
const registration = await navigator.serviceWorker.register('/service-worker.js', {
scope: '/'
});
console.log('Service Worker registered successfully with scope:', registration.scope);
// Add error handling for all images including icons
window.addEventListener('error', function(event) {
if (event.target && event.target.tagName === 'IMG') {
console.warn('Image loading failed, providing fallback:', event.target.src);
// Prevent default error
event.preventDefault();
// Try to provide a fallback based on the image type
const currentSrc = event.target.src;
// Determine an appropriate fallback based on image path
let fallbackSrc = '/images/placeholder.jpg';
// If it's an avatar/author image
if (currentSrc.includes('/author/') ||
currentSrc.includes('avatar') ||
event.target.width <= 100 && event.target.height <= 100) {
fallbackSrc = '/images/placeholder-avatar.jpg';
}
// Apply the fallback
event.target.src = fallbackSrc;
// Prevent infinite error loops
event.target.onerror = null;
}
}, true);
} catch (error) {
console.error('Service Worker registration failed:', error);
}
});
}
}, []);
return (
<>
<Head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="icon" href="/icons/icon-192x192.png" type="image/png" sizes="192x192" />
<link rel="apple-touch-icon" href="/icons/icon-192x192.png" />
</Head>
<div className="font-tajawal" dir="rtl">
{/* تحميل ملف الإعدادات البيئية */}
<Script
src="/config/env.js"
strategy="beforeInteractive"
/>
<Component {...pageProps} />
</div>
</>
)
}