Linux היא הפלטפורמה היחידה שבה משתמשי Chrome יכולים להתקין תוספים שמתארחים מחוץ לחנות האינטרנט של Chrome. במאמר הזה נסביר איך לארוז, לארח ולעדכן קובצי crx
משרת אינטרנט לשימוש כללי. אם אתם מפיצים תוסף או עיצוב אך ורק דרך חנות האינטרנט של Chrome, כדאי לקרוא את המאמר בנושא אירוח ועדכון בחנות האינטרנט.
Package
תוספים ועיצובים מוצגים כקבצים מסוג .crx
. כשמעלים דרך מרכז השליטה למפתחים של Chrome, מרכז השליטה יוצר את הקובץ crx
באופן אוטומטי. אם הקובץ crx
מפורסם בשרת אישי, צריך ליצור אותו באופן מקומי או להוריד אותו מחנות האינטרנט של Chrome.
הורדת .crx מחנות האינטרנט של Chrome
אם תוסף מסוים מתארח בחנות האינטרנט של Chrome, אפשר להוריד את הקובץ .crx
ממרכז השליטה למפתחים. מאתרים את התוסף בקטע 'הרישומים שלך' ולוחצים על 'מידע נוסף'. בחלון הקופץ, לוחצים על הקישור הכחול main.crx
כדי להוריד אותו.
הקובץ שהורדתם יכול להתארח בשרת אישי. זו הדרך הבטוחה ביותר לארח תוסף באופן מקומי, כי התוכן של התוסף יהיה חתום על ידי חנות האינטרנט של Chrome. כך אפשר לזהות התקפות ופגיעה אפשריות.
יצירת .crx באופן מקומי
ספריות תוספים מומרות לקובצי .crx
בדף ניהול התוספים. מנווטים אל
chrome://extensions/
בסרגל הכתובות או לוחצים על תפריט Chrome, מחזיקים את הסמן מעל 'כלים נוספים' ובוחרים
'תוספים'.
בדף 'ניהול תוספים', מפעילים את 'מצב פיתוח' על ידי לחיצה על המתג שלצד מצב פיתוח. לאחר מכן לוחצים על הלחצן PACK Extension (תוסף מארז).
מציינים את הנתיב לתיקייה של התוסף בשדה 'ספריית הבסיס של התוסף', ולאחר מכן לוחצים על הלחצן PACK Extension (תוסף PACK). מתעלמים מהשדה מפתח פרטי כשמדובר בחבילה בפעם הראשונה.
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
Host
שרת שמארח קובצי .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, שולחים בקשה לכתובת ה-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
- מזהה: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- גרסה: "1.1"
- תוסף 2
- מזהה: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbvo- לחשבונות
- גרסה: "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' לאלמנט <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 רק אם מותקנת בהם גרסת Google Chrome 3.0.193.0 ומעלה.