Chrome Web Store के बाहर होस्ट किए गए एक्सटेंशन, सिर्फ़ Linux इस्तेमाल करने वाले लोग इंस्टॉल कर सकते हैं. इस लेख में, निजी सर्वर से .crx फ़ाइलों को पैकेज करने, होस्ट करने, और अपडेट करने का तरीका बताया गया है. अगर किसी एक्सटेंशन या थीम को सिर्फ़ Chrome Web Store के ज़रिए डिस्ट्रिब्यूट किया जा रहा है, तो Webstore
पर होस्ट करने और अपडेट करने से जुड़ा लेख पढ़ें.
पैकेजिंग
एक्सटेंशन और थीम, .crx फ़ाइलों के तौर पर उपलब्ध होती हैं. Chrome Developer
Dashboard के ज़रिए अपलोड करने पर , डैशबोर्ड अपने-आप .crx फ़ाइल बनाता है. अगर किसी निजी सर्वर पर पब्लिश किया जाता है, तो .crx फ़ाइल को स्थानीय तौर पर बनाना होगा या Chrome Web Store से डाउनलोड करना होगा.
Chrome Web Store से .crx डाउनलोड करना
अगर कोई एक्सटेंशन Chrome Web Store पर होस्ट किया गया है, तो .crx फ़ाइल को डेवलपर डैशबोर्ड से डाउनलोड किया जा सकता है. "आपकी लिस्टिंग" में जाकर, एक्सटेंशन ढूंढें और "ज़्यादा जानकारी" पर क्लिक करें. पॉप-अप विंडो में, इसे डाउनलोड करने के लिए नीले रंग के main.crx लिंक पर क्लिक करें.

डाउनलोड की गई फ़ाइल को किसी निजी सर्वर पर होस्ट किया जा सकता है. किसी एक्सटेंशन को स्थानीय तौर पर होस्ट करने का यह सबसे सुरक्षित तरीका है. ऐसा इसलिए, क्योंकि एक्सटेंशन के कॉन्टेंट पर Chrome Web Store का साइन होगा. इससे संभावित हमलों और छेड़छाड़ का पता लगाने में मदद मिलती है.
.crx को स्थानीय तौर पर बनाना
एक्सटेंशन मैनेजमेंट पेज पर, एक्सटेंशन की डायरेक्ट्री को .crx फ़ाइलों में बदला जाता है. ओमनीबॉक्स में chrome://extensions/ पर जाएं या Chrome मेन्यू पर क्लिक करें. इसके बाद, "ज़्यादा टूल" पर कर्सर घुमाएं और फिर "एक्सटेंशन" चुनें.
एक्सटेंशन मैनेजमेंट पेज पर, डेवलपर मोड के बगल में मौजूद टॉगल स्विच पर क्लिक करके, डेवलपर मोड चालू करें. इसके बाद, एक्सटेंशन पैक करें बटन चुनें.

एक्सटेंशन की रूट डायरेक्ट्री वाले फ़ील्ड में, एक्सटेंशन के फ़ोल्डर का पाथ डालें. इसके बाद, एक्सटेंशन पैक करें बटन पर क्लिक करें. पहली बार पैकेज बनाते समय, निजी कुंजी वाले फ़ील्ड को अनदेखा करें.

