يمكن لمستخدمي Linux فقط تثبيت الإضافات المستضافة خارج سوق Chrome الإلكتروني. توضّح هذه المقالة كيفية تجميع ملفات .crx واستضافتها وتعديلها من خادم شخصي. في حال توزيع إضافة أو مظهر من خلال سوق Chrome الإلكتروني فقط، يُرجى الرجوع إلى استضافة وتحديث سوق Chrome الإلكتروني.
حزمة المحتوى
يتم عرض الإضافات والمظاهر كملفات .crx. عند التحميل من خلال لوحة بيانات المطوّر في Chrome، تنشئ اللوحة ملف .crx تلقائيًا. إذا تم نشر ملف .crx على خادم شخصي، يجب إنشاء الملف محليًا أو تنزيله من "سوق Chrome الإلكتروني".
تنزيل ملف .crx من "سوق Chrome الإلكتروني"
إذا كانت الإضافة مستضافة على "سوق Chrome الإلكتروني"، يمكن تنزيل ملف .crx من
"لوحة بيانات المطوّر". ابحث عن الإضافة ضمن "إعلاناتك" وانقر على "مزيد من المعلومات". في النافذة المنبثقة، انقر على الرابط الأزرق main.crx لتنزيله.

يمكن استضافة الملف الذي تم تنزيله على خادم شخصي. وهذه هي الطريقة الأكثر أمانًا لاستضافة إضافة على الجهاز، لأنّ "سوق Chrome الإلكتروني" سيوقّع على محتوى الإضافة. يساعد ذلك في رصد الهجمات المحتملة والتلاعب بالبيانات.
إنشاء ملف .crx محليًا
يتم تحويل أدلة الإضافات إلى ملفات .crx في صفحة "إدارة الإضافات". انتقِل إلى
chrome://extensions/ في شريط العناوين، أو انقر على قائمة Chrome، ثم مرِّر مؤشر الماوس فوق "المزيد من الأدوات"، ثم اختَر "الإضافات".
في صفحة "إدارة الإضافات"، فعِّل "وضع المطوّرين" من خلال النقر على زر التبديل بجانب وضع المطوّرين. بعد ذلك، انقر على زر توسيع الحزمة.

حدِّد مسار مجلد الإضافة في حقل "دليل جذر الإضافة"، ثم انقر على الزر حزمة الإضافة. تجاهل حقل المفتاح الخاص للحزمة التي يتم إنشاؤها لأول مرة.

سينشئ Chrome ملفَين، أحدهما .crx والآخر .pem، ويحتوي الأخير على المفتاح الخاص للإضافة.

لا تفقد المفتاح الخاص. احتفِظ بملف .pem في مكان سرّي وآمن، لأنّك ستحتاج إليه لتحديث الإضافة.
تعديل حزمة .crx
عدِّل ملف .crx لإحدى الإضافات من خلال زيادة رقم الإصدار في manifest.json.
{
...
"version": "1.5",
...
}
}
{
...
"version": "1.6",
...
}
}
ارجع إلى صفحة إدارة الإضافات وانقر على الزر حزمة الإضافة. حدِّد مسار دليل الإضافات وموقع المفتاح الخاص.

ستوفّر الصفحة مسار الحزمة المعدَّلة.

إنشاء حزمة من خلال سطر الأوامر
يمكنك حزم الإضافات في سطر الأوامر عن طريق استدعاء 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 - يتم عرض الملف باستخدام أحد أنواع المحتوى التالية:
- سلسلة فارغة
- "text/plain"
- "application/octet-stream"
- "unknown/unknown"
- "application/unknown"
- "*/*"
- لا يتم عرض الملف مع عنوان HTTP
السبب الأكثر شيوعًا لعدم التعرّف على ملف قابل للتثبيت هو أنّ الخادم يرسل العنوان X-Content-Type-Options: nosniff. السبب الثاني الأكثر شيوعًا هو أنّ الخادم يرسل نوع محتوى غير معروف، أي نوعًا غير مدرَج في القائمة السابقة. لحلّ مشكلة في عنوان HTTP، يمكنك تغيير إعدادات الخادم أو محاولة استضافة ملف .crx على خادم آخر.
جارٍ التعديل
يفحص المتصفّح الإضافات المثبَّتة كل بضع ساعات بحثًا عن عنوان URL للتحديث. بالنسبة إلى كل عنوان URL، يتم إرسال طلب إلى هذا العنوان للبحث عن ملفّ بيان التحديث بتنسيق XML.
- المحتوى الذي يتم عرضه عند التحقّق من توفّر تحديث هو مستند XML لبيان التحديث يتضمّن أحدث إصدار من الإضافة.
إذا كان بيان التحديث يشير إلى إصدار أحدث من الإصدار المثبَّت، سيقوم المتصفّح بتنزيل الإصدار الجديد وتثبيته. كما هو الحال مع التحديثات اليدوية، يجب توقيع ملف .crx الجديد باستخدام المفتاح الخاص نفسه الذي تم استخدامه في الإصدار المثبَّت حاليًا.
عنوان 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> في بيان التحديث:
| appid | يتم إنشاء معرّف الإضافة استنادًا إلى تجزئة المفتاح العام، كما هو موضّح في التغليف. يظهر رقم تعريف الإضافة في صفحة إدارة الإضافات |
| قاعدة الرموز البرمجية | عنوان URL يستخدم HTTPS لملف .crx |
| إصدار | يستخدمه العميل لتحديد ما إذا كان عليه تنزيل الملف .crx الذي تحدّده السمة codebase. يجب أن تتطابق مع قيمة "الإصدار" في ملف manifest.json الخاص بملف .crx. |
قد يحتوي ملف XML لبيان التعديل على معلومات حول إضافات متعددة من خلال تضمين عناصر <app> متعددة.
الاختبار
يتم التحقّق من التحديثات تلقائيًا كل بضع ساعات، ولكن يمكن فرض إجراء تحديث باستخدام الزر تحديث الإضافات الآن في صفحة "إدارة الإضافات".

سيؤدي ذلك إلى بدء عمليات التحقّق من جميع الإضافات المثبَّتة.
الاستخدام المتقدّم: مَعلمات الطلب
تم تصميم آلية التحديث التلقائي الأساسية لتسهيل العمل على جهة الخادم، وذلك من خلال إسقاط ملفّ 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
- المعرّف: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- الإصدار: "1.1"
- الإضافة 2
- المعرّف: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- الإصدار: "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 إضافية حسب الحاجة.
الاستخدام المتقدّم: الحدّ الأدنى لإصدار المتصفّح
مع إضافة المزيد من واجهات برمجة التطبيقات إلى نظام الإضافات، قد يتم إصدار نسخة معدَّلة من إضافة تعمل فقط مع الإصدارات الأحدث من المتصفّح. مع أنّ Google Chrome يتم تحديثه تلقائيًا،
قد يستغرق وصول أي إصدار جديد إلى معظم المستخدمين بضعة أيام. لضمان تطبيق تحديث معيّن على إصدارات Google Chrome التي تساوي إصدارًا معيّنًا أو أحدث منه فقط، أضِف السمة "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>
سيضمن ذلك عدم التحديث التلقائي إلى الإصدار 2 إلا إذا كان المستخدمون يستخدمون الإصدار 3.0.193.0 من Google Chrome أو إصدارًا أحدث.