چند وقت پیش تصمیم گرفتم مرورگرم رو عوض کنم رفتم سراغ بریو. نصبش روی فدورا مثل آب خوردن بود و وقتی برای اولین بار اجرا شد، ازم پرسید: «میخوای اطلاعاتت رو از کروم سینک کنم؟» خوشحال و خندون گفتم آره. همهچیز رو منتقل کرد... جز اکستنشنها!
با اینکه تیک مربوط به extensions رو هم زده بودم، اما هیچ افزونهای منتقل نشد. یه سرچ کوچیک کردم، ولی چیزی دستگیرم نشد. ماجرا رو بیخیال شدم... تا امروز!
امروز تصمیم گرفتم بهجای اینکه منتظر مرورگر بمونم تا اکستنشنهامو منتقل کنه، خودم دستبهکار شم و این فرایند رو انجام بدم.

اگر لینوکسکار باشید، حتماً با مسیر config. برخورد داشتید. این دایرکتوری محلیه که برنامهها تنظیمات کاربرمحورشونو اونجا نگه میدارن. مثلاً nvim تنظیماتش و تنظیمات پلاگینهاش رو اینجا ذخیره میکنه.
مرورگرها هم همینطورن. Chrome یا Brave برای خودشون دایرکتوریهایی داخل config. میسازن و اطلاعاتی مثل:
پروفایل کاربر
اکستنشنها
تمها و تنظیمات
هیستوری و بوکمارکها
و ...
رو اونجا ذخیره میکنن.
کافیه بریم داخل دایرکتوری کروم، اکستنشنهارو پیدا کنیم، آخرین نسخهی هرکدوم رو برداریم و تو Brave لود کنیم.
نکته:
ممکنه چند نسخه از کروم (مثل beta, dev یا stable) داشته باشید، پس پوشهای که دقیقاً استفاده میکنید رو بشناسید. مثلاً:
~/.config/google-chrome/Default/وقتی وارد دایرکتوری نسخه مد نظرتون از کروم میشید، یه سری فایلها و دایرکتوریهایی میبینید که به نظر یکم عجیب میان :)
مثلاً:
Address Validation Rules
برای اعتبارسنجی آدرسهاست. اگر بازش کنید میبینید یه مپه که داره یه سری دیتا درباره فرمت آدرسهای مختلف تو خودش نگه میداره
AmountExtractionHeuristicRegexes
این دایرکتوری محتواش یه سری ریجکس و الگوریتمه برای استخراج عدد از متن. مثلاً برای حالت autofill.
BrowserMetrics
این دایرکتوری وظیفهاش جمعآوری دادههایی متریکه که برای بهبود مرورگر ازش استفاده میکنن، مثلاً خطاها، پرفورمنس، یوزیجها و...
WasmTtsEngine
موتور text-to-speech که بر پایه WebAssembly هست.
و بقیه فایلا و دایرکتوری ها.
وقتی وارد دایرکتوری Default/ بشید، با کلی فایل و پوشهی عجیبغریب مواجه میشید، مثلاً:
Bookmarks و Bookmarks.bak: اطلاعات بوکمارکها
Top Sites: سایتهایی که بیشتر بازدید کردید
Cookies: کوکی سایتها
فایل Visited Links ردپای لینکهایی که بازدید کردی.
Login Data, Favicons و ...
خوشبختانه یه سری از این فایلا مثل کوکی ها و ... فایلای sqlite هستن و برای مشاهدهی محتوای این فایلامیتونید از پلاگین SQLite Viewer for VS Code استفاده کنید و خیلی راحت دیتاشو بخونید.
پوشهی اصلیشون اینه:
~/.config/{chrome-name}/Default/Extensions/داخل این پوشه، دایرکتوریهایی با نامهای عجیب میبینید، نگران نباشید اینارم میبینیم که دقیقا چی هستن.

