رفتار متفاوت Safari و Firefox با سایتهای بزرگ
خلاصهٔ کاملتر
یه حقیقت جالب دربارهی مرورگرها: Safari و Firefox داخل کدشون چکهایی دارن که میگه «اگه کاربر روی این دامنه بود، اینجوری رفتار کن». این featureای عمدیه، نه باگ، و روی میلیاردها دستگاه اجرا میشه. فایل Quirks.cpp در WebKit و سیستم about:compat در Firefox این تغییرات رو کاملاً مستند کردن و سورسکدشون هم عمومیه.
Firefox یه صفحهی مخصوص داره به اسم about:compat که لیستی از مداخلات سایتمحور رو با کلیدهای toggle نشون میده. این سیستم CSS و جاوااسکریپت سفارشی به دامنههای خاص تزریق میکنه، user agent string رو تغییر میده، و باگهایی رو میپوشونه که وگرنه وب رو خراب میکردن.
Safari هم همین کارو زیر اسم «quirks» انجام میده. توضیحات داخل Quirks.cpp خیلی گویاست؛ مثلاً اشاره میکنه که Facebook، X و Reddit کد ویدیویی اشتباهی نوشتن که باعث میشه ویدیو در حین PiP (Picture-in-Picture) پاز بشه، پس مرورگر خودش این مشکل رو برای این دامنهها patch میکنه. چند ماه گذشته هم برای Zillow، TikTok، Instagram Reels، Netflix، Twitch و Amazon Prime Video quirkهای جدید اضافه شدن.
یکی از جالبترین بخشها اینه که Safari گاهی خودش رو به عنوان Chrome معرفی میکنه. سایتهایی که مرورگر رو شناسایی میکنن (browser sniffing) و برای غیر-Chrome تجربهی ضعیفتری میدن، با این user agent جعلی دور زده میشن:
auto chromeUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36"_s;
این رشته داخل WebKit کامپایل شده و هر وقت لازم بشه استفاده میشه. Firefox هم همین کارو میکنه.
اما کروم چرا این فایلها رو نداره؟ نه چون بهتر مهندسی شده، بلکه چون وب اصلاً برای کروم ساخته شده. وقتی بیش از ۸۰٪ کاربرها از مرورگرهای Chromium-based استفاده میکنن، توسعهدهندهها اول برای کروم میسازن. کروم استاندارد رو تعریف میکنه؛ بقیه باید یا پیروی کنن یا quirk بنویسن. این دقیقاً همون چرخهایه که در دوران Internet Explorer هم دیدیم.
نکتهی عملی مهم اینه که سایت شما ممکنه الان از یه quirk بهرهمند بشه و اصلاً ندونید. هیچ خطایی در console نمیبینید، هیچ هشداری نیست. اگه فقط توی کروم تست میکنید، ممکنه سایتتون درست به نظر برسه نه به خاطر کد خوب، بلکه چون رفتار کروم با فرضیات شما همخوانی داره. راهحل سادهست: سایتتون رو مرتب توی Firefox و Safari هم تست کنید.
نکات کلیدی:
- Safari و Firefox کدهای دامنهمحور دارن که رفتار رندرینگ رو برای سایتهای خاص عوض میکنن
- این quirkها معمولاً جبران باگهایی هستن که توسعهدهندهی سایت برطرف نکرده
- Safari گاهی با یه user agent جعلی خودش رو Chrome معرفی میکنه تا سایتهایی که browser sniffing دارن درست کار کنن
- کروم به quirk نیاز نداره چون وب اصلاً برای کروم ساخته شده — کروم خودش استاندارد واقعیه
- این وضعیت شبیه دوران IE در دههی ۲۰۰۰ میلادیه؛ تاریخ تکرار شده، فقط جای بازیگرها عوض شده
- سایت خودتون رو مرتب در مرورگرهای غیر-Chrome تست کنید تا از quirkهای پنهان باخبر بشید




