خود میزبان برای لینوکس

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

بسته

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

crx. را از فروشگاه وب Chrome دانلود کنید

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

crx. را از داشبورد برنامه نویس دانلود کنید

فایل دانلود شده را می توان بر روی یک سرور شخصی میزبانی کرد. این امن ترین راه برای میزبانی محلی یک برنامه افزودنی است زیرا محتوای برنامه افزودنی توسط فروشگاه وب Chrome امضا می شود. این به شناسایی حملات احتمالی و دستکاری کمک می کند.

crx. را به صورت محلی ایجاد کنید

دایرکتوری های برنامه افزودنی در صفحه مدیریت برنامه های افزودنی به فایل های .crx . تبدیل می شوند. به chrome://extensions/ در omnibox بروید، یا روی منوی Chrome کلیک کنید، نشانگر را روی «ابزارهای بیشتر» نگه دارید و سپس «افزونه‌ها» را انتخاب کنید.

در صفحه مدیریت برنامه‌های افزودنی، با کلیک کردن روی سوئیچ کنار حالت برنامه‌نویس، حالت برنامه‌نویس را فعال کنید. سپس دکمه PACK EXTENSION را انتخاب کنید.

Developer Mode بررسی شده است و سپس روی Pack Extension کلیک کنید

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

مسیر برنامه افزودنی را مشخص کنید سپس روی Pack Extension کلیک کنید

Chrome دو فایل ایجاد می‌کند، یک فایل .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 مناسب استفاده کند تا به کاربران اجازه دهد با کلیک کردن روی یک پیوند، برنامه افزودنی را نصب کنند.

اگر یکی از موارد زیر درست باشد، Google Chrome یک فایل را قابل نصب می‌داند:

  • فایل دارای نوع محتوا application/x-chrome-extension
  • پسوند فایل .crx است و هر دو مورد زیر درست است:
    • فایل با هدر HTTP X-Content-Type-Options: nosniff ارائه نمی شود : nosniff
    • فایل با یکی از انواع محتوای زیر ارائه می شود :
    • رشته خالی
    • "text/plain"
    • "application/octet-stream"
    • "unknown/unknown"
    • "application/unknown"
    • "\*/\*"

رایج ترین دلیل عدم شناسایی فایل قابل نصب این است که سرور هدر X-Content-Type-Options: nosniff ارسال می کند. دومین دلیل متداول این است که سرور یک نوع محتوای ناشناخته را ارسال می‌کند که در لیست قبلی نیست. برای رفع مشکل هدر HTTP، پیکربندی سرور را تغییر دهید یا فایل .crx را در سرور دیگری میزبانی کنید.

به روز رسانی

هر چند ساعت، مرورگر افزونه‌های نصب‌شده را برای URL به‌روزرسانی بررسی می‌کند. برای هر یک، یک درخواست به آن URL می دهد و به دنبال فایل XML مانیفست به روز رسانی می شود.

  • محتوای بازگردانده شده توسط بررسی به‌روزرسانی یک سند XML مانیفست به‌روزرسانی است که آخرین نسخه یک برنامه افزودنی را فهرست می‌کند.

اگر مانیفست به‌روزرسانی نسخه‌ای را ذکر کند که جدیدتر از نسخه نصب شده است، مرورگر نسخه جدید را دانلود و نصب می‌کند. مانند به‌روزرسانی‌های دستی، فایل .crx جدید باید با همان کلید خصوصی نسخه نصب‌شده فعلی امضا شود.

توجه: برای حفظ حریم خصوصی کاربر، Google Chrome هیچ سرصفحه کوکی را با درخواست‌های مانیفست به‌روزرسانی خودکار ارسال نمی‌کند و هر سرصفحه Set-Cookie را در پاسخ به آن درخواست‌ها نادیده می‌گیرد.

به روز رسانی URL

برنامه‌های افزودنی میزبانی شده در سرورهای خارج از فروشگاه وب Chrome باید فیلد 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 ، زیرساخت به‌روزرسانی Google، قرض گرفته شده است. سیستم برنامه‌های افزودنی از ویژگی‌های زیر برای عناصر <app> و <updatecheck> مانیفست به‌روزرسانی استفاده می‌کند:

