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