کروم کام کر گیا۔ فائر فاکس ناکام رہا۔
میں نے دو براؤزرز میں ایک ہی صفحہ آمنے سامنے دیکھا۔
کروم میں: صفحہ بالکل ٹھیک کام کر رہا تھا۔ اس میں تصاویر، بٹن اور نتائج کی مکمل فہرست موجود تھی۔
فائر فاکس میں: صفحہ خالی تھا۔ اس میں بغیر تصاویر کے پلیس ہولڈر کارڈز (placeholder cards) نظر آ رہے تھے اور ایک پیغام تھا کہ 0 نتائج ملے (0 results found)۔
کوڈ وہی تھا۔ URL وہی تھا۔ سرور بالکل ٹھیک تھا۔
مسئلہ براؤزر کا تھا۔
فائر فاکس Enhanced Tracking Protection استعمال کرتا ہے۔ بہت سے صارفین uBlock Origin جیسے ٹولز بھی استعمال کرتے ہیں۔ یہ ٹولز ان ڈومینز (domains) کی درخواستوں کو بلاک کر دیتے ہیں جنہیں وہ ٹریکر (tracker) سمجھتے ہیں۔
میری ایپ نے Supabase ڈومین سے ڈیٹا حاصل (fetch) کیا۔ فائر فاکس کے لیے، وہ ڈومین ایک تھرڈ پارٹی ٹریکر کی طرح لگ رہا تھا۔ براؤزر نے درخواست کو مشین سے نکلنے سے پہلے ہی بلاک کر دیا۔
چونکہ fetch ناکام ہو گیا تھا، اس لیے میرے کوڈ نے فال بیک اسٹیٹ (fallback state) دکھائی۔ یہ کریش نہیں ہوا۔ اس نے کنسول (console) میں کوئی ایرر نہیں دکھایا۔ اس نے بس ایک خالی صفحہ دکھایا۔
اس سے ایک دوہرا بلائنڈ اسپاٹ (blind spot) پیدا ہو گیا:
- میرا ڈویلپمنٹ براؤزر (Chrome) بالکل ٹھیک کام کر رہا تھا۔ میں نے کبھی بگ (bug) نہیں دیکھا۔
- میری اینالیٹکس (analytics) بھی اسی ڈومین کو استعمال کر رہی تھی۔ وہ صارفین جو مواد نہیں دیکھ پا رہے تھے، انہیں ٹریک بھی نہیں کیا جا سکتا تھا۔ وہ نظر نہیں آ رہے تھے۔
میں نے اسے تھرڈ پارٹی ریکویسٹ سے فرسٹ پارٹی ریکویسٹ پر منتقل کر کے ٹھیک کیا۔
وینڈر ڈومین کو براہ راست کال کرنے کے بجائے، میں نے ریورس پراکسی (reverse proxy) استعمال کیا۔ میں نے API کو اپنے ڈومین کے ذریعے روٹ (route) کیا۔
پہلے: mysite.com calls xxxx.supabase.co (Blocked)
بعد میں: mysite.com calls mysite.com/sb-api (Trusted)
اب، براؤزر اسے same-origin ریکویسٹ کے طور پر دیکھتا ہے۔ یہ ڈیٹا کال کو سائٹ کے ہی ایک حصے کے طور پر لیتا ہے۔
اگر آپ کو اس طرح کے مسائل کا سامنا ہو، تو ان تین چیزوں کو یاد رکھیں:
• اپنے websockets پر نظر رکھیں۔ سادہ path rewrites ریئل ٹائم کنکشنز کو توڑ سکتے ہیں۔ • اپنی auth storage keys کو پن (pin) کریں۔ URL تبدیل کرنے سے براؤزر کے لاگ ان سیشنز اسٹور کرنے کا طریقہ بدل سکتا ہے۔ • اپنے مواد کو prerender کریں۔ اپنے صفحے کو مکمل طور پر JavaScript پر انحصار نہ کرنے دیں۔ اگر کوئی براؤزر آپ کے اسکرپٹ کو بلاک کر دیتا ہے، تو صارف کو HTML میں بنیادی مواد پھر بھی نظر آنا چاہیے۔
یہ فرض کرنا چھوڑ دیں کہ اگر یہ Chrome میں کام کرتا ہے، تو یہ سب کے لیے کام کرے گا۔ پرائیویسی ایکسٹینشنز (privacy extensions) آن کر کے ٹیسٹ کریں۔