我做了一個非常基本的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