Chrome दो फ़ाइलें बनाएगा: एक .crx फ़ाइल और दूसरी .pem फ़ाइल. .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 फ़ाइलों को होस्ट करने वाले सर्वर पर, सही एचटीटीपी हेडर का इस्तेमाल किया जाना चाहिए. इससे उपयोगकर्ता, किसी लिंक पर क्लिक करके एक्सटेंशन इंस्टॉल कर पाएंगे.
Google Chrome, किसी फ़ाइल को इंस्टॉल किया जा सकने वाला तब मानता है, जब इनमें से कोई एक शर्त पूरी होती है:
- फ़ाइल का कॉन्टेंट टाइप
application/x-chrome-extensionहो - फ़ाइल का सफ़िक्स
.crxहो और ये दोनों शर्तें पूरी होती हों:- फ़ाइल को एचटीटीपी हेडर
X-Content-Type-Options: nosniffके साथ नहीं दिखाया गया हो - फ़ाइल को इनमें से किसी एक कॉन्टेंट टाइप के साथ दिखाया गया हो:
- खाली स्ट्रिंग
- "text/plain"
- "application/octet-stream"
- "unknown/unknown"
- "application/unknown"
- "*/*"
- फ़ाइल को एचटीटीपी हेडर
इंस्टॉल की जा सकने वाली फ़ाइल को न पहचान पाने की सबसे आम वजह यह है कि सर्वर, हेडर X-Content-Type-Options: nosniff भेजता है. दूसरी सबसे आम वजह यह है कि सर्वर, ऐसा कॉन्टेंट टाइप भेजता है जो पहले वाली सूची में नहीं है. एचटीटीपी हेडर से जुड़ी समस्या को ठीक करने के लिए, सर्वर की कॉन्फ़िगरेशन में बदलाव करें या .crx फ़ाइल को किसी दूसरे सर्वर पर होस्ट करने की कोशिश करें.
अपडेट करना
हर कुछ घंटों में, ब्राउज़र इंस्टॉल किए गए एक्सटेंशन के लिए अपडेट यूआरएल की जांच करता है. हर एक्सटेंशन के लिए, ब्राउज़र उस यूआरएल पर अनुरोध भेजता है, ताकि अपडेट मेनिफ़ेस्ट की एक्सएमएल फ़ाइल ढूंढी जा सके.
- अपडेट की जांच के बाद मिलने वाला कॉन्टेंट, अपडेट मेनिफ़ेस्ट की एक्सएमएल फ़ाइल होती है. इसमें, एक्सटेंशन का नया वर्शन शामिल होता है.
अगर अपडेट मेनिफ़ेस्ट में ऐसा वर्शन शामिल है जो इंस्टॉल किए गए वर्शन से नया है, तो ब्राउज़र उस नए वर्शन को डाउनलोड और इंस्टॉल करता है. मैन्युअल तरीके से अपडेट करने की तरह, नई .crx फ़ाइल पर भी वही निजी कुंजी का साइन होना चाहिए जो फ़िलहाल इंस्टॉल किए गए वर्शन पर है.
यूआरएल अपडेट करें
Chrome Web Store के बाहर मौजूद सर्वर पर होस्ट किए गए एक्सटेंशन की
manifest.json फ़ाइल में, update_url फ़ील्ड शामिल होना चाहिए.
{
"name": "My extension",
...
"update_url": "https://myhost.com/mytestextension/updates.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>
यह एक्सएमएल फ़ॉर्मैट, Google के अपडेट इन्फ़्रास्ट्रक्चर Omaha के फ़ॉर्मैट से लिया गया है. एक्सटेंशन सिस्टम, अपडेट मेनिफ़ेस्ट के <app> और <updatecheck> एलिमेंट के लिए इन एट्रिब्यूट का इस्तेमाल करता है:
| appid | एक्सटेंशन आईडी, सार्वजनिक कुंजी के हैश के आधार पर जनरेट होता है. इसकी जानकारी, पैकेजिंग में दी गई है. एक्सटेंशन का आईडी, एक्सटेंशन मैनेजमेंट पेज पर दिखता है |
| codebase | .crx फ़ाइल का एचटीटीपीएस यूआरएल. |
| version | इसका इस्तेमाल, क्लाइंट यह तय करने के लिए करता है कि उसे codebase में तय की गई .crx फ़ाइल डाउनलोड करनी चाहिए या नहीं. यह .crx फ़ाइल की manifest.json फ़ाइल में मौजूद "version" की वैल्यू से मेल खाना चाहिए. |
अपडेट मेनिफ़ेस्ट की एक्सएमएल फ़ाइल में, एक से ज़्यादा <app> एलिमेंट शामिल करके, कई एक्सटेंशन के बारे में जानकारी दी जा सकती है.
टेस्ट करना
अपडेट की जांच की डिफ़ॉल्ट फ़्रीक्वेंसी कुछ घंटे होती है. हालांकि, एक्सटेंशन मैनेजमेंट पेज पर मौजूद, एक्सटेंशन को अभी अपडेट करें बटन का इस्तेमाल करके, अपडेट को फ़ोर्स किया जा सकता है.

इससे, इंस्टॉल किए गए सभी एक्सटेंशन के लिए जांच शुरू हो जाएगी.
बेहतर इस्तेमाल: अनुरोध के पैरामीटर
ऑटो-अपडेट का बुनियादी तरीका, सर्वर-साइड के काम को आसान बनाने के लिए डिज़ाइन किया गया है. इसके तहत, किसी भी सामान्य वेब सर्वर (जैसे, Apache) पर स्टैटिक एक्सएमएल फ़ाइल को ड्रॉप किया जा सकता है. साथ ही, एक्सटेंशन के नए वर्शन रिलीज़ होने पर, उस एक्सएमएल फ़ाइल को अपडेट किया जा सकता है.
कई एक्सटेंशन होस्ट करने वाले डेवलपर, अनुरोध के पैरामीटर की जांच कर सकते हैं. इन पैरामीटर से, अपडेट के अनुरोध में एक्सटेंशन आईडी और वर्शन की जानकारी मिलती है. इन पैरामीटर को शामिल करने से, एक्सटेंशन को एक ही यूआरएल से अपडेट किया जा सकता है. इसके लिए, स्टैटिक एक्सएमएल फ़ाइल के बजाय, डाइनैमिक सर्वर-साइड कोड का इस्तेमाल किया जाता है.
अनुरोध के पैरामीटर का फ़ॉर्मैट यह है:
?x=EXTENSION_DATA
यहां EXTENSION_DATA, यूआरएल-एन्कोड की गई ऐसी स्ट्रिंग है जिसका फ़ॉर्मैट यह है:
id=EXTENSION\_ID&v=EXTENSION\_VERSION
उदाहरण के लिए, दो एक्सटेंशन एक ही अपडेट यूआरएल (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
हर यूनीक अपडेट यूआरएल के लिए, एक ही अनुरोध में कई एक्सटेंशन की सूची दी जा सकती है. ऊपर दिए गए उदाहरण के लिए, अगर किसी उपयोगकर्ता ने दोनों एक्सटेंशन इंस्टॉल किए हैं, तो दोनों अनुरोधों को मिलाकर एक अनुरोध बनाया जाता है:
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
अगर एक ही अपडेट यूआरएल का इस्तेमाल करने वाले इंस्टॉल किए गए एक्सटेंशन की संख्या इतनी ज़्यादा है कि GET अनुरोध का यूआरएल बहुत लंबा हो जाता है (लगभग 2,000 से ज़्यादा वर्ण), तो अपडेट की जांच के लिए, ज़रूरत के हिसाब से अतिरिक्त GET अनुरोध जारी किए जाते हैं.
बेहतर इस्तेमाल: ब्राउज़र का ज़रूरी वर्शन
एक्सटेंशन सिस्टम में ज़्यादा एपीआई जोड़े जाने पर, एक्सटेंशन का अपडेट किया गया वर्शन रिलीज़ किया जा सकता है. यह वर्शन, ब्राउज़र के नए वर्शन के साथ ही काम करेगा. Google Chrome अपने-आप अपडेट होता है. हालांकि, किसी नए वर्शन को रिलीज़ होने के बाद, ज़्यादातर उपयोगकर्ताओं के डिवाइस पर अपडेट होने में कुछ दिन लग सकते हैं. यह
पक्का करने के लिए कि कोई अपडेट सिर्फ़ Google Chrome के किसी खास
वर्शन या उससे नए वर्शन पर लागू हो, अपडेट के जवाब में
<?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 या उससे नया वर्शन इस्तेमाल कर रहे हों.