非常に基本的な chrome 拡張機能を作成し、単純な node.js サーバーをセットアップして、自動更新機能をテストしました。サーバーは .crx ファイルをホストするので、.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
拡張子は、実際には単なるマニフェスト ファイルです。
マニフェスト.json
{
"name": "testing auto-updates",
"version": "1.0",
"update_url": "http://localhost:3000/clients/chrome/updates.xml"
}
ご覧のとおり、自動更新を可能にするために update_url を参照しています。
update.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.0 ではなく) 1.1 に設定します。 extention.pem
初回と同じファイルを使用して拡張機能を再パックします。- 新しい
extension.crx
ファイルが作成されます。 - クリック
Tools
->Extensions
->Update extensions now
Tools
->で拡張機能のバージョン番号が 1.1 に変更されることが予想されますExtensions
。
代わりに、何も起こりません。サーバーは に対するリクエストを受け取りますが、 に対するリクエストは受け取りupdates.xml
ませんextension.crx
。