نظام التشغيل Linux هو المنصة الوحيدة التي يمكن لمستخدمي Chrome تثبيت إضافات مستضافة خارج
سوق Chrome الإلكتروني. توضّح هذه المقالة كيفية تجميع ملفات crx
واستضافتها وتعديلها من خادم ويب للأغراض العامة. إذا كنت توزّع إضافة أو مظهرًا فقط من خلال سوق Chrome الإلكتروني، يمكنك الرجوع إلى الاستضافة والتحديث في Webstore.
الحزمة
يتم عرض الإضافات والمظاهر كملفات .crx
. عند التحميل من خلال لوحة بيانات المطوّر
في Chrome، تنشئ لوحة البيانات ملف crx
تلقائيًا. في حال نشر التطبيق
على خادم شخصي، يجب إنشاء ملف crx
على الجهاز أو تنزيله من
سوق Chrome الإلكتروني.
تنزيل ملف .crx من "سوق Chrome الإلكتروني"
إذا كانت الإضافة مستضافة على "سوق Chrome الإلكتروني"، يمكن تنزيل ملف .crx
من
لوحة بيانات المطوّر. حدِّد موقع الإضافة ضمن "بياناتك" وانقر على "مزيد من المعلومات". في النافذة المنبثقة، انقر على الرابط الأزرق main.crx
لتنزيله.
يمكن استضافة الملف الذي تم تنزيله على خادم شخصي. هذه هي الطريقة الأكثر أمانًا لاستضافة إضافة على الجهاز، لأنّ "سوق Chrome الإلكتروني" سيوقّع على محتوى الإضافة. ويساعد ذلك في رصد الهجمات والتلاعب المحتملَين.
إنشاء ملف .crx على الجهاز
يتم تحويل أدلة الإضافات إلى ملفات .crx
في صفحة "إدارة الإضافات". انتقِل إلى رمز
chrome://extensions/
في مربّع العرض الشامل، أو انقر على قائمة Chrome، واحرِك المؤشر فوق "مزيد من الأدوات" ثم
اختَر "الإضافات".
في صفحة إدارة الإضافات، فعِّل وضع مطور البرامج من خلال النقر على مفتاح التبديل بجانب وضع مطور البرامج. بعد ذلك، انقر على الزر PACK EXTENSION (إضافة حزمة).
حدِّد المسار إلى مجلد الإضافة في حقل الدليل الجذري للإضافة، ثم انقر على الزر إضافة حزمة. تجاهَل حقل المفتاح الخاص في حزمة المرة الأولى.
سينشئ 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
- المعرّف: "bbbbbbbbbbbbbbbbbbbbbbbbbbc bbbbbbbbbbbbbbbb
- الإصدار: "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 أو إصدار أحدث.