Я сделал действительно базовое расширение 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, чтобы увидеть, изменилось ли что-либо, но сервер не регистрирует никаких запросов.
Попробуйте 'http: // localhost: 3000/clients/chrome/updates.xml' вместо этого. – abraham
Спасибо, что решил эту проблему. Сделайте это ответом, чтобы я мог его принять. – Shawn
Если вам нужны более легкие точки ответа, вы можете решить проблему, которая остается в этой ситуации: теперь сервер регистрирует запрос для 'updates.xml', но не для' extension.crx', хотя 'updates .xml' указывает, что есть новая версия. http://stackoverflow.com/questions/10343573/why-isnt-my-chrome-extension-auto-updating-itself – Shawn