افزونههایی که خارج از فروشگاه وب کروم میزبانی میشوند، فقط توسط کاربران لینوکس قابل نصب هستند. این مقاله نحوه بستهبندی، میزبانی و بهروزرسانی فایلهای .crx از یک سرور شخصی را شرح میدهد. اگر یک افزونه یا قالب را صرفاً از طریق فروشگاه وب کروم توزیع میکنید، به بخش میزبانی و بهروزرسانی فروشگاه وب مراجعه کنید.
بسته بندی
افزونهها و قالبها به صورت فایلهای .crx ارائه میشوند. هنگام آپلود از طریق داشبورد توسعهدهندگان کروم ، داشبورد به طور خودکار فایل .crx را ایجاد میکند. در صورت انتشار روی یک سرور شخصی، فایل .crx باید به صورت محلی ایجاد شود یا از فروشگاه وب کروم دانلود شود.
دانلود .crx از فروشگاه وب کروم
اگر افزونهای در فروشگاه وب کروم میزبانی میشود، فایل .crx را میتوان از داشبورد توسعهدهندگان دانلود کرد. افزونه را در قسمت «لیستهای شما» پیدا کنید و روی «اطلاعات بیشتر» کلیک کنید. در پنجره بازشو، روی لینک آبی main.crx کلیک کنید تا آن را دانلود کنید.

فایل دانلود شده میتواند روی یک سرور شخصی میزبانی شود. این امنترین راه برای میزبانی یک افزونه به صورت محلی است زیرا محتوای افزونه توسط فروشگاه وب کروم امضا میشود. این به تشخیص حملات و دستکاریهای احتمالی کمک میکند.
ایجاد فایل .crx به صورت محلی
دایرکتوریهای افزونهها در صفحه مدیریت افزونهها به فایلهای .crx تبدیل میشوند. در ominibox به chrome://extensions/ بروید، یا روی منوی کروم کلیک کنید، نشانگر ماوس را روی «ابزارهای بیشتر» نگه دارید و سپس «افزونهها» را انتخاب کنید.
در صفحه مدیریت افزونهها، با کلیک روی دکمهی کنار Developer mode، حالت توسعهدهنده را فعال کنید. سپس دکمهی PACK EXTENSION را انتخاب کنید.

مسیر پوشه افزونه را در فیلد دایرکتوری ریشه افزونه مشخص کنید و سپس روی دکمه PACK EXTENSION کلیک کنید. فیلد کلید خصوصی را برای بستهای که برای اولین بار نصب میشود، نادیده بگیرید.

کروم دو فایل ایجاد میکند، یک فایل با پسوند .crx و یک فایل .pem که حاوی کلید خصوصی افزونه است.

کلید خصوصی را گم نکنید! فایل .pem را در مکانی مخفی و امن نگه دارید؛ برای بهروزرسانی افزونه به آن نیاز خواهید داشت.
بهروزرسانی یک بسته .crx
فایل .crx یک افزونه را با افزایش شماره نسخه در manifest.json بهروزرسانی کنید.
{
...
"version": "1.5",
...
}
}
{
...
"version": "1.6",
...
}
}
به صفحه مدیریت افزونهها برگردید و روی دکمه PACK EXTENSION کلیک کنید. مسیر دایرکتوری افزونهها و محل کلید خصوصی را مشخص کنید.

این صفحه مسیر افزونهی بستهبندیشدهی بهروزرسانیشده را ارائه میدهد.

