我做了一个非常基本的Chrome扩展,并设置了一个简单的node.js服务器来测试自动更新功能。服务器托管.crx文件,因此我可以通过访问http://localhost:3000/clients/chrome/extension.crx
而毫无困难地安装扩展。但是当我去tools
- >extensions
并点击Update extensions now
时,扩展名不会获取新版本。服务器确实收到localhost:3000/clients/chrome/updates.xml
的请求,但没有收到任何关于新的extension.crx文件的请求。我在这里做错了什么?为什么我的Chrome扩展不能自动更新?
CODE
让我带你通过代码来使这个reproductible:
$树
.
|-- clients
| `-- chrome
| |-- extension
| | `-- manifest.json
| |-- extension.crx
| |-- extension.pem
| `-- updates.xml
`-- web.js
扩展名是真的只是一个清单文件。
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,设置
version
〜1.1(1.0这一翻译)。 - 在updates.xml中,将
version
设置为1.1(而不是1.0)。 - 首次使用相同的
extention.pem
文件重新打包扩展。 - 创建新的
extension.crx
文件。 - 点击
Tools
- >Extensions
- >Update extensions now
人们会期望看到扩展的版本号的变化在Tools
1.1 - >Extensions
。
相反,没有任何反应。服务器收到updates.xml
的请求,但不是extension.crx
。
至少我与Dropbox的成功排除了一个未公开的镀铬强制HTTPS的可能性要求,这是我早先的猜测之一,因为Dropbox在HTTP和HTTPS上工作得很好。 – apsillers 2012-04-30 06:15:06
这是最奇怪的事情:我正准备尝试使用各种标题,看看它有什么不同,但是第一次尝试的时候没有任何修改......我会回复,如果我找到了什么我在第一次尝试中搞砸了。 – Shawn 2012-05-02 00:13:45
我唯一的其他理论是1.1 CRX文件需要命名与原始1.0文件不同的东西吗?这是我能想到的唯一的事情,我没有检查,可能在我的测试中做了不同的处理。 – apsillers 2012-05-03 21:21:50