Chrome Web Store के बाहर होस्ट किए गए एक्सटेंशन को सिर्फ़ Linux उपयोगकर्ता इंस्टॉल कर सकते हैं. इस लेख में निजी सर्वर से .crx
फ़ाइलों को पैकेज करने, होस्ट करने, और अपडेट करने का तरीका बताया गया है. अगर
किसी एक्सटेंशन या थीम को सिर्फ़ Chrome वेब स्टोर से डिस्ट्रिब्यूट किया जा रहा है, तो वेबस्टोर
होस्टिंग और अपडेट करना देखें.
पैकेजिंग
एक्सटेंशन और थीम .crx
फ़ाइलों के तौर पर पेश किए जाते हैं. Chrome डेवलपर डैशबोर्ड से अपलोड करने पर , डैशबोर्ड अपने-आप .crx
फ़ाइल बना देता है. निजी सर्वर पर पब्लिश करने पर, .crx
फ़ाइल को डिवाइस में बनाना होगा या Chrome Web Store से डाउनलोड करना होगा.
Chrome Web Store से .crx डाउनलोड करें
अगर किसी एक्सटेंशन को Chrome वेब स्टोर पर होस्ट किया गया है, तो .crx
फ़ाइल को 'डेवलपर डैशबोर्ड' से डाउनलोड किया जा सकता है. "आपकी लिस्टिंग" में एक्सटेंशन ढूंढें और "ज़्यादा जानकारी" पर क्लिक करें. इसे डाउनलोड करने के लिए, पॉप-अप विंडो में नीले रंग के main.crx
लिंक पर क्लिक करें.
डाउनलोड की गई फ़ाइल को निजी सर्वर पर होस्ट किया जा सकता है. यह किसी एक्सटेंशन को स्थानीय रूप से होस्ट करने का सबसे सुरक्षित तरीका है, क्योंकि एक्सटेंशन के कॉन्टेंट को Chrome Web Store से हस्ताक्षर किया जाएगा. इससे संभावित हमलों और छेड़छाड़ का पता लगाने में मदद मिलती है.
स्थानीय तौर पर .crx बनाएं
एक्सटेंशन डायरेक्ट्री, एक्सटेंशन मैनेजमेंट पेज पर .crx
फ़ाइलों में बदल जाती हैं. Ominibox में
chrome://extensions/
पर जाएं या Chrome मेन्यू पर क्लिक करें. इसके बाद, "ज़्यादा टूल" पर कर्सर घुमाएं और "एक्सटेंशन" चुनें.
एक्सटेंशन मैनेजमेंट पेज पर, डेवलपर मोड के बगल में मौजूद टॉगल स्विच पर क्लिक करके, डेवलपर मोड चालू करें. इसके बाद, पैक एक्सटेंशन बटन चुनें.
एक्सटेंशन रूट डायरेक्ट्री फ़ील्ड में एक्सटेंशन के फ़ोल्डर का पाथ बताएं. इसके बाद, पैक एक्सटेंशन बटन पर क्लिक करें. पहली बार इस्तेमाल किए जाने वाले पैकेज के लिए, निजी पासकोड फ़ील्ड को अनदेखा करें.
Chrome दो फ़ाइलें बनाएगा, .crx
और .pem
फ़ाइल, जिसमें एक्सटेंशन की निजी कुंजी होगी.
निजी पासकोड न खोएं! .pem
फ़ाइल को गोपनीय और सुरक्षित जगह पर रखें. इसे
एक्सटेंशन को अपडेट करना होगा.
.crx पैकेज अपडेट करना
manifest.json
में वर्शन की संख्या बढ़ाकर, किसी एक्सटेंशन की .crx
फ़ाइल अपडेट करें.
{
...
"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
Hosting
.crx
फ़ाइलों को होस्ट करने वाले सर्वर को सही एचटीटीपी हेडर का इस्तेमाल करना चाहिए. इससे उपयोगकर्ता लिंक पर क्लिक करके एक्सटेंशन इंस्टॉल कर पाएंगे.
Google Chrome किसी फ़ाइल को इंस्टॉल करने लायक तब मानता है, जब नीचे दी गई बातों में से कोई भी बात सही हो:
- इस फ़ाइल का कॉन्टेंट टाइप
application/x-chrome-extension
है - फ़ाइल सफ़िक्स
.crx
है और नीचे दी गई दोनों सही हैं:- फ़ाइल, एचटीटीपी हेडर
X-Content-Type-Options: nosniff
के साथ नहीं दिखाई जाती है - फ़ाइल इनमें से किसी एक तरह के कॉन्टेंट के साथ दिखती है:
- खाली स्ट्रिंग
- "text/plain"
- "application/octet-stream"
- "अज्ञात/अज्ञात"
- "ऐप्लिकेशन/अज्ञात"
- "*/*"
- फ़ाइल, एचटीटीपी हेडर
इंस्टॉल की जा सकने वाली किसी फ़ाइल की पहचान न कर पाने की सबसे आम वजह यह है कि सर्वर,
हेडर X-Content-Type-Options: nosniff
भेजता है. दूसरी सबसे आम वजह यह है कि सर्वर कोई अनजान कॉन्टेंट टाइप भेजता है, जो पिछली सूची में मौजूद नहीं होता. एचटीटीपी हेडर की समस्या को ठीक करने के लिए, सर्वर का कॉन्फ़िगरेशन बदलें या .crx
फ़ाइल को किसी दूसरे सर्वर पर होस्ट करें.
अपडेट हो रहा है
हर कुछ घंटों में, ब्राउज़र अपडेट यूआरएल के लिए इंस्टॉल किए गए एक्सटेंशन की जांच करता है. हर एक यूआरएल के लिए, यह अपडेट मेनिफ़ेस्ट एक्सएमएल फ़ाइल की खोज करने के लिए अनुरोध करता है.
- अपडेट की जांच करने पर मिला कॉन्टेंट, एक अपडेट मेनिफ़ेस्ट एक्सएमएल दस्तावेज़ होता है. इसमें किसी एक्सटेंशन के सबसे नए वर्शन के बारे में बताया जाता है.
अगर अपडेट मेनिफ़ेस्ट में ऐसे वर्शन के बारे में बताया गया हो जो इंस्टॉल किए गए वर्शन के बाद वाला हो, तो ब्राउज़र
नया वर्शन डाउनलोड करके इंस्टॉल कर लेता है. मैन्युअल अपडेट की तरह ही, नई .crx
फ़ाइल पर भी उसी निजी कुंजी से साइन किया जाना चाहिए जिससे साइन इन करने के लिए, मौजूदा वर्शन में साइन इन किया गया हो.
यूआरएल अपडेट करें
'Chrome वेब स्टोर' के बाहर के सर्वर पर होस्ट किए गए एक्सटेंशन के लिए, उनकी 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 | एक्सटेंशन आईडी, सार्वजनिक कुंजी के हैश के आधार पर जनरेट होता है. इसकी जानकारी पैकेजिंग में दी गई है. एक्सटेंशन का आईडी, एक्सटेंशन मैनेजमेंट पेज पर दिखता है |
कोड बेस | .crx फ़ाइल का एचटीटीपीएस यूआरएल. |
वर्शन | इसका इस्तेमाल करके, क्लाइंट यह तय करता है कि उसे codebase की बताई गई .crx फ़ाइल डाउनलोड करनी चाहिए या नहीं. यह .crx फ़ाइल की manifest.json फ़ाइल में मौजूद "वर्शन" की वैल्यू से मेल खानी चाहिए. |
अपडेट मेनिफ़ेस्ट एक्सएमएल फ़ाइल में एक से ज़्यादा <app> एलिमेंट शामिल करके कई एक्सटेंशन के बारे में जानकारी हो सकती है.
टेस्ट करना
डिफ़ॉल्ट रूप से अपडेट जांचने की फ़्रीक्वेंसी कई घंटों की है, लेकिन एक्सटेंशन मैनेजमेंट पेज पर मौजूद अभी एक्सटेंशन अपडेट करें बटन का इस्तेमाल करके, अपडेट को फ़ोर्स किया जा सकता है.
ऐसा करने पर, इंस्टॉल किए गए सभी एक्सटेंशन की जांच शुरू हो जाएगी.
बेहतर इस्तेमाल: अनुरोध के पैरामीटर
अपने-आप अपडेट होने की बुनियादी तकनीक को इस तरह डिज़ाइन किया गया है कि सर्वर साइड का काम आसान हो जाता है. इस तरह से, Apache जैसे किसी भी सादे वेब सर्वर पर स्टैटिक एक्सएमएल फ़ाइल को छोड़ा जा सकता है और उस एक्सएमएल फ़ाइल को नए एक्सटेंशन वर्शन के तौर पर अपडेट किया जा सकता है.
कई एक्सटेंशन होस्ट करने वाले डेवलपर, अनुरोध के पैरामीटर की जांच कर सकते हैं. इनसे, अपडेट के अनुरोध में एक्सटेंशन आईडी और उसके वर्शन के बारे में पता चलता है. इन पैरामीटर को शामिल करने से, एक्सटेंशन को स्टैटिक एक्सएमएल फ़ाइल के बजाय, डाइनैमिक सर्वर-साइड कोड चलाने वाले एक ही यूआरएल से अपडेट होने की अनुमति मिलती है.
अनुरोध पैरामीटर का फ़ॉर्मैट यह है:
?x=EXTENSION_DATA
जहां EXTENSION_DATA
, इस फ़ॉर्मैट की यूआरएल-कोड में बदली गई स्ट्रिंग है:
id=EXTENSION\_ID&v=EXTENSION\_VERSION
उदाहरण के लिए, दो एक्सटेंशन एक ही अपडेट यूआरएल (https://test.com/extension_updates.php
) पर ले जाते हैं:
- पहला एक्सटेंशन
- आईडी: "आआआआआआ
- वर्शन: "1.1"
- दूसरा एक्सटेंशन
- आईडी: "bbbbbbbbbbbbbbbbbbbbbbbbb"
- वर्शन: "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 या इसके बाद वाले वर्शन का इस्तेमाल कर रहे हों.