اپید
شناسه برنامه افزودنی بر اساس هش کلید عمومی، همانطور که در بسته بندی توضیح داده شده است، تولید می شود. شناسه یک برنامه افزودنی در صفحه مدیریت برنامه های افزودنی نمایش داده می شود.
پایگاه کد
یک URL HTTPS به فایل .crx .
نسخه
توسط کلاینت برای تعیین اینکه آیا باید فایل .crx مشخص شده توسط codebase را دانلود کند یا خیر استفاده می شود. باید با مقدار "نسخه" در فایل manifest.json فایل .crx . مطابقت داشته باشد.

فایل XML مانیفست به‌روزرسانی ممکن است حاوی اطلاعاتی درباره چندین پسوند با گنجاندن چندین عنصر <app> باشد.

تست کردن

دفعات بررسی به‌روزرسانی پیش‌فرض چندین ساعت است، اما می‌توان با استفاده از دکمه Update extensions now در صفحه مدیریت برنامه‌های افزودنی، به‌روزرسانی را مجبور کرد.

اکنون برنامه های افزودنی را به روز کنید

با این کار بررسی همه افزونه های نصب شده شروع می شود.

استفاده پیشرفته: درخواست پارامترها

مکانیزم اصلی به‌روزرسانی خودکار به گونه‌ای طراحی شده است که کار سمت سرور را به سادگی انداختن یک فایل XML استاتیک روی هر وب سرور ساده، مانند Apache، و به‌روزرسانی آن فایل XML به عنوان نسخه‌های پسوند جدید، آسان کند.

توسعه دهندگانی که چندین برنامه افزودنی را میزبانی می کنند، ممکن است پارامترهای درخواست را بررسی کنند، که شناسه برنامه افزودنی و نسخه را در درخواست به روز رسانی نشان می دهد. گنجاندن این پارامترها به برنامه‌های افزودنی اجازه می‌دهد تا از همان URL که کدهای سمت سرور پویا را به‌جای فایل XML ایستا اجرا می‌کنند، به‌روزرسانی شوند.

فرمت پارامترهای درخواستی:

?x=EXTENSION_DATA

جایی که EXTENSION_DATA یک رشته رمزگذاری شده با URL با فرمت است:

id=EXTENSION_ID&v=EXTENSION_VERSION

برای مثال، دو افزونه به یک URL به‌روزرسانی اشاره می‌کنند ( https://test.com/extension_updates.php ):

  • پسوند 1
    • شناسه: "آآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآ"
    • نسخه: "1.1"
  • پسوند 2
    • شناسه: "بببببببببببببببببببببببببببببببببببببب"
    • نسخه: "0.4"

درخواست برای به روز رسانی هر برنامه افزودنی فردی خواهد بود،

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 بیش از حد طولانی باشد (بیش از 2000 کاراکتر یا بیشتر)، بررسی به روز رسانی درخواست های GET اضافی را در صورت لزوم صادر می کند.

استفاده پیشرفته: حداقل نسخه مرورگر

با اضافه شدن API های بیشتری به سیستم برنامه های افزودنی، ممکن است نسخه به روز شده یک برنامه افزودنی که فقط با نسخه های جدیدتر مرورگر کار می کند منتشر شود. در حالی که خود Google Chrome به‌روزرسانی خودکار است، ممکن است چند روز طول بکشد تا اکثریت پایگاه کاربران به نسخه‌های جدید به‌روزرسانی شوند. برای اطمینان از اینکه یک به‌روزرسانی داده شده فقط برای نسخه‌های Google Chrome با نسخه خاص یا بالاتر از آن اعمال می‌شود، ویژگی «prodversionmin» را به عنصر <app> در پاسخ به‌روزرسانی اضافه کنید.

<?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>

این تضمین می‌کند که کاربران فقط در صورتی که از Google Chrome نسخه 3.0.193.0 یا بالاتر استفاده می‌کنند، به‌طور خودکار به نسخه 2 به‌روزرسانی می‌شوند.