2012-04-26 1 views
1

Я сделал действительно базовое расширение chrome и установил простой сервер node.js для проверки автоматического обновления. На сервере размещается файл .crx, поэтому я могу установить расширение без каких-либо проблем, просто посетив localhost:3000/clients/chrome/extension.crx. Но когда я перехожу на tools->extensions и нажимаю на Update extensions now, сервер не получает запрос. Я бы ожидал, что хром будет GET localhost:3000/clients/chrome/updates.xml, но этого не происходит. Что я здесь делаю неправильно?chrome `update extensions now` не работает


КОД

Позвольте мне вас через код, чтобы сделать это воспроизводимых:

$ дерево

. 
|-- clients 
| `-- chrome 
|  |-- extension 
|  | `-- manifest.json 
|  |-- extension.crx 
|  |-- extension.pem 
|  `-- updates.xml 
`-- web.js 

Расширение действительно только файл манифеста ,

manifest.json

{ 
    "name": "testing auto-updates", 
    "version": "1.0", 
    "update_url": "localhost:3000/clients/chrome/updates.xml", 
    "description": "Version 1.0" 
} 

Как вы можете видеть, я имею в виду на 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='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 

Установите расширение, посетив локального хоста: 3000/клиенты/хром/extension.crx. Эта часть отлично работает во второй попытке. Сервер регистрирует обе попытки:

127.0.0.1 - - [Thu, 26 Apr 2012 22:22:50 GMT] "GET /clients/chrome/extension.crx HTTP/1.1" 200 596 "-" "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" 
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" 

Далее, я иду в Инструменты-> Расширения и нажмите на Update extensions now. Я ожидаю, что хром получит файл updates.xml, чтобы увидеть, изменилось ли что-либо, но сервер не регистрирует никаких запросов.

+0

Попробуйте 'http: // localhost: 3000/clients/chrome/updates.xml' вместо этого. – abraham

+0

Спасибо, что решил эту проблему. Сделайте это ответом, чтобы я мог его принять. – Shawn

+0

Если вам нужны более легкие точки ответа, вы можете решить проблему, которая остается в этой ситуации: теперь сервер регистрирует запрос для 'updates.xml', но не для' extension.crx', хотя 'updates .xml' указывает, что есть новая версия. http://stackoverflow.com/questions/10343573/why-isnt-my-chrome-extension-auto-updating-itself – Shawn

ответ