רק משתמשי Linux יכולים להתקין תוספים שמתארחים מחוץ לחנות האינטרנט של Chrome. במאמר הזה נסביר איך לארוז, לארח ולעדכן קובצי .crx
משרת אישי. אם אתם מפיצים תוסף או עיצוב רק דרך חנות האינטרנט של Chrome, תוכלו לקרוא את המאמר אירוח ועדכון של חנות אינטרנט.
אריזה
תוספים ועיצובים מוצגים כקובצי .crx
. כשמעלים דרך מרכז השליטה למפתחים של Chrome , מרכז השליטה יוצר את הקובץ .crx
באופן אוטומטי. אם הקובץ פורסם בשרת אישי, צריך ליצור את הקובץ .crx
באופן מקומי או להוריד אותו מחנות האינטרנט של Chrome.
הורדת .crx מחנות האינטרנט של Chrome
אם תוסף מתארח בחנות האינטרנט של Chrome, אפשר להוריד את הקובץ .crx
ממרכז השליטה למפתחים. מאתרים את התוסף בקטע 'הרישומים שלך' ולוחצים על 'מידע נוסף'. בחלון הקופץ, לוחצים על הקישור הכחול main.crx
כדי להוריד אותו.
הקובץ שהורדתם יכול להתארח בשרת אישי. זו הדרך הבטוחה ביותר לארח תוסף באופן מקומי, כי התוכן של התוסף יהיה חתום על ידי חנות האינטרנט של Chrome. כך אפשר לזהות התקפות פוטנציאליות ופגיעה.
יצירת .crx באופן מקומי
ספריות תוספים מומרות לקובצי .crx
בדף ניהול התוספים. מנווטים אל chrome://extensions/
בתיבה האוטומטית, או לוחצים על תפריט Chrome, מעבירים את העכבר מעל 'כלים נוספים' ובוחרים באפשרות 'תוספים'.
בדף ניהול התוספים, מפעילים את 'מצב פיתוח' על ידי לחיצה על המתג שלצד מצב פיתוח. לאחר מכן לוחצים על הלחצן PACK Extension (תוסף חבילה).
מציינים את הנתיב לתיקייה של התוסף בשדה של ספריית הבסיס של התוסף, ואז לוחצים על הלחצן PACK Extension (חבילת תוסף). מתעלמים מהשדה מפתח פרטי כשמדובר בחבילה בפעם הראשונה.
Chrome ייצור שני קבצים, קובץ .crx
וקובץ .pem
, שמכיל את המפתח הפרטי של התוסף.
לא כדאי לאבד את המפתח הפרטי! צריך לשמור את הקובץ .pem
בסוד ומאובטח, כי יהיה צריך לעדכן את התוסף.
עדכון חבילת .crx
צריך לעדכן את קובץ .crx
של התוסף על ידי הגדלת מספר הגרסה ב-manifest.json
.
{
...
"version": "1.5",
...
}
}
{
...
"version": "1.6",
...
}
}
חוזרים אל דף ניהול התוספים ולוחצים על הלחצן תוסף PACK. מציינים את הנתיב לספריית התוספים ואת המיקום של המפתח הפרטי.
בדף יצוין הנתיב לתוסף הארוז המעודכן.
חבילה דרך שורת פקודה
תוספי חבילה בשורת הפקודה על ידי הפעלה של 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"
- "לא ידוע/לא ידוע"
- "application/לא ידוע"
- "*/*"
- הקובץ לא מוצג עם כותרת ה-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
הוא מחרוזת מקודדת של הפורמט:
id=EXTENSION\_ID&v=EXTENSION\_VERSION
לדוגמה, שני תוספים מפנים לאותה כתובת URL לעדכון (https://test.com/extension_updates.php
):
- תוסף 1
- מזהה: "aaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- גרסה: "1.1"
- תוסף 2
- מזהה: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbb שניתן באתר '
- גרסה: "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 ארוכה מדי (יותר מ-2,000 תווים בערך), בדיקת העדכון תנפיק בקשות GET נוספות לפי הצורך.
שימוש מתקדם: גרסת דפדפן מינימלית
ככל שנוספים עוד ממשקי API למערכת התוספים, ייתכן שתושק גרסה מעודכנת של תוסף שתעבוד רק עם גרסאות חדשות יותר של הדפדפן. אמנם 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 רק אם מותקנת במכשיר שלהם Google Chrome מגרסה 3.0.193.0 ואילך.