मैंने वास्तव में मूल क्रोम एक्सटेंशन बनाया और स्वत: अद्यतन सुविधा का परीक्षण करने के लिए एक साधारण node.js सर्वर स्थापित किया। सर्वर .crx फ़ाइल होस्ट करता है, इसलिए मैं http://localhost:3000/clients/chrome/extension.crx
पर जाकर बस बिना किसी परेशानी के एक्सटेंशन को इंस्टॉल कर सकता हूं। लेकिन जब मैं tools
->extensions
पर जाता हूं और Update extensions now
पर क्लिक करता हूं, तो एक्सटेंशन नए संस्करण को नहीं लाता है। सर्वर को localhost:3000/clients/chrome/updates.xml
के लिए अनुरोध प्राप्त होता है, लेकिन नई extension.crx फ़ाइल के लिए कोई अनुरोध प्राप्त नहीं होता है। मुझसे यहां क्या गलत हो रहा है?मेरा क्रोम एक्सटेंशन स्वयं ऑटो-अपडेट क्यों नहीं कर रहा है?
$ पेड़
.
|-- clients
| `-- chrome
| |-- extension
| | `-- manifest.json
| |-- extension.crx
| |-- extension.pem
| `-- updates.xml
`-- web.js
विस्तार वास्तव में है सिर्फ एक मैनिफ़ेस्ट फ़ाइल:
कोड
मुझे सिर्फ कोड में आपका मार्गदर्शन इस reproductible बनाने के लिए करते हैं ।
manifest.json
{
"name": "testing auto-updates",
"version": "1.0",
"update_url": "http://localhost:3000/clients/chrome/updates.xml"
}
आप देख सकते हैं, मैं एक update_url की चर्चा करते हुए कर रहा हूँ स्वत: अपडेट संभव बनाने के लिए।
updates.xml
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='fkphbmkcjefhhnnlhhjlnkellidponel'>
<updatecheck codebase='http://localhost:3000/clients/chrome/extension.crx' version='1.0' />
</app>
</gupdate>
विस्तार पैकेजिंग extension.crx और extension.pem पैदा करता है।
मैं भी फ़ाइलों की सेवा के लिए एक सरल Node.js सर्वर बनाया:
web.js
var express = require('express');
var app = express.createServer(express.logger());
/* ROUTES */
app.get('/clients/chrome/extension.crx', function(request, response)
{
response.contentType('application/x-chrome-extension');
response.sendfile('clients/chrome/extension.crx');
});
app.get('/clients/chrome/updates.xml', function(request, response)
{
response.sendfile('clients/chrome/updates.xml');
});
/* ROUTES END */
var port = process.env.PORT || 3000;
app.listen(port, function() {
console.log("Listening on " + port);
});
ठीक है, चलो इस परीक्षण करते हैं। सबसे पहले, सर्वर प्रारंभ:
$ नोड web.js
Listening on 3000
http://localhost:3000/clients/chrome/extension.crx जाकर एक्सटेंशन इंस्टॉल करें। यह हिस्सा पहली कोशिश पर पूरी तरह से काम करता है। सर्वर अनुरोध लॉग:
127.0.0.1 - - [Thu, 26 Apr 2012 22:25:47 GMT] "GET /clients/chrome/extension.crx HTTP/1.1" 304 - "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.19 (KHTML, like Gecko) Ubuntu/11.10 Chromium/18.0.1025.151 Chrome/18.0.1025.151 Safari/535.19"
के विस्तार को संशोधित करते हैं:
- manifest.json में, 1.1 (1.0 की intead) को
version
निर्धारित किया है। - updates.xml में,
version
से 1.1 (1.0 के बजाय) सेट करें। - उसी समय
extention.pem
फ़ाइल का उपयोग करके एक्सटेंशन को पुन: पैक करें। - नई
extension.crx
फ़ाइल बनाई गई है।>Extensions
- -Tools
पर - क्लिक करें>
Extensions
->Update extensions now
एक Tools
में 1.1 करने के लिए एक्सटेंशन के संस्करण संख्या परिवर्तन देखने की उम्मीद करेंगे।
इसके बजाए, कुछ भी नहीं होता है। सर्वर को updates.xml
के लिए अनुरोध प्राप्त है लेकिन extension.crx
के लिए नहीं।
कम से कम ड्रॉपबॉक्स के साथ मेरी सफलता एक अनियंत्रित क्रोम-लागू एचटीटीपीएस की संभावना से बाहर है आवश्यकता, जो मेरे पिछले अनुमानों में से एक था, क्योंकि ड्रॉपबॉक्स ने HTTP और HTTPS पर समान रूप से अच्छी तरह से काम किया था। – apsillers
यह अजीब चीज है: मैं इसे विभिन्न शीर्षकों के साथ करने की कोशिश कर रहा था और देखता हूं कि इससे क्या फर्क पड़ता है, लेकिन फिर यह बात बिना किसी संशोधन के पहले प्रयास पर काम करती है ... अगर मुझे पता चल जाए तो मैं वापस पोस्ट करूंगा मैं पहले प्रयास में खराब हो गया .. – Shawn
मेरा एकमात्र अन्य सिद्धांत यह है कि 1.1 सीआरएक्स फ़ाइल को मूल 1.0 फ़ाइल से कुछ अलग करने की आवश्यकता है? यही एकमात्र चीज है जिसके बारे में मैं सोच सकता हूं कि मैंने जांच नहीं की और शायद मेरे परीक्षणों में अलग-अलग किया हो। – apsillers