اول بیایید بریم سراغ chrome و مرورگرمونو باز کنیم بعد تو آدرس بار عبارت زیر رو بنویسیم:
chrome://extensionsبعد میبینیم که یه لیستی از اکستنشن هامون میاد و زیر هر کدوم دوتا دکمه هست : Details و Remove.
البته یه toggle button هم هست که برای فعال یا غیر فعال کردن اون افزونه ست.
یکی از اکستنشن ها رو انتخاب کنید و روی Details کلیک کنید.
تو صفحه ای که باز میشه اطلاعاتی مثل توضیحات، ورژن، سایز و ... نشون داده میشه یکی دیگه از آیتم هایی که اونجا میبینید ExtensionID یا حتی ممکنه ID خالی نوشته باشه.
خوب دقت کنید این براتون آشنا نیست؟!
آفرین دقیقا. این یکی از اون اسامی همون دایرکتوری هایی هست که داخل دایرکتوری Extensions تو config. دیدیم. پس الان دقیقا میدونیم که کدوم اکستنشن، دیتاش تو کدوم دایرکتوریه.
حالا من چون میخواستم کل اکستنشن هامو متنقل کنم اومدم یه اسکریپت نوشتم که میاد آخرین نسخه از اون اکستنشن ها رو برمیداره و میبره داخل یه دایرکتوری به اسم chrome_extensions_backup میزاره (که از طریق این لینک میتونید بهش دسترسی داشته باشید).
حالا برای اینکه بتونید اکستنشن هاتونو تو بریو ایمپورت کنید کافیه که اول اسکریپت بالا رو ران کنید بعد مرورگر بریو رو باز کنید و تو آدرسبار بنویسید:
brave://extensionsبعد مراحل زیرو انجام میدیم:
Developer mode رو فعال کنید
روی Load unpacked کلیک کنید
مسیر هر اکستنشن رو از داخل chrome_extensions_backup انتخاب کنید
همین! افزونههاتون یکییکی لود میشن
یه سری اکستنشن ها هستن که دیتا دارن مثلا اکستنشن authentication
واقعیتش خودم این مورد رو که داشتم، سعی کردم از طریق خود اکستنشن تو کروم یه بک اپ بگیرم بعد اینور ایمپورت کنم که خیلی روش امن تریه ولی خوب شما میتونید این روشی که میگم رو هم امتحان کنید ( نمیدونم جواب میده یا چی چون تا الان امتحان نکردم صرفا میدونمش :) )
دیتاهای اکستنشن ها در پنج جا ممکنه ذخیره بشن:
در localStorage or sessionStorage
در indexedDB
در chrome.storage.sync و chrome.storage.local
فایل ها و کش های مختص به خود اکستنشن
Local Extension Settings
کاری که باید بکنید برید اول آی دی اون اکستنشن رو در بیارید که بتونید دیتاشو پیدا کنید بعد در دایرکتوری Default:
محتویات مربوط به اون آی دی رو از دایرکتوری های Local Extension Settings و IndexedDB و Extension State ببرید تو همین دایرکتوری ها در Default بریو.
~/.config/BraveSoftware/Brave-Browser/Default/مثلا یه نمونه بخوام بگم:
cp -r ~/.config/google-chrome/Default/Local\ Extension\ Settings/<ext-id> \
~/.config/BraveSoftware/Brave-Browser/Default/Local\ Extension\ Settings/به همین صورت برای دوتا دایرکتوری های دیگه هم همینکارو بکنید.
اما دو تا نکته:
نکته۱: ممکنه اکستنشن از chrome.storage.sync استفاده کنه که در اینصورت نیاز به لاگین با حساب گوگل هست و به محض لاگین عملیات sync شدن شروع میشه
نکته۲: ممکنه یه سری اکشتنشن ها باشن مثل LastPass یا MetaMask که اینا دیتای رمزنگاری شده دارن در نتیجه فقط با لاگین فعال میشن و کپی کردن دایرکتوری ها ممکنه کافی نباشه
امیدوارم این تجربه کمکتون کنه اگه خواستید از Chrome به Brave مهاجرت کنید و مشکلی شبیه به من داشتید بتونید راحت تر مشکل تونو حل کنید.
اگر دوست داشتید بیشتر درباره ساختار پوشههای Default/ و یا حتی خود فایل ها و دایرکتوری های کروم بدونید، تو کامنت یا از راههای دیگه بهم خبر بدید تا مفصلتر سراغش بریم :)
مراقب خودتون باشید 🌱
فعلا.