بستهبندی از طریق خط فرمان
افزونهها را در خط فرمان با فراخوانی chrome.exe بستهبندی کنید. از پرچم --pack-extension برای مشخص کردن محل پوشه افزونه و از پرچم --pack-extension-key برای مشخص کردن محل فایل کلید خصوصی افزونه استفاده کنید.
chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem
میزبانی وب
سروری که میزبان فایلهای .crx است، باید از هدرهای HTTP مناسب استفاده کند تا کاربران بتوانند با کلیک روی یک لینک، افزونه را نصب کنند.
گوگل کروم در صورتی فایلی را قابل نصب میداند که یکی از موارد زیر صادق باشد:
- این فایل دارای نوع محتوای
application/x-chrome-extensionاست. - پسوند فایل
.crx است و هر دو مورد زیر صحیح است:- فایل با هدر HTTP ارائه نمیشود
X-Content-Type-Options: nosniff - این فایل با یکی از انواع محتوای زیر ارائه میشود :
- رشته خالی
- «متن/ساده»
- "برنامه/جریان هشتتایی"
- «نامشخص/ناشناس»
- "برنامه/ناشناخته"
- «*/*»
- فایل با هدر HTTP ارائه نمیشود
رایجترین دلیل عدم شناسایی یک فایل قابل نصب این است که سرور هدر X-Content-Type-Options: nosniff را ارسال میکند. دومین دلیل رایج این است که سرور یک نوع محتوای ناشناخته ارسال میکند - محتوایی که در لیست قبلی نیست. برای رفع مشکل هدر HTTP، یا پیکربندی سرور را تغییر دهید یا سعی کنید فایل .crx را در سرور دیگری میزبانی کنید.
در حال بهروزرسانی
هر چند ساعت، مرورگر افزونههای نصبشده را برای یافتن نشانی اینترنتی بهروزرسانی بررسی میکند. برای هر یک، درخواستی به آن نشانی اینترنتی ارسال میکند تا فایل XML مانیفست بهروزرسانی را جستجو کند.
- محتوایی که توسط بررسی بهروزرسانی برگردانده میشود، یک سند XML مانیفست بهروزرسانی است که آخرین نسخه یک افزونه را فهرست میکند.
اگر در مانیفست بهروزرسانی، نسخهای جدیدتر از نسخه نصبشده ذکر شود، مرورگر نسخه جدید را دانلود و نصب میکند. همانند بهروزرسانیهای دستی، فایل .crx جدید باید با همان کلید خصوصی نسخه نصبشده فعلی امضا شود.
بهروزرسانی آدرس اینترنتی
افزونههایی که روی سرورهای خارج از فروشگاه وب کروم میزبانی میشوند، باید فیلد update_url را در فایل manifest.json خود قرار دهند.
{
"name": "My extension",
...
"update_url": "https://myhost.com/mytestextension/updates.xml",
...
}
مانیفست را بهروزرسانی کنید
مانیفست بهروزرسانی که توسط سرور برگردانده میشود باید یک سند XML باشد.
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
<updatecheck codebase='https://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
</app>
</gupdate>
این قالب XML از قالب مورد استفاده توسط Omaha ، زیرساخت بهروزرسانی گوگل، گرفته شده است. سیستم افزونهها از ویژگیهای زیر برای عناصر <app> و <updatecheck> در مانیفست بهروزرسانی استفاده میکند:
| اپلیکیشن | شناسه افزونه بر اساس هش کلید عمومی، همانطور که در بستهبندی توضیح داده شده است، تولید میشود. شناسه افزونه در صفحه مدیریت افزونهها نمایش داده میشود. |
| کدبیس | یک آدرس اینترنتی HTTPS به فایل .crx . |
| نسخه | توسط کلاینت برای تعیین اینکه آیا باید فایل .crx مشخص شده توسط codebase را دانلود کند یا خیر، استفاده میشود. این فایل باید با مقدار "version" در فایل manifest.json فایل .crx مطابقت داشته باشد. |
فایل XML مانیفست بهروزرسانی ممکن است با گنجاندن چندین عنصر <app>، حاوی اطلاعاتی در مورد چندین افزونه باشد.
آزمایش
فواصل زمانی پیشفرض برای بررسی بهروزرسانی چند ساعت است، اما میتوان با استفاده از دکمهی « اکنون افزونهها را بهروزرسانی کنید» در صفحهی مدیریت افزونهها، بهروزرسانی را اجباری کرد.

این کار بررسی همه افزونههای نصب شده را آغاز میکند.
کاربرد پیشرفته: پارامترهای درخواست
مکانیزم پایهی بهروزرسانی خودکار به گونهای طراحی شده است که کار سمت سرور را به سادگیِ قرار دادن یک فایل XML استاتیک روی هر وب سرور سادهای مانند آپاچی و بهروزرسانی آن فایل XML با انتشار نسخههای جدید افزونهها، انجام دهد.
توسعهدهندگانی که میزبان چندین افزونه هستند، ممکن است پارامترهای درخواست را بررسی کنند که نشاندهنده شناسه و نسخه افزونه در درخواست بهروزرسانی است. گنجاندن این پارامترها به افزونهها اجازه میدهد تا از همان URL که کد سمت سرور پویا را به جای یک فایل XML ایستا اجرا میکند، بهروزرسانی شوند.
قالب پارامترهای درخواست به صورت زیر است:
?x=EXTENSION_DATA
که در آن EXTENSION_DATA یک رشته کدگذاری شده توسط URL با فرمت زیر است:
id=EXTENSION\_ID&v=EXTENSION\_VERSION
برای مثال، دو افزونه به یک URL بهروزرسانی یکسان ( https://test.com/extension_updates.php ) اشاره میکنند:
- الحاقیه ۱
- شناسه: "آآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآ"
- نسخه: «۱.۱»
- الحاقیه ۲
- شناسه: "بببببببببببببببببببببببببببببببببببببب"
- نسخه: «۰.۴»
درخواست بهروزرسانی هر افزونه به صورت جداگانه به صورت زیر خواهد بود:
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1
و
https://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
میتوان چندین افزونه را در یک درخواست واحد برای هر URL بهروزرسانی منحصر به فرد فهرست کرد. برای مثال بالا، اگر کاربری هر دو افزونه را نصب کرده باشد، دو درخواست در یک درخواست واحد ادغام میشوند:
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
اگر تعداد افزونههای نصبشدهای که از یک URL بهروزرسانی یکسان استفاده میکنند به اندازهای زیاد باشد که URL درخواست GET بیش از حد طولانی شود (بیش از ۲۰۰۰ کاراکتر یا بیشتر)، بررسی بهروزرسانی، در صورت لزوم درخواستهای GET اضافی صادر میکند.
استفاده پیشرفته: حداقل نسخه مرورگر
با اضافه شدن APIهای بیشتر به سیستم افزونهها، ممکن است نسخه بهروزرسانیشدهای از یک افزونه که فقط با نسخههای جدیدتر مرورگر کار میکند، منتشر شود. اگرچه خود گوگل کروم بهطور خودکار بهروزرسانی میشود، اما ممکن است چند روز طول بکشد تا اکثر کاربران به هر نسخه جدید بهروزرسانی شوند. برای اطمینان از اینکه یک بهروزرسانی خاص فقط برای نسخههای گوگل کروم در یک نسخه خاص یا بالاتر اعمال میشود، ویژگی "prodversionmin" را به ... اضافه کنید.
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
<updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' prodversionmin='3.0.193.0'/>
</app>
</gupdate>
این امر تضمین میکند که کاربران فقط در صورتی که از گوگل کروم ۳.۰.۱۹۳.۰ یا بالاتر استفاده میکنند، به طور خودکار به نسخه ۲ بهروزرسانی میشوند.